我创建了一个secret.yaml文件,如下所示:
apiVersion: v1
kind: Secret
metadata:
name: my-secret
data:
truststore.jks: {{ (.Files.Glob "../trust.jks").AsSecrets | b64enc }}
我将其作为HELM中template.yaml文件的一部分进行调用。
.yaml
apiVersion: v1
kind: DeploymentConfig
spec:
...
template:
spec:
...
container:
- name: "my-container"
...
volumeMounts:
- name: secrets
mountPath: /mnt/secrets
readOnly: true
volumes:
- name: secrets
secret:
secretName: "my-secret"
当我运行helm install命令时,pod会成功创建,卷也会被挂载,但如果我使用cat命令检查/mnt/secrets中的truststore.jks
,则输出如下:
cat /mnt/secrets/truststore.jks
{}
我运行了试运行命令来检查生成的.yaml文件,秘密如下:
# Source: ag-saas/templates/tsSecret.yaml
apiVersion: v1
kind: Secret
metadata:
name: my-secret
data:
truststore.jks: e30=
如何将文件放入我的秘密?
这里有两件事:
.Files.Glob
用于检索多个文件,例如.Files.Glob "credentials/*.jks"
。对于单个文件,.File.Get
将直接检索其内容- 您只能访问图表目录中的文件;引用
.Files.Get "../trust.jks"
将不起作用 - CCD_ 6将文件列表呈现给CCD_ 7块的整个内容;您只需要直接获取文件内容
所以你的秘密应该看起来像
apiVersion: v1
kind: Secret
metadata:
name: my-secret
data:
truststore.jks: {{ .Files.Get "trust.jks" | b64enc }}
在我使用.Files.Get
的最后一行中,我没有尝试引用图表外的"../..."
路径,也没有将其呈现为...AsSecret
。
您还需要将密钥集文件移动或复制(而不是符号链接(到图表目录中才能工作。
(在当前的表单中,.Files.Glob
与图表目录之外的任何内容都不匹配,所以你会得到一个空的文件列表。然后将其呈现给.AsSecrets
会得到一个子空的JSON对象。你使用字符串{}
作为机密值,它会正确地进行base64编码,但这就是为什么{}
会在最后出现的原因。(