Cliを使用してkubernetes
シークレットの値を変更するにはどうすればよいですか?
kubernetes create secret generic
でシークレットを作成しましたが、シークレットを変更する方法がないようです。たとえば、新しいsecret-valueを追加したり、その中のsecret-valueを変更したりします。
私は「低レベル」に進み、yaml-fileを記述してkubectl edit
を実行できると思いますが、もっと簡単な方法があることを願っています。
(kubernetes 1.2.x
を使用しています)
最も直接的な(かつインタラクティブな)方法は、kubectl edit secret <my secret>
。実行kubectl get secrets
Kubernetesが管理するシークレットのリストを表示する場合。
秘密を変更する必要があることに気付いたので、ここに着きました。
(1行の)シークレットを編集するために見つけた最も便利な方法を次に示します。
これは、上記のTimo Reimannのkubectl edit secret <my secret>
について詳しく説明しています。
kubectl edit secret <my secret>
は(私の場合)viを呼び出します。
次に、編集したい秘密のコロンの後のスペースにカーソルを移動します。
次に、r
と[enter]
を押します。これらは、base64でエンコードされた値を独自の行に配置します。
次に、現在の行をデコードする:. ! base64 -D
と入力します。
値に変更を加えた後、変更された値をエンコードする:. ! base64
を入力します。
k
[shift]J
を押すと、シークレット名とその新しい値が再結合されます。
:wq
は新しいsecretfileを書き込み、viを終了します。
PSシークレットに複数行の値がある場合、行番号(:set nu
)をオンにし、デコードされた値を変更した後、A,B ! base64
を使用します(AとBは行)値の最初と最後の行の番号。
PPS私はちょうどbase64
が改行を追加してエンコードするテキストを受け取るという難しい方法を学びました:(これがあなたの値に問題がない場合-罰金。そうでなければ私の現在の解決策はフィルタリングすることですこれで:.!Perl -pe chomp | base64
非対話型の更新を希望する場合、これはそれを行う1つの方法です。
kubectl get secret mysecret -o json | jq '.data["foo"]="YmFy"' | kubectl apply -f -
YmFy
はbase64でエンコードされたbar
文字列であることに注意してください。値を引数として渡したい場合は、jq
を使用して次のことができます。
kubectl get secret mysecret -o json | jq --arg foo "$(echo bar | base64)" '.data["foo"]=$foo' | kubectl apply -f -
私はjq
を使用する方が快適ですが、yaml形式を好む場合はyq
も仕事をすべきです。