我们是否可以仅在提供秘密时在舵图中定义env变量?



我们在helm hooks的yaml文件中有下面的env变量。

env:
- name:PASSWORD
value: {{ .Values.cmpassword | default "User@1234" | quote }}

我需要检查是否已经创建了一个特定的秘密,然后密码应该从秘密中获取值,如

{ if kubectl  get secret passwdsecret1 -o yaml | grep password }}
valueFrom:
secretKeyRef:
name: cmpasswdsecret
key:  password

{{else}}
value: {{ .Values.global.cmpassword | default "User@1234" | quote }}
{{end}}

是否可以检查是否创建了秘密。如果秘密是可用的,则从中获取值,或者从值文件中获取值。

Bitnami Helm图通常通过将相关的Secret名称作为配置选项来解决这个问题。我建议将此作为一种有用的通用方法,因为无论集群中实际有什么,您都将获得一致的部署。如果管理员说秘密应该存在,但它不存在,pod将启动失败;这可能是比退回到不安全的默认值更好的结果。

这个的values.yaml配置看起来像

# existingSecret, if set, has the name of a Secret to use for
# credentials.  This must contain a key `password`.
# existingSecret:
# cmpassword specifies the password.  Ignored if `existingSecret`
# is provided.
cmpassword: User@1234

然后在实际的模板代码中,如果指定了existingSecret,则可以生成secretKeyRef,如果没有指定则返回到cmpassword

env:
- name: PASSWORD
{{- with .Values.existingSecret }}
valueFrom:
secretKeyRef:
name: {{ . }}
key: password
{{- else }}
value: {{ .Values.cmpassword | required "either existingSecret or cmpassword is required" | quote }}
{{- end }}

最新更新