如何将Helm中共享配置与敏感数据迁移至全局配置和Secret?
方案可行性及实现步骤
完全可行,通过Helm全局配置集中管理+Kubernetes Secret存储敏感数据,可满足需求。以下是具体实现步骤:
一、迁移Shards配置到全局
- 清理局部配置:删除
some-module1、some-module2、some-module3各自values.yaml中的shards配置段,避免局部值干扰全局配置。 - 配置全局Shards:在
global-config/values.yaml中添加全局的Shards配置,仅保留非敏感字段(敏感的login、password将迁移至Secret):
global: shards: - name: "db1" url: "url1" - name: "db2" url: "url2" # 可选:统一定义Secret名称,方便后续引用 dbSecretName: "db-shards-secrets"
二、将敏感数据迁移至Secret
修改global-config/templates/secrets.yaml,创建存储敏感数据的Secret(使用stringData无需手动做Base64编码,Helm会自动处理):
apiVersion: v1 kind: Secret metadata: name: {{ .Values.global.dbSecretName }} type: Opaque stringData: # 按shard名称做key前缀,避免字段冲突 db1-login: "login1" db1-password: "password1" db2-login: "login2" db2-password: "password2"
三、修改业务模块的Deployment配置
更新some-module1、some-module2、some-module3的templates/deployment.yaml,改为读取全局Shards配置,并从Secret注入敏感数据:
{{- range $shard := .Values.global.shards }} env: # 非敏感URL直接从全局配置读取 - name: DB_URL_{{ $shard.name | upper }} value: {{ $shard.url }} # 敏感登录名从Secret获取 - name: DB_LOGIN_{{ $shard.name | upper }} valueFrom: secretKeyRef: name: {{ $.Values.global.dbSecretName }} key: {{ $shard.name }}-login # 敏感密码从Secret获取 - name: DB_PASSWORD_{{ $shard.name | upper }} valueFrom: secretKeyRef: name: {{ $.Values.global.dbSecretName }} key: {{ $shard.name }}-password {{- end }}
注:给环境变量加上Shard名称前缀(如
DB_URL_DB1),避免多个Shard的环境变量冲突,解决原配置中重复赋值的问题。
四、确保全局配置生效
如果使用Helm子Chart/依赖结构,需在业务模块的Chart.yaml中添加对global-config的依赖,或在父Chart的配置中包含所有模块,保证全局values能被业务模块读取。
内容的提问来源于stack exchange,提问作者AidarKhaibulov
相关产品推荐
相关产品推荐

