kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
を使用してシークレットを作成しました。
値を更新する場合-どうすればよいですか?
これは動作するはずです:
kubectl create secret generic production-tls \
--from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml |
kubectl apply -f -
シークレットを削除してすぐに再作成できます。
kubectl delete secret production-tls
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
これらのコマンドをスクリプトに入れます。最初の呼び出しで、(まだ)存在しない秘密についての警告が表示されますが、これは機能します。
または、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 を参照してください。