web-dev-qa-db-ja.com

ファイルから生成されたKubernetesのシークレットを更新するにはどうすればよいですか?

kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crtを使用してシークレットを作成しました。

値を更新する場合-どうすればよいですか?

59

これは動作するはずです:

kubectl create secret generic production-tls \
    --from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml | 
  kubectl apply -f -
148
Janos Lenart

シークレットを削除してすぐに再作成できます。

kubectl delete secret production-tls
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt

これらのコマンドをスクリプトに入れます。最初の呼び出しで、(まだ)存在しない秘密についての警告が表示されますが、これは機能します。

39
P.J.Meisch

または、jq=または|=演算子を使用して、その場で秘密を更新することもできます。

TLS_KEY=$(base64 < "./tls.key" | tr -d '\n')
TLS_CRT=$(base64 < "./tls.crt" | tr -d '\n')
kubectl get secrets production-tls -o json \
        | jq '.data["tls.key"] |= "$TLS_KEY"' \
        | jq '.data["tls.crt"] |= "$TLS_CRT"' \
        | kubectl apply -f -

kubectl create secret generic --dry-runアプローチほどエレガントでもシンプルでもないかもしれませんが、技術的には、このアプローチは値を削除/再作成するのではなく、真に更新します。また、jqおよびbase64(またはopenssl enc -base64)コマンドを使用できる必要があります。trは、末尾の改行をトリミングするための一般的に使用可能なLinuxユーティリティです。

jq更新演算子|=の詳細については、 here を参照してください。

6
Devy