web-dev-qa-db-ja.com

Kubernetes:CLIを使用してシークレットを変更しますか?

Cliを使用してkubernetesシークレットの値を変更するにはどうすればよいですか?

kubernetes create secret genericでシークレットを作成しましたが、シークレットを変更する方法がないようです。たとえば、新しいsecret-valueを追加したり、その中のsecret-valueを変更したりします。

私は「低レベル」に進み、yaml-fileを記述してkubectl editを実行できると思いますが、もっと簡単な方法があることを願っています。

kubernetes 1.2.xを使用しています)

18
gabor

最も直接的な(かつインタラクティブな)方法は、kubectl edit secret <my secret>。実行kubectl get secrets Kubernetesが管理するシークレットのリストを表示する場合。

21
Timo Reimann

秘密を変更する必要があることに気付いたので、ここに着きました。

(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

11
Skeeve

非対話型の更新を希望する場合、これはそれを行う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も仕事をすべきです。

9
vdimitrov