web-dev-qa-db-ja.com

Kubernetesシークレットのデコード

私はKubernetes/Dockerのセットアップを継承しましたが、DBパスワードに関連するものを変更して、誤ってポッドをクラッシュさせました。

これをトラブルシューティングしようとしています。

私はKubernetesやDockerの経験があまりないので、まだ方法を学んでいます。

値は、Opaqueタイプの秘密であると私が信じているdb-user-passクレデンシャルの中に含まれています。

私はそれを説明しています:

kubectl describe secrets/db-user-pass
Name:         db-user-pass
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password:  16 bytes
username:  13 bytes

しかし、私はこの秘密からデータを取得する方法を知りません。 Kubernetesサイトの例では、base64でエンコードされた文字列があると想定しているようですが、取得できないようです。これの値を取得するにはどうすればよいですか?

9
Cecil Rodriguez

kubectl get secrets/db-user-pass -oyamlまたは-ojsonを使用できます。base64でエンコードされたusernameおよびpasswordが表示されます。次に、値をコピーして、echo <ENCODED_VALUE> | base64 -Dのようなものでデコードできます。

このためのよりコンパクトなワンライナー:

$ kubectl get secrets/db-user-pass --template={{.data.password}} | base64 -D

同様にユーザー名:

$ kubectl get secrets/db-user-pass --template={{.data.username}} | base64 -D
11

この便利なコマンドを使用することをお勧めします。 go-templates の能力を利用します。すべての値を反復処理してデコードし、キーとともに出力します。また、設定されていない値も処理します。

kubectl get secret name-of-secret -o go-template='
{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'

## In your case it would output
# password: decoded_password
# username: doceded_username

Go-templatesが気に入らない場合は、さまざまな出力形式を使用できます。 yamlまたはjsonですが、base64でエンコードされたシークレットが出力されます。

6

これはあなたが探しているかもしれない link です。

Kubernetesシークレットでは、シークレットをbase64エンコード形式で指定する必要があります。これは、Linuxディストリビューションの場合、base64バイナリを使用して作成できます。

例:

echo "hello" | base64
aGVsbG8K

秘密鍵を環境変数として渡すか、ボリュームとしてマウントすると、Kubernetesはbase64エンコーディングをデコードします。

2
Malathi

より簡単にデコードするには、base64デコードを行う ksd のようなツールを使用できます

kubectl get secrets/db-user-pass -o yaml | ksd
1
csanchez

まず、kubectlを使用してAPIサーバーにクエリを実行し、etcdからシークレットを取得します。

kubectl get secret db-user-pass -o yaml 

これにより、base64でエンコードされたシークレットがyaml形式で提供されます。

Yamlファイルを取得したら、次を使用してそれらをデコードします。

「base64 --decode」

最終的なコマンドは次のようになります:echoコマンドの-nフラグを忘れないでください

echo -n "jdddjdkkdkdmdl" | base64 --decode

1
Vaibhav Jain

Jq(jsonクエリ)がある場合、これは機能します。

kubectl get secret db-user-pass -o json | jq '.data | map_values(@base64d)'
0
Charles Thayer