Mik*_*ski 5 passwords kubernetes 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 }}
Run Code Online (Sandbox Code Playgroud)
use*_*157 14
我对Jan Dubois和shaunc的答案感到很困惑。所以我构建了一个组合解决方案。
Jan 的答案的缺点:当它与 一起使用时,它会导致错误--dry-run。
shaunc 答案的缺点:它不起作用,因为资源将在 上被删除helm upgrade。
这是我的代码:
# store the secret-name as var
# in my case, the name was very long and containing a lot of fields
# so it helps me a lot
{{- $secret_name := "your-secret-name" -}}
apiVersion: v1
kind: Secret
metadata:
name: {{ $secret_name }}
data:
# try to get the old secret
# keep in mind, that a dry-run only returns an empty map
{{- $old_sec := lookup "v1" "Secret" .Release.Namespace $secret_name }}
# check, if a secret is already set
{{- if or (not $old_sec) (not $old_sec.data) }}
# if not set, then generate a new password
db-password: {{ randAlphaNum 20 | b64enc }}
{{ else }}
# if set, then use the old value
db-password: {{ index $old_sec.data "db-password" }}
{{ end }}
Run Code Online (Sandbox Code Playgroud)
小智 10
您可以根据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 }}
Run Code Online (Sandbox Code Playgroud)
仅Secret在它尚不存在时创建它是行不通的,因为 Helm 将删除在升级过程中不再定义的对象。
使用注释来保留对象的缺点是,当您使用 删除发布时,它不会被删除helm delete ...。
这仍然是 Helm 最大的问题之一。据我所知,目前还没有好的解决方案(参见https://github.com/helm/charts/issues/5167)。
一种肮脏的解决方法是创建 secret 作为 pre-install hook。这种方法的明显缺点是在 helm delete 时不会删除 secret。
apiVersion: v1
kind: Secret
metadata:
name: {{ template "helm-random-secret.fullname" . }}
annotations:
"helm.sh/hook": "pre-install"
"helm.sh/hook-delete-policy": "before-hook-creation"
labels:
app: {{ template "helm-random-secret.name" . }}
chart: {{ template "helm-random-secret.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
data:
some-password: {{ default (randAlphaNum 10) .Values.somePassword | b64enc | quote }}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |