現在表示しているのは、次のバージョン向けのドキュメントです。Kubernetesバージョン: v1.32
Kubernetes v1.32 のドキュメントは積極的にメンテナンスされていません。現在表示されているバージョンはスナップショットです。最新のドキュメントはこちらです: 最新バージョン
kubectlを使用してSecretを管理する
始める前に
Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:
Secretを作成する
SecretはデータベースにアクセスするためにPodが必要とするユーザー資格情報を含めることができます。 たとえば、データベース接続文字列はユーザー名とパスワードで構成されます。 ユーザー名はローカルマシンの./username.txtに、パスワードは./password.txtに保存します。
echo -n 'admin' > ./username.txt echo -n '1f2d1e2e67df' > ./password.txt 上記の2つのコマンドの-nフラグは、生成されたファイルにテキスト末尾の余分な改行文字が含まれないようにします。 kubectlがファイルを読み取り、内容をbase64文字列にエンコードすると、余分な改行文字もエンコードされるため、これは重要です。
kubectl create secretコマンドはこれらのファイルをSecretにパッケージ化し、APIサーバー上にオブジェクトを作成します。
kubectl create secret generic db-user-pass \ --from-file=./username.txt \ --from-file=./password.txt 出力は次のようになります:
secret/db-user-pass created ファイル名がデフォルトのキー名になります。オプションで--from-file=[key=]sourceを使用してキー名を設定できます。たとえば:
kubectl create secret generic db-user-pass \ --from-file=username=./username.txt \ --from-file=password=./password.txt --from-fileに指定したファイルに含まれるパスワードの特殊文字をエスケープする必要はありません。
また、--from-literal=<key>=<value>タグを使用してSecretデータを提供することもできます。 このタグは、複数のキーと値のペアを提供するために複数回指定することができます。 $、\、*、=、!などの特殊文字はシェルによって解釈されるため、エスケープを必要とすることに注意してください。 ほとんどのシェルでは、パスワードをエスケープする最も簡単な方法は、シングルクォート(')で囲むことです。 たとえば、実際のパスワードがS!B\*d$zDsb=の場合、次のようにコマンドを実行します:
kubectl create secret generic db-user-pass \ --from-literal=username=admin \ --from-literal=password='S!B\*d$zDsb=' Secretを検証する
Secretが作成されたことを確認できます:
kubectl get secrets 出力は次のようになります:
NAME TYPE DATA AGE db-user-pass Opaque 2 51s Secretの説明を参照できます:
kubectl describe secrets/db-user-pass 出力は次のようになります:
Name: db-user-pass Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== password: 12 bytes username: 5 bytes kubectl getとkubectl describeコマンドはデフォルトではSecretの内容を表示しません。 これは、Secretが不用意に他人にさらされたり、ターミナルログに保存されたりしないようにするためです。
Secretをデコードする
先ほど作成したSecretの内容を見るには、以下のコマンドを実行します:
kubectl get secret db-user-pass -o jsonpath='{.data}' 出力は次のようになります:
{"password":"MWYyZDFlMmU2N2Rm","username":"YWRtaW4="} passwordのデータをデコードします:
echo 'MWYyZDFlMmU2N2Rm' | base64 --decode 出力は次のようになります:
1f2d1e2e67df クリーンアップ
作成したSecretを削除するには次のコマンドを実行します:
kubectl delete secret db-user-pass