Helm 在环境变量中引用 kubernetes secrets

Helm referring to kubernetes secrets in enviroment variables

我有一些在 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

或者有没有办法在原始格式中引用行中的秘密?

方案一:

最简单的实现方式之一

可以直接使用yaml文件注入的方式,把env部分原样放在这里,这样就可以把kv形式的值和ref形式的值按照要求的格式写在values中。

如下:

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 --> 实际缩进)

方案二:

通过判断类型来区分场景

如下:

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 }}