如何从 Helm 模板中的 values.yaml 获取父元素的名称?

How do I get the name of a parent element from my values.yaml in a Helm template?

我的 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 来完成此任务,我也愿意这样做。

获取secret数据时,也可以通过key-val的形式获取

尝试用以下内容替换 _helpers.tpl

{{/*
Add environment variables
*/}}
{{- define "helpers.list-env-variables" }}
{{- range $key, $val := .Values.env.normal }}
- name: {{ $key }}
  value: {{ $val }}
{{- end }}
{{- range $k, $v := .Values.env.secret }}
{{- }}
{{- range $key, $val := $v }}
- name: {{ $key }}
  valueFrom:
    secretKeyRef:
      name: {{ $k }}
      key: {{ $val }}
{{- end }}
{{- end }}
{{- end }}