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 faire cela?
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 faire cela?
Réponses:
Cela devrait fonctionner:
kubectl create secret generic production-tls \
--from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml |
kubectl apply -f -
--save-config
au kubectl create secret
afin d'éviter un avertissement CLI.
kubectl create secret tls my-domain-tls --namespace=default --key=./tls.key --cert=./tls.crt --dry-run -o yaml | kubectl apply -f -
les certificats étaient en texte brut.
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 existant (pas encore), mais cela fonctionne.
apply
beaucoup plus de sens, merci!
--namespace=kube-system
Vous pouvez également utiliser l jq
' opérateur =
ou |=
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 -
Bien qu'elle ne soit pas aussi élégante ou simple que l' kubectl create secret generic --dry-run
approche, techniquement, cette approche met réellement à jour les valeurs plutôt que de les supprimer / recréer. Vous aurez également besoin jq
et base64
(ou openssl enc -base64
) des commandes disponibles,tr
est un utilitaire Linux couramment disponible pour couper les nouvelles lignes de fin.
Voir ici pour plus de détails sur l' jq
opérateur de mise à jour |=
.
Comme je n'ai pas pu répondre à la réponse de Devy ci-dessus, ce que j'aime parce que cela préservera la propriété où la suppression et la recréation risquent de perdre des informations supplémentaires dans le dossier. J'ajoute ceci pour les nouvelles personnes qui peuvent ne pas comprendre immédiatement que leurs variables ne sont pas interpolées.
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 -
Cela m'a conduit à essayer d'utiliser la méthode «patch» de kubectl, qui semble également fonctionner.
kubectl \
patch \
secret \
production-tls \
-p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"
Merci Devy pour la réponse qui a le mieux répondu à mes besoins.
Pour des cas plus spécifiques, vous devrez peut-être spécifier votre espace de noms que le certificat doit être renouvelé et supprimer l'ancien.
**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} ```
J'ai utilisé celui-ci et cela a fonctionné comme un charme:
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/ (pour DockerHub)
Pour plus de détails: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#create-a-secret-by-providing-credentials-on-the-command-line