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
)
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.
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
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.