首页 > 解决方案 > Helm 从另一个 YAML 文件添加秘密

问题描述

我有一个 credential.yaml 作为:

key1: value1
key2: value2
...and so on

如何在 credential.yaml 中添加这些键值作为机密?我可以通过循环来添加在 Values 对象中定义的秘密,如下所示:

apiVersion: v1
kind: Secret
metadata:
  name: {{ include "ocp-auth.fullname" . }}
  labels:
    {{- include "ocp-auth.labels" . | nindent 4 }}
type: Opaque
data:
  {{- range $key,$value :=  .Values.secrets }}
  {{ $key }}: {{ $value | b64enc | quote }}
  {{- end }}  

但这不适用于 credential.yaml

标签: kubernetes-helmhelmfile

解决方案


1、如果使用文件名作为key,文件内容作为value,可以这样写:</p>

apiVersion: v1
kind: Secret
metadata:
  name: {{ include "ocp-auth.fullname" . }}
  labels:
    {{- include "ocp-auth.labels" . | nindent 4 }}
type: Opaque
data:
  {{ (.Files.Glob "data/credential.yaml").AsSecrets | indent 2 }}

data/credential.yamlyaml文件所在的路径在哪里。

结果:

apiVersion: v1
data:
  credential.yaml: a2V5MTogdmFsdWUxCmtleTI6IHZhbHVlMg==
kind: Secret
metadata:
  name: ocp-auth
type: Opaque

解码:

# echo "a2V5MTogdmFsdWUxCmtleTI6IHZhbHVlMg==" | base64 -D
key1: value1
key2: value2     

2、如果需要将文件中的每个key作为data中的一个item,可以这样写:

apiVersion: v1
kind: Secret
metadata:
  name: {{ include "ocp-auth.fullname" . }}
type: Opaque
data:
  {{- range .Files.Lines "data/credential.yaml" }}
  {{- range $i, $v := . | split ":" }}
  {{- if eq $i "_0" }}
  {{ $v }}:
  {{- else }}
    {{ $v | trim | b64enc }}
  {{- end }}
  {{- end }}
  {{- end }}

结果:

apiVersion: v1
data:
  key1: dmFsdWUx
  key2: dmFsdWUy
kind: Secret
metadata:
  name: ops-auth
type: Opaque

解码:

# echo "dmFsdWUx" | base64 -D
value1   
# echo "dmFsdWUy" | base64 -D
value2                                                                                            

这种写法限制较多,不推荐。首先,它只能处理单行数据。其次,它假设这一行中只有一个“:”。

掌舵文档


推荐阅读