Ho creato un segreto usando kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
.
Se desidero aggiornare i valori, come posso farlo?
Ho creato un segreto usando kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
.
Se desidero aggiornare i valori, come posso farlo?
Risposte:
Questo dovrebbe funzionare:
kubectl create secret generic production-tls \
--from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml |
kubectl apply -f -
--save-config
a kubectl create secret
per evitare un avviso della CLI.
kubectl create secret tls my-domain-tls --namespace=default --key=./tls.key --cert=./tls.crt --dry-run -o yaml | kubectl apply -f -
i certificati erano in testo normale.
Puoi eliminare e ricreare immediatamente il segreto:
kubectl delete secret production-tls
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
Ho inserito questi comandi in uno script, alla prima chiamata ricevi un avviso sul segreto (non ancora) esistente, ma funziona.
apply
ha molto più senso, grazie!
--namespace=kube-system
In alternativa, puoi anche utilizzare jq
l' operatore =
o |=
per aggiornare i segreti al volo.
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 -
Anche se potrebbe non essere così elegante o semplice come l' kubectl create secret generic --dry-run
approccio, tecnicamente, questo approccio sta veramente aggiornando i valori piuttosto che eliminarli / ricrearli. Avrai anche bisogno dei comandi jq
e base64
(o openssl enc -base64
) disponibili, tr
è un'utilità Linux comunemente disponibile per tagliare le nuove righe finali.
Vedi qui per maggiori dettagli sull'operatore di jq
aggiornamento |=
.
Poiché non sono stato in grado di rispondere alla risposta di Devy sopra, il che mi piace perché preserverà la proprietà in cui l'eliminazione e la ricreazione hanno il potenziale per perdere qualsiasi informazione extra nel record. Aggiungo questo per le persone più recenti che potrebbero non capire immediatamente il siero di latte le loro variabili non vengono interpolate.
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 -
Questo mi ha portato a tentare di utilizzare il metodo "patch" di kubectl, che sembra funzionare.
kubectl \
patch \
secret \
production-tls \
-p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"
Grazie Devy per la risposta che meglio ha soddisfatto le mie esigenze.
Per casi più specifici potresti dover specificare il tuo spazio dei nomi che il certificato deve essere rinnovato ed eliminare quello vecchio.
**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} ```
Ho usato questo e ha funzionato a meraviglia:
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/ (per DockerHub)
Per maggiori dettagli: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#create-a-secret-by-providing-credentials-on-the-command-line