Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Kubernetes中使用Vault HA执行滚动更新?_Kubernetes_Hashicorp Vault - Fatal编程技术网

如何在Kubernetes中使用Vault HA执行滚动更新?

如何在Kubernetes中使用Vault HA执行滚动更新?,kubernetes,hashicorp-vault,Kubernetes,Hashicorp Vault,我正在K8s中运行一个HashiCorp Vault无状态集,三个节点上有三个POD 展开后,我手动打开保险库。然后,保险库一直处于未密封状态 问题是当其中一个节点重新启动时,Vault pod将以未密封模式重新启动。 是否有任何方法可以通过服务器与其中一个已打开的POD通信来自动打开Vault节点 我不想在更新Kubernetes环境和重新启动所有节点(滚动更新-逐个更新)时手动打开Vault吊舱 我也不想将未密封的密钥存储在K8s机密中,甚至不想存储在文件中,因为这会使我的机密加密变得毫无用

我正在K8s中运行一个HashiCorp Vault无状态集,三个节点上有三个POD

展开后,我手动打开保险库。然后,保险库一直处于未密封状态

问题是当其中一个节点重新启动时,Vault pod将以未密封模式重新启动。 是否有任何方法可以通过服务器与其中一个已打开的POD通信来自动打开Vault节点

我不想在更新Kubernetes环境和重新启动所有节点(滚动更新-逐个更新)时手动打开Vault吊舱

我也不想将未密封的密钥存储在K8s机密中,甚至不想存储在文件中,因为这会使我的机密加密变得毫无用处

这是我的yaml:


经过进一步的挖掘,我明白了,我想要的是不可能的。 每当重新启动Vault实例时,都会首先将其解封,并且无法使用Vault自己的技术自动将其解封

您可以在GitHub中找到许多“vault Uncapler”实现,它们通过定期检查vault pods状态并在必要时将其解封来填补这一空白

建议使用K8s readinessprobe,以避免服务访问密封的保险库吊舱

由于没有官方的“vault Unceller”图像,因此必须谨慎使用公共实现。为了避免安全漏洞和许可问题,我最终编写了自己的“金库解封器”

我的解决方案是一个带有每个保险库吊舱的侧车容器。首先必须使用
kubectl exec…
在一侧车手动输入一次解锁钥匙。 侧车定期检查所有保险库吊舱,并在密封的情况下将打开的钥匙传递给另一个侧车。如果侧车收到解封密钥,它们将存储在内存中,并用于解封其自己的Vault实例

  • kubect aply-f保险库。yaml
    ->0保险库启动
  • kubectl exec vault-0-c侧车…
    输入解锁键->vault-0侧车解锁vault-0并准备就绪
  • vault-1启动
  • vault-0侧车检测到vault-1未密封,并调用vault-1侧车传输未密封钥匙。->vault-1侧车打开vault-0并准备就绪
  • 等等
  • 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"