首页 > 解决方案 > 如何不覆盖 Helm 模板中随机生成的秘密

问题描述

我想在 Helm 模板中生成密码,使用该randAlphaNum功能很容易做到这一点。但是,当版本升级时,密码将被更改。有没有办法检查之前是否生成了密码,然后使用现有值?像这样的东西:

apiVersion: v1
kind: Secret
metadata:
  name: db-details
data:
  {{ if .Secrets.db-details.db-password }}
  db-password:  {{ .Secrets.db-details.db-password | b64enc }}
  {{ else }}
  db-password: {{ randAlphaNum 20 | b64enc }}
  {{ end }}

标签: kubernetespasswordskubernetes-helm

解决方案


您可以基于shaunc的想法使用查找功能来修复原始海报的代码,如下所示:

apiVersion: v1
kind: Secret
metadata:
  name: db-details
data:
  {{- if .Release.IsInstall }}
  db-password: {{ randAlphaNum 20 | b64enc }}
  {{ else }}
  # `index` function is necessary because the property name contains a dash.
  # Otherwise (...).data.db_password would have worked too.
  db-password:  {{ index (lookup "v1" "Secret" .Release.Namespace "db-details").data "db-password" }}
  {{ end }}

Secret在它尚不存在时创建将不起作用,因为 Helm 将删除在升级期间不再定义的对象。

使用注解将对象保留在周围有一个缺点,即当您使用 删除释放时它不会被删除helm delete ...


推荐阅读