Bash
使用 yq 對 k8s 秘密值進行 base64 編碼
我有一個簡單的 secret.yaml 文件:
env: USERNAME: user PASSWORD: pass
我正在嘗試使用 yq / jq 對創建 k8s 機密的值進行編碼,所以我的最終結果應該是:
apiVersion: v1 kind: Secret metadata: name: my-service type: Opaque data: USERNAME: <base64 encoded> PASSWORD: <base64 encoded>
我試圖使用:
yq r secret.yaml ".env" -j | jq -r ' to_entries[] | "\(.value)" | @base64'"
這給了我 base64 編碼值,但我無法將編碼值插入到最終輸出中。
我試圖避免使用循環,但如果我找不到干淨的解決方案,我會使用它。
請協助。
jq
您要應用於數據的表達式是.env |= map_values(@base64) | { data: .env }
這會更新頂級
env
結構的所有值,以便它們是 base64 編碼的。env
然後它將密鑰“重命名”為data
.
yq
使用您似乎在問題中使用的特定實用程序,這是通過將 YAML 轉換為 JSON、應用於jq
生成的 JSON,然後將其轉換回 YAML 來完成的:$ yq -j r file.yml | jq '.env |= map_values(@base64) | { data: .env }' | yq -P r - data: PASSWORD: cGFzcw== USERNAME: dXNlcg==
使用
yq
來自https://kislyuk.github.io/yq/的實用程序(即,不是問題中使用的實用程序),使用$ yq -y '.env |= map_values(@base64) | { data: .env }' file.yml data: USERNAME: dXNlcg== PASSWORD: cGFzcw==
執行上述處理後,可以添加額外的靜態數據。