[英]How perform a rolling update with Vault HA in Kubernetes?
我正在K8s中運行HashiCorp Vault無狀態集,在三個節點上有3個容器。
部署后,我手動打開Vault的密封。 然后,保管庫始終保持未密封狀態。
問題是,當其中一個節點重新啟動時,Vault pod會以非密封模式重新啟動。 有什么方法可以通過與已經拆封的容器之一進行服務器-服務器通信來自動拆開Vault節點嗎?
當我更新Kubernetes環境並且重新啟動所有節點(滾動更新-逐一)時,我不想手動解開Vault容器。
我也不想將解封密鑰存儲在K8s密鑰甚至文件中,因為這會使對我的密鑰進行加密變得毫無用處。
這是我的yaml:
apiVersion: v1
kind: Service
metadata:
name: vault
spec:
clusterIP: None
ports:
- name: http
port: 8200
- name: server
port: 8201
selector:
xyz.service: vault
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: vault
labels:
xyz.service: vault
spec:
serviceName: "vault"
selector:
matchLabels:
xyz.service: vault
replicas: 3
template:
metadata:
labels:
xyz.service: vault
spec:
imagePullSecrets:
- name: reg-dhc-xyzoms-pull-secret
securityContext:
runAsUser: 100
fsGroup: 1000
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: xyz.service
operator: In
values:
- vault
topologyKey: kubernetes.io/hostname
containers:
- name: vault
image: vault:0.11.0
resources:
requests:
memory: "100Mi"
env:
- name: SKIP_SETCAP
value: dontcare
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: "status.podIP"
- name: "VAULT_CLUSTER_ADDR"
value: "https://$(POD_IP):8201"
ports:
- name: http
containerPort: 8200
protocol: "TCP"
- name: server
containerPort: 8201
protocol: "TCP"
經過更多的挖掘,我了解到,我想要的是不可能的。 無論何時重新啟動Vault實例,都將首先將其密封,並且無法使用Vault擁有的技術自動將其密封。
您可以在GitHub和Docker商店中找到許多“不安全的 存儲 庫”實現,它們通過定期檢查Vault容器狀態並在必要時將其啟封來嘗試填補這一空白。
建議使用K8s就緒探針,以避免服務訪問密封的Vault吊艙。
由於沒有官方的“未注冊保險庫”圖像,因此必須謹慎使用公共實現。 我最終寫了我自己的“保險庫管理員”,以避免安全漏洞和許可問題。
我的解決方案是在每個Vault吊艙中放置一個小車容器。 首先必須在一側kubectl exec ...
使用kubectl exec ...
手動輸入kubectl exec ...
鍵。 邊車會定期檢查所有保險櫃的吊艙,並將解封的鑰匙傳遞給另一輛已密封的邊車。 如果Sidecar收到解封密鑰,則它們會存儲在內存中,並用於解封其自己的Vault實例。
kubect aply -f vault.yaml
> vault-0開始 kubectl exec vault-0 -c sidecar ...
輸入解封密鑰-> vault-0 sidecar解封vault-0並准備就緒
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.