当 Hashicorp Vault 中的密钥更新时如何重新启动 Kubernetes pod?

问题描述 投票:0回答:5

已成功使用 Kubernetes 实施 Vault,并且在 K8s 中运行的应用程序正在从 HashicorpVault 获取环境变量。一切都很好!但是,想要向前迈出一步,每当对 Vault 中的密钥进行更改时都希望重新启动 pod,到目前为止,每当我们对 Vault 密钥进行更改时,我们都必须手动重新启动 pod 以重置环境变量。如何实现这一目标?听说过confd,但不知道如何实现!

kubernetes hashicorp-vault confd
5个回答
4
投票

使用重新加载器https://github.com/stakater/Reloader。我们发现它在我们的集群中非常有用。它进行滚动更新,因此您也可以在零停机的情况下更改配置。另外,如果您在 configmap 中犯了一些错误,您可以轻松地进行回滚。


1
投票

一些想法,取决于您想投入多少努力:

  1. 只需经常重新启动 Pod 即可。执行此操作的一种巧妙方法是使用活性探针,例如这个答案。缺点是如果没有额外的脚本,您就无法使用活性探针作为真正的健康检查。

  2. 创建一个operator,轮询 Vault 是否有更改,并指示 Kubernetes 在检测到更改时重新启动 pod。不确定 Vault 是否有可用于此目的的事件 API。


0
投票

https://www.vaultproject.io/docs/agent/template#renewals-and-updating-secrets

如果密钥或令牌不可更新或租赁,Vault Agent 将每 5 分钟获取一次密钥。这是不可配置的。不可更新的秘密包括(但不限于)KV 版本 2。


0
投票

最后,出于好奇,我想出了一个想法,即构建一个 Operator 来监视 Vault 中特定 Secret Engine 的任何更改,并重新启动自定义资源中定义的相应 Deployment 的 Pod。这是带有代码库的中等博客 - https://medium.com/@ashitacharya1/the-auto-rollout-of-kubernetes-pods-upon-change-of-hashicorp-vault-secrets-kopf- Operator-670aa670def0 可能对一些人有帮助。


0
投票

使用此 CRD,

apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
  name: backend-env
  namespace: backend
spec:
  type: kv-v2
  mount: backend-app
  path: backend/env
  destination:
    name: env
    create: true
    overwrite: true
  rolloutRestartTargets:
    - kind: Deployment
      name: backend-app

并在

backend-app
部署中将机密安装为 env,

envFrom:
  - secretRef:
    name: env
© www.soinside.com 2019 - 2024. All rights reserved.