如何在掌舵图中创建模板?

How to create template in the helm chart?

我需要为秘密值创建模板。

这是秘密文件:

apiVersion: v1
kind: Secret
metadata:
  name: secret
type: Opaque
stringData:
  "user":  "user"
  "password":  "password"

这就是我在 _helpers.tpl

中创建的内容
{{/*
  User
*/}}
{{- define "@@chartName@@.user" -}}
{{- $secret := lookup "v1" "Secret" .Release.Namespace "secret" -}}
  {{- if $secret -}}
     {{- print $secret.stringData.user}}
  {{- else -}}
     {{- fail "The secret is absent" -}}
  {{- end -}}
{{- end -}}

但它不起作用,我得到错误:<$secret.stringData.user>: nil pointer evaluating interface {}.user

我在安装helm chart之前创建了secret,不知道这个错误是什么原因。感谢您的帮助!

如果 $secret 存在但不包含 stringData,您将收到该错误。

在 Helm 级别,您可以通过使用 default 函数强制它存在(“没有 stringData”和“没有 user" 大致相同的错误):

{{- $secret := lookup "v1" "Secret" .Release.Namespace "secret" | default dict -}}
{{- $stringData := $secret.stringData | default dict -}}
{{- $stringData.user | required "The secret is absent" -}}

在更高级别,如果可以读回 Secret,它可能只有 base64 编码的 data 字段(即使它是使用 stringData 创建的)。 Helm 在你的 pod spec 中提供了一个 b64dec function that could decode it. It'd be better to refer to the secret as an environment variable,或者直接将值传递给 Helm。

# in a Pod spec; without using Helm `lookup`
env:
  - name: USER
    valueFrom:
      secretKeyRef:
        name: secret
        key: user
# or passed directly via Helm
{{- $credentials := .Values.credentials | default dict -}}
{{- $credentials.user | required "missing user.credentials" -}}