Helm 指的是环境变量中的 kubernetes 秘密

时间:2021-07-28 14:23:46

标签: kubernetes-helm

我在 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

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

1 个答案:

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