【发布时间】:2021-12-06 11:42:59
【问题描述】:
我的 values.yaml 中有一个部分如下所示:
env:
normal:
ENV_VAR_1: value
ENV_VAR_2: otherValue
secret:
secret-location:
ENV_VAR_USERNAME: username
ENV_VAR_PASSWORD: password
different-secret:
ENV_CONN_STRING: my_conn_string
我有一个像这样的 _helpers.tpl 函数:
{{/*
Add environment variables
*/}}
{{- define "helpers.list-env-variables" }}
{{- range $key, $val := .Values.env.normal }}
- name: {{ $key }}
value: {{ $val }}
{{- end }}
{{- range $name := .Values.env.secret }}
{{- }}
{{- range $key, $val := $name }}
- name: {{ $key }}
valueFrom:
secretKeyRef:
name: {{ $name }}
key: {{ $val }}
{{- end }}
{{- end }}
{{- end }}
它像您期望的那样在 deployment.yaml 中调用:
env:
{{- include "helpers.list-env-variables" . | indent 12 }}
所以正常的环境变量被添加就好了,但秘密的却没有。它将 secretKeyRef.name: 值指定为map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password] 而不是secret-key-ref。
helm 调试输出:
...
env:
- name: ENV_VAR_1
value: value
- name: ENV_VAR_2
value: otherValue
- name: ENV_VAR_PASSWORD
valueFrom:
secretKeyRef:
name: map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password]
key: password
- name: ENV_VAR_USERNAME
valueFrom:
secretKeyRef:
name: map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password]
key: username
- name: ENV_CONN_STRING
valueFrom:
secretKeyRef:
name: map[ENV_CONN_STRING:my_conn_string]
key: my_conn_string
我已经将所有这些秘密加载到我的 K8s 集群中(它们在多个微服务之间共享,所以我不需要添加新的秘密,这是默认 Helm 模板似乎想要做的) -我只需要参考现有的秘密。
我的假设是我的函数中缺少一些东西来获取元素的值(例如“秘密位置”),我只是无法弄清楚它是什么。如果有一种不同的方式我可以构建我的 values.yaml 来实现这一点,我也会为此而努力。
【问题讨论】:
标签: kubernetes-helm