已成功使用 Kubernetes 实施 Vault,并且在 K8s 中运行的应用程序正在从 HashicorpVault 获取环境变量。一切都很好!但是,想要向前迈出一步,每当对 Vault 中的密钥进行更改时都希望重新启动 pod,到目前为止,每当我们对 Vault 密钥进行更改时,我们都必须手动重新启动 pod 以重置环境变量。如何实现这一目标?听说过confd,但不知道如何实现!
使用重新加载器https://github.com/stakater/Reloader。我们发现它在我们的集群中非常有用。它进行滚动更新,因此您也可以在零停机的情况下更改配置。另外,如果您在 configmap 中犯了一些错误,您可以轻松地进行回滚。
https://www.vaultproject.io/docs/agent/template#renewals-and-updating-secrets
如果密钥或令牌不可更新或租赁,Vault Agent 将每 5 分钟获取一次密钥。这是不可配置的。不可更新的秘密包括(但不限于)KV 版本 2。
最后,出于好奇,我想出了一个想法,即构建一个 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 可能对一些人有帮助。
使用此 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