を使用してシークレットを作成しました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
。
値を更新したい場合-どうすればよいですか?
回答:
これはうまくいくはずです:
kubectl create secret generic production-tls \
--from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml |
kubectl apply -f -
--save-config
する必要がありkubectl create secret
ます。
kubectl create secret tls my-domain-tls --namespace=default --key=./tls.key --cert=./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
これらのコマンドをスクリプトに入れました。最初の呼び出しで、(まだ)存在する秘密についての警告が表示されますが、これは機能します。
apply
することはもっと理にかなっています。
--namespace=kube-system
また、あなたはまた、使用することができる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
、更新作業|=
。
上記のDevyの回答に返信できなかったので、削除して再作成するとレコード内の余分な情報が失われる可能性がある所有権が保持されるため、これが好きです。変数が補間されていないのにホエーをすぐに理解できない新しい人々のためにこれを追加します。
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の 'patch'メソッドを使用しようとしましたが、これも機能しているようです。
kubectl \
patch \
secret \
production-tls \
-p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"
私のニーズを最もよく満たした答えをDevyに感謝します。
より具体的なケースでは、証明書を更新して古い証明書を削除する必要があるネームスペースを指定する必要がある場合があります。
**For deletion of the cert **
kubectl delete secret -n `namespace`
**For creation of new cert to specific namespace **
kubectl create secret {your-cert-name} --key /etc/certs/{name}.com.key --cert /etc/certs/{name}.com.crt -n {namespace} ```
私はこれを使いました、そしてそれは魅力のように働きました:
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
docker-server = https://index.docker.io/v1/docker場合)
詳細:https : //kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#create-a-secret-by-providing-credentials-on-the-command-line