【问题标题】:Read secrets from file in Helm从 Helm 中的文件中读取秘密
【发布时间】:2018-05-12 05:54:19
【问题描述】:

我创建了一些秘密,我正在尝试以这种方式导入文件:

apiVersion: v1
kind: Secret
metadata:
  name: {{ template "amq.broker.fullname" . }}-tls
  labels:
    app: {{ template "amq.name" . }}
    chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
    component: "{{ .Values.broker.name }}"
    release: "{{ .Release.Name }}"
    heritage: "{{ .Release.Service }}"
type: Opaque
data:
{{ (.Files.Glob "secrets/broker.ks").AsSecrets | indent 2 }}

该文件位于secrets 目录下。当我运行安装时,broker.ks 秘密不存在。但是,秘密位于secrets 文件夹下。有什么想法吗?

这里是目录结构

├── Chart.yaml
├── README.md
├── secrets
│   ├── broker.ks
│   ├── broker_cert
│   ├── client.ks
│   └── client.ts
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
└── values.yaml

【问题讨论】:

  • 当您尝试helm upgrade 时,错误消息究竟是什么?图表的目录树是什么样的?
  • 升级过程中没有错误。
  • {{ .Files.Get "secrets/broker.ks" | b64enc | indent 2 }} 有效吗?或者你需要一个 glob 模式来定位更多的秘密文件?
  • 对不起。误读了秘密地图。您希望整个内容作为键/值对。忘记我之前的评论。
  • glob .asSecrets 机制是否不会为每个匹配模式的文件创建一个密钥,该密钥的值是文件的内容?在这种情况下,您真的可以尝试broker.ks: {{ .Files.Get "secrets/broker.ks" | b64enc }} - 无论secrets/broker.ks 的内容是什么,都会得到相同的结果。

标签: kubernetes kubernetes-helm


【解决方案1】:

根据docs,解决方案如下:

{{- $root := . -}}
{{- range $path, $bytes := .Files.Glob "secrets/broker.ks" }}
{{ base $path }}: '{{ $root.Files.Get $path | b64enc }}'
{{- end }}

您也可以使用.Files.Glob "secrets/*.ks"拉取文件夹中特定类型的所有文件

还要确保该文件夹尚未添加到.helmignore,否则将无法访问这些文件。

【讨论】:

  • 下面的配置对我有用,apiVersion: v1 kind: Secret metadata: name: {{ .Chart.Name }}-volume-sec labels: app: {{ .Chart.Name }} chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}" release: "{{ .Release.Name }}" heritage: "{{ .Release.Service }}" type: Opaque data: {{- $path := printf "namespaces/%s/configs/*" .Values.namespace }} {{ (.Files.Glob $path).AsSecrets | indent 2 }} 这也允许我根据环境指定文件夹。
  • 值得注意的是,文件路径是相对于图表存储库的,而不是你“包含它”。
猜你喜欢
  • 2021-12-04
  • 1970-01-01
  • 2021-11-16
  • 2019-12-26
  • 2019-06-04
  • 2021-08-03
  • 2020-07-22
  • 2020-01-03
  • 2023-03-28
相关资源
最近更新 更多