web-dev-qa-db-fra.com

kubernetes: modifier un secret en utilisant le cli?

Comment puis-je modifier les valeurs d'un secret kubernetes en utilisant le cli?

J'ai créé le secret avec kubernetes create secret generic, mais il ne semble pas y avoir de moyen de modifier un secret. Par exemple, pour lui ajouter une nouvelle valeur secrète ou pour y modifier une valeur secrète.

Je suppose que je peux aller "bas niveau" et écrire le fichier yaml et faire un kubectl edit mais j'espère qu'il existe un moyen plus simple.

(J'utilise kubernetes 1.2.x)

18
gabor

La manière la plus directe (et interactive) devrait être d'exécuter kubectl edit secret <my secret>. Courir kubectl get secrets si vous souhaitez voir la liste des secrets gérés par Kubernetes.

21
Timo Reimann

Comme je me suis retrouvé dans le besoin de modifier un secret, j'ai atterri ici.

Voici le moyen le plus pratique que j'ai trouvé pour éditer un secret (sur une ligne).

Cela explique kubectl edit secret <my secret> de Timo Reimann ci-dessus.

kubectl edit secret <my secret> va (dans mon cas) invoquer vi.

Maintenant, je déplace le curseur sur l'espace après les deux points du secret que je souhaite modifier.

Ensuite, j'appuie sur r et [enter] qui mettra la valeur encodée en base64 sur une ligne à part.

Maintenant j'entre :. ! base64 -D qui décodera la ligne courante.

Après avoir apporté mes modifications à la valeur, j'entre :. ! base64 qui encodera la valeur modifiée.

Appuyez sur k[shift]J rejoindra le nom secret et sa nouvelle valeur.

:wq écrit le nouveau fichier secret et quitte vi.

P.S. Si le secret a une valeur multiligne, activez les numéros de ligne (:set nu) et, après avoir modifié la valeur décodée, utilisez A,B ! base64 où A et B sont les numéros de ligne de la première et de la dernière ligne de la valeur.

P.P.S Je viens d'apprendre à la dure que base64 recevra le texte à encoder avec un retour à la ligne ajouté :( Si ce n'est pas un problème pour vos valeurs - très bien. Sinon, ma solution actuelle consiste à filtrer cela avec: .!Perl -pe chomp | base64

11
Skeeve

Si vous préférez une mise à jour non interactive, voici une façon de procéder:

kubectl get secret mysecret -o json | jq '.data["foo"]="YmFy"' | kubectl apply -f -

Notez que YmFy est une chaîne bar encodée en base64. Si vous souhaitez passer la valeur en argument, jq vous permet de le faire:

kubectl get secret mysecret -o json | jq --arg foo "$(echo bar | base64)" '.data["foo"]=$foo' | kubectl apply -f -

Je suis plus à l'aise d'utiliser jq mais yq devrait également faire le travail si vous préférez le format yaml.

9
vdimitrov