私は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でエンコードされた文字列があると想定しているようですが、取得できないようです。これの値を取得するにはどうすればよいですか?
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
この便利なコマンドを使用することをお勧めします。 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でエンコードされたシークレットが出力されます。
これはあなたが探しているかもしれない link です。
Kubernetesシークレットでは、シークレットをbase64エンコード形式で指定する必要があります。これは、Linuxディストリビューションの場合、base64バイナリを使用して作成できます。
例:
echo "hello" | base64
aGVsbG8K
秘密鍵を環境変数として渡すか、ボリュームとしてマウントすると、Kubernetesはbase64エンコーディングをデコードします。
より簡単にデコードするには、base64デコードを行う ksd のようなツールを使用できます
kubectl get secrets/db-user-pass -o yaml | ksd
まず、kubectlを使用してAPIサーバーにクエリを実行し、etcdからシークレットを取得します。
kubectl get secret db-user-pass -o yaml
これにより、base64でエンコードされたシークレットがyaml形式で提供されます。
Yamlファイルを取得したら、次を使用してそれらをデコードします。
「base64 --decode」
最終的なコマンドは次のようになります:echoコマンドの-n
フラグを忘れないでください
echo -n "jdddjdkkdkdmdl" | base64 --decode
Jq(jsonクエリ)がある場合、これは機能します。
kubectl get secret db-user-pass -o json | jq '.data | map_values(@base64d)'