Helm 从 env 文件创建秘密
Helm create secret from env file
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 }}
看起来 kubectl 只是做简单的事情而且只做 splits on a single =
character 所以 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 的版本接受 barewords looked up from the environment,而 helm 不支持这样做,因此如果您的 envfile
格式如此,此特定实现将失败
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 }}
看起来 kubectl 只是做简单的事情而且只做 splits on a single =
character 所以 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 的版本接受 barewords looked up from the environment,而 helm 不支持这样做,因此如果您的 envfile
格式如此,此特定实现将失败