kubernetes - 如何不覆盖 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 }}
解决方案
您可以基于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 ...
。
推荐阅读
- sql - 红移无法识别的节点类型 407
- android - 在 EditText 视图中使用 BACKSPACE 或 SHIFT 按钮时应用程序关闭
- python - 为什么我的代码中出现字符串浮动错误?
- django - Django office365
- python-3.x - 在 scikit learn 管道之间传递参数
- python - Flask - 如何重用 URL 参数替换功能?
- c# - 如何从 sql 查询结果中解析字符串 json 并映射它
- javascript - Javascript 在 Chrome 中打开 Excel
- python - 在python3中使用flask上传多个文本文件
- python - 导入模块,因为它是更高级别