Ich habe ein Geheimnis mit erstellt kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
.
Wenn ich die Werte aktualisieren möchte - wie kann ich das tun?
Ich habe ein Geheimnis mit erstellt kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
.
Wenn ich die Werte aktualisieren möchte - wie kann ich das tun?
Antworten:
Das sollte funktionieren:
kubectl create secret generic production-tls \
--from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml |
kubectl apply -f -
--save-config
um die kubectl create secret
um eine CLI - Warnung zu vermeiden.
kubectl create secret tls my-domain-tls --namespace=default --key=./tls.key --cert=./tls.crt --dry-run -o yaml | kubectl apply -f -
Die Zertifikate waren im Klartext.
Sie können das Geheimnis löschen und sofort neu erstellen:
kubectl delete secret production-tls
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
Ich habe diese Befehle in ein Skript eingefügt. Beim ersten Aufruf erhalten Sie eine Warnung über das (noch nicht) vorhandene Geheimnis, aber das funktioniert.
apply
verstehe, die Verwendung macht viel mehr Sinn, danke!
--namespace=kube-system
Alternativ können Sie auch jq
's =
oder |=
Operator verwenden, um Geheimnisse im laufenden Betrieb zu aktualisieren.
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 -
Obwohl es kubectl create secret generic --dry-run
technisch gesehen möglicherweise nicht so elegant oder einfach ist wie der Ansatz, aktualisiert dieser Ansatz die Werte wirklich, anstatt sie zu löschen / neu zu erstellen. Sie benötigen auch jq
und base64
(oder openssl enc -base64
) Befehle zur Verfügung,tr
ein allgemein verfügbares Linux-Dienstprogramm zum Trimmen nachfolgender Zeilenumbrüche.
Sehen Sie hier , um weitere Informationen über jq
Update - Operator |=
.
Da ich nicht auf Devys Antwort oben antworten konnte, was mir gefällt, weil dadurch die Eigentümerschaft erhalten bleibt, wenn beim Löschen und Neuerstellen zusätzliche Informationen in der Aufzeichnung verloren gehen können. Ich füge dies für die neueren Leute hinzu, die möglicherweise nicht sofort verstehen, dass Molke ihre Variablen nicht interpoliert werden.
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 -
Dies führte mich zu dem Versuch, die 'Patch'-Methode von kubectl zu verwenden, die ebenfalls zu funktionieren scheint.
kubectl \
patch \
secret \
production-tls \
-p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"
Vielen Dank an Devy für die Antwort, die meinen Bedürfnissen am besten entspricht.
In genaueren Fällen müssen Sie möglicherweise Ihren Namespace angeben, in dem das Zertifikat erneuert werden muss, und den alten löschen.
**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} ```
Ich habe dieses benutzt und es hat wie ein Zauber funktioniert:
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/ (für DockerHub)
Für weitere Informationen: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#create-a-secret-by-providing-credentials-on-the-command-line