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

使用Artifacthub公开Helm Chart部署K8s服务时,如何通过Vault注入敏感信息

使用Vault向ArtifactHub Helm Chart注入敏感信息的实现方法

前提条件

  • 已部署并配置Vault集群,且启用Kubernetes认证方法
  • Kubernetes集群已完成与Vault的身份验证绑定(含服务账户关联、权限策略配置)
  • 已了解目标ArtifactHub Helm Chart的values结构,明确需要注入敏感信息的字段

方法一:Vault Sidecar Injector自动注入(官方推荐)

通过Mutating Webhook自动为Pod注入Vault Agent Sidecar,拉取Vault敏感数据并挂载到容器内,无需手动管理Secret生命周期。

步骤1:配置Vault与K8s的认证及权限

  1. 启用Kubernetes认证:
    vault auth enable kubernetes
    
  2. 配置K8s集群信息(替换<K8S_API_SERVER>和CA证书路径):
    vault write auth/kubernetes/config \
      kubernetes_host="https://<K8S_API_SERVER>:6443" \
      kubernetes_ca_cert=@/path/to/k8s-ca.crt
    
  3. 创建Vault访问策略(示例:允许读取secret/data/myapp/*路径),保存为app-policy.hcl:
    path "secret/data/myapp/*" {
      capabilities = ["read"]
    }
    
    加载策略:
    vault policy write myapp-policy app-policy.hcl
    
  4. 绑定K8s服务账户到该策略(假设Helm使用的服务账户为myapp-sa,命名空间myapp-ns):
    vault write auth/kubernetes/role/myapp-role \
      bound_service_account_names=myapp-sa \
      bound_service_account_namespaces=myapp-ns \
      policies=myapp-policy \
      ttl=24h
    

步骤2:修改Helm values触发Sidecar注入

在自定义values.yaml中添加Pod注解,触发Vault注入:

podAnnotations:
  vault.hashicorp.com/agent-inject: "true"
  vault.hashicorp.com/role: "myapp-role"
  # 将Vault中secret/data/myapp/db的内容注入到容器/opt/secrets/db文件
  vault.hashicorp.com/agent-inject-secret-db: "secret/data/myapp/db"
  # 自定义注入文件的模板格式
  vault.hashicorp.com/agent-inject-template-db: |
    {{- with secret "secret/data/myapp/db" -}}
    username: {{ .Data.data.username }}
    password: {{ .Data.data.password }}
    {{- end -}}
  # 设置注入文件的路径、权限和所有者
  vault.hashicorp.com/agent-inject-file-db: "/opt/secrets/db"
  vault.hashicorp.com/agent-inject-perms-db: "0640"
  vault.hashicorp.com/agent-inject-owner-db: "root:root"

执行Helm安装/升级:

helm upgrade --install myapp <artifacthub-chart-name> -f custom-values.yaml -n myapp-ns

步骤3:验证注入效果

进入Pod检查Sidecar容器和敏感文件:

kubectl exec -it myapp-xxx-xxx -n myapp-ns -- cat /opt/secrets/db

方法二:同步Vault数据到K8s Secret后由Helm引用

通过同步工具将Vault数据同步到K8s Secret,再让Helm Chart直接引用该Secret,适合不希望引入Sidecar的场景。

步骤1:使用External Secrets Operator同步Vault数据

  1. 创建SecretStore指向Vault(命名空间myapp-ns):
    apiVersion: external-secrets.io/v1beta1
    kind: SecretStore
    metadata:
      name: vault-secret-store
      namespace: myapp-ns
    spec:
      provider:
        vault:
          server: "https://vault.example.com:8200"
          path: "secret"
          version: "v2"
          auth:
            kubernetes:
              mountPath: "auth/kubernetes"
              role: "myapp-role"
              serviceAccountRef:
                name: myapp-sa
    
  2. 创建ExternalSecret同步Vault数据到K8s Secret:
    apiVersion: external-secrets.io/v1beta1
    kind: ExternalSecret
    metadata:
      name: myapp-db-secret
      namespace: myapp-ns
    spec:
      secretStoreRef:
        name: vault-secret-store
        kind: SecretStore
      target:
        name: myapp-db-secret
      data:
      - secretKey: username
        remoteRef:
          key: secret/data/myapp/db
          property: username
      - secretKey: password
        remoteRef:
          key: secret/data/myapp/db
          property: password
    

步骤2:修改Helm values引用同步后的Secret

根据Chart的配置结构,将敏感字段指向K8s Secret的key:

database:
  username:
    valueFrom:
      secretKeyRef:
        name: myapp-db-secret
        key: username
  password:
    valueFrom:
      secretKeyRef:
        name: myapp-db-secret
        key: password

执行Helm安装/升级即可。


关键注意事项

  • 遵循最小权限原则,Vault策略仅授予应用所需的敏感数据路径访问权限
  • Sidecar注入方式支持自动凭证轮换,无需手动更新Secret
  • 同步方式需确保同步工具(如External Secrets Operator)的高可用性,避免Secret失效
  • 部分ArtifactHub公开Chart可能需要自定义模板支持Secret引用,需提前查阅Chart文档确认

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:56:07