我有一些在 helm 安装中使用的环境变量,并且想使用 k8s 秘密来隐藏密码。
values.yaml
env:
USER_EMAIL: "[email protected]"
USER_PASSWORD: "p8ssword"
我想通过 kubernetes 秘密
mysecrets
添加密码,使用 创建
# file: mysecrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecrets
type: Opaque
data:
test_user_password: cGFzc3dvcmQ=
然后将其添加到
values.yaml
- name: TEST_USER_PASSWORD
valueFrom:
secretKeyRef:
name: mysecrets
key: test_user_password
然后我在部署中使用以下内容
env:
{{- range $key, $value := $.Values.env }}
- name: {{ $key }}
value: {{ $value | quote }}
{{- end }}
是否可以在
values.yaml
中混合环境变量的格式,即
env:
USER_EMAIL: "[email protected]"
- name: USER_PASSWORD
valueFrom:
secretKeyRef:
name: mysecrets
key: test_user_password
或者有没有办法以原始格式引用行中的秘密?
计划1:
最简单的实现方法之一
可以直接使用yaml文件注入的方式,将env部分原样放在这里,这样就可以按照需要的格式在values中写入kv形式的值和ref形式的值了。
如下:
values.yaml
env:
- name: "USER_EMAIL"
value: "[email protected]"
- name: "USER_PASSWORD"
valueFrom:
secretKeyRef:
name: mysecrets
key: test_user_password
部署.yaml
containers:
- name: {{ .Chart.Name }}
env:
{{ toYaml .Values.env | nindent xxx }}
{{- end }}
(ps: xxx --> 实际缩进)
计划2:
通过判断类型来区分场景。
如下:
values.yaml
env:
USER_EMAIL:
type: "kv"
value: "[email protected]"
USER_PASSWORD:
type: "secretRef"
name: mysecrets
key: p8ssword
USER_CONFIG:
type: "configmapRef"
name: myconfigmap
key: mycm
部署.yaml
containers:
- name: {{ .Chart.Name }}
env:
{{- range $k, $v := .Values.env }}
- name: {{ $k | quote }}
{{- if eq $v.type "kv" }}
value: {{ $v.value | quote }}
{{- else if eq $v.type "secretRef" }}
valueFrom:
secretKeyRef:
name: {{ $v.name | quote }}
key: {{ $v.key | quote }}
{{- else if eq $v.type "configmapRef" }}
valueFrom:
configMapKeyRef:
name: {{ $v.name | quote }}
key: {{ $v.key | quote }}
{{- end }}
{{- end }}