Kubernetesでは、Kubernetesシークレットを使用して、パスワード、OAuthトークン、sshキーなどの機密情報を保存および管理できます。 Kubernetesでは、シークレットをKubernetesオブジェクトとして定義できます。ポッドやDockerイメージよりもKubernetesシークレットにクレデンシャルを保存する方が安全です。
Kubernetesでシークレットを生成する方法は複数あります:
- テキストファイルからの作成
- ymlファイルからの作成
シークレットが利用可能になると、次の方法で使用できます。
- 環境変数
- ボリューム
- imagePullSecretsフィールドの使用
Kubernetes Secretsの詳細については、ここをクリックしてください。
この記事では、.ymlファイルを使用してシークレットを作成し、ポッド内で環境変数としてアクセスします。
前提条件
- 少なくとも1つのワーカーノードを持つKubernetesクラスタ。
Kubernetesクラスタの作成方法を学びたい場合は、ここをクリックしてください。このガイドは、AWS Ubuntu18l04EC2インスタンスで1つのマスターと2つのノードを持つKubernetesクラスターを作成するのに役立ちます。
何をするか
- 秘密を作成する
シークレットを作成
Kubernetesで新しいシークレットを作成するには、まずbase64エンコード方式を使用して以下に示すように暗号化します。
ここ、
username =rahul and password=howtoforge123。
echo -n "rahul" | base64
echo -n "howtoforge123" | base64
上のスクリーンショットでは、クレデンシャルが暗号化されていることがわかります。
次のようにシークレット定義ファイルを作成します。このファイルは、上記の手順で生成された資格情報のbase64値を保持します。
vim my-secret.yml
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: cmFodWw= password: aG93dG9mb3JnZTEyMw==
では、これらの秘密とアクセスが可能なポッドを作成しましょう。
次のようにポッド定義を含む新しいファイルを作成します。
vim my-pod.yaml
apiVersion: v1 kind: Pod metadata: name: secrets-in-pod spec: containers: - name: my-container image: redis env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password restartPolicy: Never
次のコマンドを使用してシークレットを作成しましょう。
kubectl create -f my-secret.yml
kubectl get secret | grep mysecret
次に、次のポッド定義を使用してポッドを作成し、以前に作成したシークレットにアクセスします。
kubectl create -f my-pod.yml
kubectlgetポッド| grep secrets-in-pod
次のコマンドを使用してポッドにログインします。
kubectl get pods | grep secrets-in-pod
kubectl exec -it secrets-in-pod / bin / bash
ポッドにログインすると、次のコマンドを使用して環境変数としてシークレットにアクセスできます。
エコー$SECRET_USERNAME
エコー$SECRET_PASSWORD
上のスクリーンショットでは、シークレットが環境変数として利用可能であることがわかります。
シークレットオブジェクトの詳細を表示するには、次のコマンドを実行します。
kubectl get secret | grep mysecret
kubectl get secret mysecret -o yaml
これらのシークレットは、次のコマンドを使用してコマンドラインからデコードすることもできます。
kubectl get secrets / mysecret --template={{。data.username}}| base64 -d
kubectl get secrets / mysecret --template={{。data.password}}| base64 -d
上のスクリーンショットでは、クレデンシャルがシークレットから抽出され、base64を使用してコマンドラインで復号化されていることがわかります。
結論
この記事では、.ymlファイルからKubernetesにシークレットを作成して保存する手順を説明しました。ポッド内のこれらのシークレットに環境変数としてアクセスしようとしました。また、コマンドラインでシークレットを復号化するコマンドも確認しました。