You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes中通过Pod/定时任务更新HashiCorp Vault键值对?

在Kubernetes中用CronJob通过ServiceAccount更新Vault KV键值对

核心思路

利用Vault的Kubernetes认证方法,让CronJob的Pod通过自身的ServiceAccount JWT完成Vault认证,无需额外API密钥,再执行KV更新操作。以下是具体实现步骤:


1. 确认Vault已启用Kubernetes Auth

如果之前已配置过读取密钥用的Kubernetes Auth,可跳过此步。未配置的话,先启用并绑定集群:

# 启用Kubernetes Auth方法
vault auth enable kubernetes

# 配置Vault与K8s集群的内部连接
vault write auth/kubernetes/config \
  kubernetes_host="https://kubernetes.default.svc.cluster.local" \
  kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt

2. 创建Vault更新策略

为ServiceAccount创建仅包含KV写入权限的策略,比如允许更新secret/app-config路径:

# 编写策略文件update-app-policy.hcl
path "secret/data/app-config/*" {
  capabilities = ["create", "update", "patch"]
}
# 若用KV v1版本,路径改为"secret/app-config/*"

导入策略到Vault:

vault policy write update-app update-app-policy.hcl

3. 绑定ServiceAccount到Vault策略

假设CronJob使用app-vault-updater这个ServiceAccount(可复用现有读取用的SA),创建Vault角色关联该SA和策略:

vault write auth/kubernetes/role/app-updater-role \
  bound_service_account_names=app-vault-updater \
  bound_service_account_namespaces=your-namespace \
  policies=update-app \
  ttl=1h

4. 编写Kubernetes CronJob配置

创建CronJob YAML,使用Vault官方镜像完成认证与KV更新:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: vault-kv-updater
  namespace: your-namespace
spec:
  schedule: "0 */6 * * *" # 每6小时执行一次,按需调整
  jobTemplate:
    spec:
      template:
        spec:
          serviceAccountName: app-vault-updater
          containers:
          - name: vault-cli
            image: hashicorp/vault:latest
            command:
            - sh
            - -c
            - |
              export VAULT_ADDR=http://vault.vault.svc.cluster.local:8200
              # 通过Kubernetes Auth自动登录(无需手动提供密钥)
              vault login -method=kubernetes role=app-updater-role
              # 执行KV更新,替换为实际的令牌生成逻辑
              vault kv put -mount=secret app-config token=$(your-token-generation-command)
              # KV v1版本用:vault kv put secret/app-config token=$(your-token-generation-command)
          restartPolicy: OnFailure

关键细节

  • 无API密钥依赖:Pod会自动挂载ServiceAccount的JWT到/var/run/secrets/kubernetes.io/serviceaccount/token,Vault CLI会自动读取完成认证。
  • 令牌生成逻辑:将your-token-generation-command替换为实际获取新令牌的代码(比如调用内部API、生成随机字符串等)。
  • 权限最小化:Vault策略仅赋予必要的KV写入权限,避免过度授权。

测试验证

先运行临时Pod验证流程:

kubectl run test-vault-update --serviceaccount=app-vault-updater --image=hashicorp/vault:latest -it --rm -- sh
# 在Pod内执行:
export VAULT_ADDR=http://vault.vault.svc.cluster.local:8200
vault login -method=kubernetes role=app-updater-role
vault kv put -mount=secret app-config test-key=test-value

操作成功后再部署CronJob即可。


内容的提问来源于stack exchange,提问作者VladoPortos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:55:24