我在 helm 安装中使用了一些环境变量,我想使用 k8s 密钥隐藏密码。
values.yaml
env:
USER_EMAIL: "test@test.com"
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: "test@test.com"
- name: USER_PASSWORD
valueFrom:
secretKeyRef:
name: mysecrets
key: test_user_password
或者有没有办法以原始格式引用行中的秘密?
答案 0 :(得分:1)
计划 1:
最简单的实现方法之一
可以直接使用yaml文件注入的方式,将env部分原样放在这里,这样就可以在需要的格式的值中写入kv表单值和ref表单值。
如下:
values.yaml
env:
- name: "USER_EMAIL"
value: "test@test.com"
- name: "USER_PASSWORD"
valueFrom:
secretKeyRef:
name: mysecrets
key: test_user_password
deployment.yaml
containers:
- name: {{ .Chart.Name }}
env:
{{ toYaml .Values.env | nindent xxx }}
{{- end }}
(ps: xxx --> 实际缩进)
计划 2:
通过判断类型来区分场景。
如下:
values.yaml
env:
USER_EMAIL:
type: "kv"
value: "test@test.com"
USER_PASSWORD:
type: "secretRef"
name: mysecrets
key: p8ssword
USER_CONFIG:
type: "configmapRef"
name: myconfigmap
key: mycm
deployment.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 }}