簡體   English   中英

帶有 bash gcloud 身份令牌、heredoc 和 printf 的 kubectl 補丁秘密

[英]kubectl patch secret with bash gcloud identity-token, heredoc and printf

我想創建一個簡單的 k8s cronjob 來保持 gcp 身份令牌的新鮮度。

一個我無法解決的相對簡單的問題

給定的

kubectl patch secret token-test --type json -p=<< END
[
   {
     "op": "replace",
     "path": "/data/token.jwt",
     "value": "$(gcloud auth print-identity-token | base64 )"
   }
]
END

我希望將其與kubectl patch secret token-test --type json -p=$(printf "'%s'" "$json")

我嘗試了很多變體,奇怪的是,如果我粘貼 printf 的 heredoc 插入的結果,它會起作用。 但是我所有的努力都失敗了(也在一行上嘗試了一個 json 文檔)

$ kubectl patch secret token-test --type json -p=$(printf "'%s'" "$json")
error: unable to parse "'[{": yaml: found unexpected end of stream

而這實際上有效:

printf "'%s'" "$json"|pbcopy 
kubectl patch secret sudo-token-test --type json -p '[{ "op": "replace","path": "/data/token.jwt","value": "ZX...Zwo="}]'
secret/token-test patched

當它失敗時,我無法理解有什么不同。 我知道 bash 在處理字符串時有點棘手,但我不確定這是 bash 問題還是 kubectl 中的問題。

$ json='[{ "op": "replace","path": "/data/token.jwt","value": "'"$(gcloud auth print-identity-token | base64 )"'"}]'
$ kubectl patch secret token-test --type json -p="$json"
secret/token-test patched

通過在heredoc中附加插入的字符串,這解決了。 仍然不知道為什么其他方法失敗了

這是一種稍微不同的方法,但是,怎么樣:

printf "foo" > test

kubectl create secret generic freddie \
--namespace=default \
--from-file=./test

kubectl get secret/freddie \
--namespace=default \
--output=jsonpath="{.data.test}" \
| base64 --decode
foo

X="$(printf "bar" | base64)"

kubectl patch secret/freddie \
--namespace=default \
--patch="{\"data\":{\"test\":\"${X}\"}}"

kubectl get secret/freddie \
--namespace=default \
--output=jsonpath="{.data.test}" \
| base64 --decode
bar

請注意,以這種方式使用您的用戶 ( gcloud auth print-identity-token ) 憑據不是最佳做法。 首選服務帳戶。 服務帳戶旨在用於機器(而不是人工)身份驗證它們可以更輕松地撤銷。

用戶憑據授予持有者用戶帳戶的所有權力(這可能是廣泛的)。

有一種可移植的替代方法,您可以在其中從服務帳戶密鑰創建 Kubernetes 機密:

 kubectl create secret generic your-key \\ --from-file=your-key.json=/path/to/your-key.json

有一個很酷的孩子,他們主要使用 GKE 方法,稱為Workload Identity

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM