json - 将多行 json 字符串插入 helm 模板以进行 base64 编码
问题描述
我正在尝试将多行 json 字符串插入到 helm 模板中,以进行 Kubernetes 机密所需的 base64 编码。
目标:
- helm 值被注入到 json 字符串中
- 多行 json 字符串必须使用 base64 编码
b64enc
myfile1.json
不工作,但myfile2.json
工作。我不想把整个 json 文件放在values.yaml
.
apiVersion: v1
kind: Secret
metadata:
name: {{ template "mychart.fullname" . }}
labels:
app: {{ template "mychart.name" . }}
chart: {{ template "mychart.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
type: Opaque
data:
myfile.json: {{ |-
{
"item1": {
"name": "{{ .Values.item1.name }}"
},
"item2": {
}
} | b64enc }}
myfile2.json: {{ .Values.myfile2 | b64enc }}
解决方案
您实际上不需要对 helm 图表中的秘密进行 base64 编码。如果您使用stringData
字段而不是data
字段,Kubernetes 知道它需要在密钥部署时对数据进行 base64 编码。
来自文档(Source):
Secret 包含两个地图:
data
和stringData
。该data
字段用于存储使用 base64 编码的任意数据。提供该stringData
字段是为了方便,并允许您将秘密数据提供为未编码的字符串。
stringData
因此,我们可以使用而不是重写您的秘密,data
并将多行 json 字符串保留在模板中,如下所示:
apiVersion: "v1"
kind: "Secret"
metadata:
name: {{ template "mychart.fullname" . }}
labels:
app: {{ template "mychart.name" . }}
chart: {{ template "mychart.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
type: "Opaque"
stringData:
myfile.json: |-
{
"item1": {
"name": "{{ .Values.item1.name }}"
},
"item2": {
}
}
myfile2.json: {{ .Values.myfile2 }}
请注意,这并不意味着您突然需要担心有未编码的秘密。stringData
最终将被 base64 编码并转换data
为安装时的格式,因此一旦加载到 Kubernetes 中,它的行为将完全相同。
同样,来自文档(强调我的)(Source):
stringData
允许以字符串形式指定非二进制秘密数据。它是作为只写便利方法提供的。所有键和值在写入时合并到data
字段中,覆盖任何现有值。从 API 读取时从不输出。
推荐阅读
- javascript - Action Creator 在 Redux 中火力不同,如何处理?
- r - tableGrob:使用 annotation_custom 调整在 ggplot 上绘制的表格的大小(更改字体大小)
- c# - 检测对话何时结束,以便我可以删除存储的对话状态数据
- mysql - 我应该如何在 mysql 中批量查询只追加的表?
- excel - VBA 字符串函数
- xcode - Nativescript 在设备 IOS 上运行 - dyld 库未加载 @rpath/Nativescript.framework
- scala - 如何验证字节数组作为 ipv6 地址?
- mongodb - MongoDB对大对象集合的挂起计数查询
- erlang - 使用 ejabberd 进行多光束处理
- angular - 即使对象已满,对象属性也会返回未定义。打字稿