【问题标题】:How do I get the name of a parent element from my values.yaml in a Helm template?如何从 Helm 模板中的 values.yaml 获取父元素的名称?
【发布时间】: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


    【解决方案1】:

    获取秘密数据时,也可以通过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 }}
    

    【讨论】:

    • 太棒了!这正是我所需要的。完全隔开,我没有从那个范围外抓住钥匙。
    猜你喜欢
    • 1970-01-01
    • 2022-08-03
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多