Bash

使用 yq 對 k8s 秘密值進行 base64 編碼

  • November 20, 2020

我有一個簡單的 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==

執行上述處理後,可以添加額外的靜態數據。

引用自:https://unix.stackexchange.com/questions/612227