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

如何通过Helm Chart管理Google服务账号及相关密钥

GKE + Helm 场景下 Google 服务账号密钥自动化管理方案

需求1:通过Helm自动创建Secret,无需手动执行kubectl命令

你可以直接在Helm Chart中新增Secret资源模板,配合安装时传入密钥文件路径参数实现自动创建,步骤如下:

  • 在你的Helm Chart的templates/目录下新建secret.yaml文件,内容示例:
apiVersion: v1
kind: Secret
metadata:
  name: pubsub-key
type: Opaque
data:
  key.json: {{ .Values.gcpServiceAccountKey | b64enc | quote }}
  • 安装Helm Release时通过参数传入本地密钥文件内容,避免硬编码到Chart中,命令如下:
    helm install your-release-name ./your-chart-path --set gcpServiceAccountKey=$(cat PATH-TO-KEY-FILE.json)
    后续迁移到其他集群时,只要本地保留密钥文件,执行上述安装命令即可自动完成Secret创建,无需手动调用kubectl。

需求2:推送Helm Chart到仓库时不暴露明文密钥

上述方案已经天然满足该需求,因为密钥内容是安装时动态传入的,没有硬编码到Chart的任何文件中。如果需要更安全的托管方案,可选择以下两种常用方案:

方案A:使用Sealed Secrets

  • 先在集群中安装Sealed Secrets控制器,本地安装kubeseal命令行工具
  • 用kubeseal将原始密钥加密为只能被集群中控制器解密的SealedSecret资源,将该加密后的资源文件直接放到Helm Chart的templates目录中
  • 加密后的内容即使泄露也无法被第三方解密,可安全提交到代码仓库或推送Chart到公开仓库

方案B:使用GCP原生的Workload Identity(GKE场景优先推荐)

完全避免把服务账号密钥导出到集群外,不需要管理任何密钥文件:

  • 为GKE集群启用Workload Identity功能
  • 将K8s服务账号与具备GCS权限的Google服务账号进行绑定
  • 在Deployment的模板中指定使用绑定后的K8s服务账号,应用可直接获得对应权限,全程不需要创建任何存储密钥的Secret资源

最佳实践建议

  • 禁止将任何明文密钥硬编码到Helm Chart的values.yaml或其他模板文件中,所有敏感信息必须通过安装参数、外部密钥管理系统注入
  • GKE场景优先使用Workload Identity,从根本上消除服务账号密钥泄露的风险
  • 如果必须使用密钥文件的方式,定期轮转密钥,每次轮转后重新执行helm upgrade命令更新Secret即可
  • 不要将密钥文件提交到任何代码仓库,本地存储建议添加到.gitignore等忽略规则中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:15:01