如何将.jks文件读取到Kubernetes secret中



我创建了一个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编码,但这就是为什么{}会在最后出现的原因。(

最新更新