如何向Helm的values.yaml注入密钥且避免敏感信息上传Git
解决方案
你可以通过Helm原生的多Values文件合并能力实现需求,全程无需修改子Chart代码,具体实现有两种常用方案:
方案1:私有Values文件合并(最简便)
步骤1:拆分公开与敏感配置
首先修改可提交到Git的values/deploymentXY.yaml,仅保留非敏感配置,删除param3字段:
subchart: configuration: param1: "foo" param2: "bar"
步骤2:创建私有敏感配置文件
新建secrets-deploymentXY.yaml文件,仅存储敏感配置:
subchart: configuration: param3: "supersecret"
将该文件路径添加到.gitignore中,确保不会被误提交到Git仓库。
步骤3:调整部署命令
Helm支持同时指定多个Values文件,后加载的文件会与前面的配置做层级合并、同名值覆盖,因此直接在原有部署命令后追加敏感配置文件即可:
helm upgrade -i mychart helm/mychart -f values/deploymentXY.yaml -f secrets-deploymentXY.yaml
方案2:基于Kubernetes Secret动态注入
如果不想在本地存储明文敏感配置文件,可以提前将敏感值存入集群的Secret资源,部署时动态读取注入:
步骤1:创建Secret资源
手动在集群中创建存储敏感值的Secret(该配置不要提交到Git,可通过权限管控限制Secret的访问范围):
apiVersion: v1 kind: Secret metadata: name: mychart-secrets type: Opaque stringData: param3: "supersecret"
执行kubectl apply -f <secret文件名>创建资源。
步骤2:调整部署命令
部署时通过kubectl读取Secret的敏感值,用--set参数注入到对应配置项:
helm upgrade -i mychart helm/mychart -f values/deploymentXY.yaml --set subchart.configuration.param3=$(kubectl get secret mychart-secrets -o jsonpath='{.data.param3}' | base64 -d)
注意事项
- 若使用CI/CD流程部署,可将敏感值存入CI系统的保密变量中,部署时通过
--set参数或临时生成敏感Values文件注入,无需在任何代码文件中明文存储敏感值 - 两种方案都不会影响原有非敏感配置的加载逻辑,param1、param2等公开配置可以正常从Git存储的Values文件中读取
内容的提问来源于stack exchange,提问作者dafna
相关产品推荐
相关产品推荐

