首页 > 解决方案 > Helm 从 env 文件创建秘密

问题描述

Kubectl 提供了一种将环境变量文件转换为机密的好方法,使用:

$ kubectl create secret generic my-env-list --from-env-file=envfile

有没有办法在 Helm 中实现这一点?我尝试了以下代码段,但结果完全不同:

kind: Secret
metadata:
  name: my-env-list
data:
  {{ .Files.Get "envfile" | b64enc }}

标签: kuberneteskubernetes-helmkubernetes-secrets

解决方案


看起来 kubectl 只是做简单的事情,并且只在单个=字符上拆分,因此 Helm 的方式是复制该行为(helm 已经regexSplit满足了我们的目的):

apiVersion: v1
kind: Secret
data:
  {{ range .Files.Lines "envfile" }}
  {{   if . }}
  {{     $parts := regexSplit "=" . 2 }}
  {{     index $parts 0  }}: {{ index $parts 1 | b64enc }}
  {{   end }}
  {{ end }}

{{ if . }}是因为.Files.Lines返回了一个当然不符合模式的空字符串

请注意,kubectl 的版本接受从helm 不支持的环境envfile中查找的裸字,所以如果你的格式是这样的,这个特定的实现将会失败


推荐阅读