web-dev-qa-db-fra.com

Comment puis-je mettre à jour un secret sur Kubernetes quand il est généré à partir d'un fichier?

J'ai créé un secret en utilisant kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt.

Si je souhaite mettre à jour les valeurs, comment puis-je procéder?

59
Chris Stryczynski

Cela devrait fonctionner:

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

Vous pouvez supprimer et recréer immédiatement le secret:

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

J'ai mis ces commandes dans un script, au premier appel, vous recevez un avertissement concernant le secret (pas encore) existant, mais cela fonctionne.

39
P.J.Meisch

Vous pouvez également utiliser l'opérateur = ou |= de jq pour mettre à jour les secrets à la volée.

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 -

Même si elle n’est peut-être pas aussi élégante ni aussi simple que l’approche kubectl create secret generic --dry-run, techniquement, cette approche met réellement à jour les valeurs plutôt que de les supprimer/les recréer. Vous aurez également besoin des commandes jq et base64 (ou openssl enc -base64) disponibles. tr est un utilitaire Linux communément disponible pour le rognage des nouvelles lignes.

Voir ici pour plus de détails sur jq l'opérateur de mise à jour |=.

6
Devy