[英]Insert multiline json string into helm template for base64 encoding
我正在嘗試將多行 json 字符串插入到 helm 模板中,以進行 Kubernetes 機密所需的 base64 編碼。
目標:
b64enc
進行 base64 編碼 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 }}
您實際上不需要對掌舵圖中的秘密進行 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 中,它的行為將完全相同。
再次,從文檔(強調我的) ( 來源):
stringData
允許以字符串形式指定非二進制秘密數據。 它是作為只寫方便的方法提供的。 所有鍵和值在寫入時合並到data
字段中,覆蓋任何現有值。 從 API 讀取時從不輸出。
我的印象(和其他人似乎也遇到了它)是你必須妥協,要么是多行,要么是不把它放在一個文件中。 我認為問題在於您必須使用 yaml 指令( |-
)來獲取多行,這是模板本身的一部分,因此您無法以一種可以提供的方式從中獲取“輸出”進入b64enc
。
如果這是一個 ConfigMap,你就不需要輸入b64enc
所以它會很簡單:
myfile.json: |
{
"item1": {
"name": "{{ .Values.item1.name }}"
},
"item2": {
}
}
或者,如果您要在單線方法上妥協,那么可能是:
myfile.json: {{ tpl ("{ 'item1': { 'name': '{{ .Values.item1.name }}' }, 'item2': { } }") . | toJson | b64enc }}
如果它來自文件,那么您可以使用{{ tpl (.Files.Get "files/myfile.json") . | b64enc | quote }}
{{ tpl (.Files.Get "files/myfile.json") . | b64enc | quote }}
另一種選擇是將整個 json 放在值文件中
或者您可以在您的值文件中有一個myfile
條目,例如:
myfile:
item1:
name: "bob"
item2:
name: "fred"
然后將它與myfile.json: {{ .Values.myfile | toJson | b64enc }}
一起使用myfile.json: {{ .Values.myfile | toJson | b64enc }}
myfile.json: {{ .Values.myfile | toJson | b64enc }}
我找到了解決方案。 您可以在 json 文件上使用 tpl 函數來呈現模板。
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: {{ tpl(.Files.Get "myfile.json") . | b64enc }}
我的文件.json
{
"item1": {
"name": "{{ .Values.item1.name }}"
},
"item2": {
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.