シークレットを使用したアプリケーションの構成

KubernetesKubernetesBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、パスワードや API キー、その他の機密データなどの機密情報を安全に管理するために、Kubernetes Secrets をどのように使用するかを学びます。秘密を作成し、アプリケーションで使用し、アプリケーションが適切に構成されていることを確認します。各ステップは前のステップをベースに構築されているため、注意深く従ってください。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") subgraph Lab Skills kubernetes/initialization -.-> lab-8448{{"シークレットを使用したアプリケーションの構成"}} kubernetes/get -.-> lab-8448{{"シークレットを使用したアプリケーションの構成"}} kubernetes/create -.-> lab-8448{{"シークレットを使用したアプリケーションの構成"}} kubernetes/apply -.-> lab-8448{{"シークレットを使用したアプリケーションの構成"}} kubernetes/describe -.-> lab-8448{{"シークレットを使用したアプリケーションの構成"}} kubernetes/exec -.-> lab-8448{{"シークレットを使用したアプリケーションの構成"}} end

Minikube クラスタを起動する

リソースを作成する前に、稼働している Kubernetes クラスタが必要です。Minikube は、ローカル マシン上で動作する軽量の Kubernetes 環境です。

  1. 作業ディレクトリに移動する:

    ターミナルを開き、デフォルトのプロジェクト フォルダに移動します。

    cd /home/labex/project
  2. Minikube を起動する:

    Minikube を起動して Kubernetes クラスタを初期化します。

    minikube start
    • このコマンドは、ローカル マシン上に単一ノードの Kubernetes クラスタをセットアップします。
    • Minikube は、システムの性能に応じて数分かかる場合があります。
  3. Minikube が稼働していることを確認する:

    Minikube クラスタの状態を確認します。

    minikube status
    • kubeletapiserver などのコンポーネントが Running と表示されていることを確認します。
    • クラスタが稼働していない場合は、minikube start を再度実行します。

Minikube の起動に問題がある場合は、必要に応じて minikube delete を使用して環境をリセットします。

シークレットを作成する

このステップでは、データベースのパスワードを含む Kubernetes シークレットを作成します。

次の内容で my-secret.yaml という名前のファイルを作成します。

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  password: dXNlcm5hbWU6cGFzc3dvcmQ=

このファイルでは、シークレットの名前 (my-secret)、含まれるデータの種類 (Opaque)、および Base64 エンコード形式の実際のデータを指定しています。

次のコマンドを実行して、シークレットをクラスタに適用します。

kubectl apply -f my-secret.yaml

次のコマンドを実行して、シークレットが作成されたことを確認します。

kubectl get secrets

my-secret シークレットが表示されるはずです。

Kubernetes Secret creation example

アプリケーションでシークレットを使用する

このステップでは、アプリケーションを変更して、my-secret シークレットを使用してデータベースのパスワードを取得するようにします。

次の内容で my-app.yaml という名前のファイルを作成します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: nginx:latest
          env:
            - name: DATABASE_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: my-secret
                  key: password

このファイルでは、デプロイメントの名前 (my-app)、使用するイメージ (my-image)、および設定する環境変数 (DATABASE_PASSWORD) を指定しています。また、secretKeyRef を使用して、my-secret シークレットから password キーを取得しています。

次のコマンドを実行して、デプロイメントをクラスタに適用します。

kubectl apply -f my-app.yaml

次のコマンドを実行して、デプロイメントが作成されたことを確認します。

kubectl get deployments

my-app デプロイメントが表示されるはずです。

Deployment verification output

設定を確認する

このステップでは、my-secret シークレットからのデータベース パスワードでアプリケーションが適切に構成されていることを確認します。

次のコマンドを実行して、アプリケーションを実行しているポッドの名前を見つけます。

kubectl get pods -l app=my-app

アプリケーションを実行している単一のポッドが表示されるはずです。ポッドの名前をメモしておきます。

次に、アプリケーションを実行しているコンテナ内でシェル セッションを開くには、次のコマンドを実行します。

kubectl exec -it pod-name -- /bin/sh

<pod-name> を先ほどメモしたポッドの名前に置き換えます。

シェル セッションに入ったら、次のコマンドを実行して DATABASE_PASSWORD 環境変数の値を表示します。

echo $DATABASE_PASSWORD

my-secret シークレットから取得したデータベース パスワードが表示されるはずです。

Database password verification result

ポッド内でシークレットをボリュームとしてマウントする

これでシークレットを作成したので、ポッド内でボリュームとしてマウントすることができます。マウントされたボリュームからシークレット値を読み取り、コンソールに出力する単純なポッドを作成します。

次の内容で pod.yaml という名前のファイルを作成します。

apiVersion: v1
kind: Pod
metadata:
  name: secret-pod
spec:
  containers:
    - name: secret-container
      image: nginx
      volumeMounts:
        - name: secret-volume
          mountPath: /etc/secret-volume
  volumes:
    - name: secret-volume
      secret:
        secretName: my-secret

ポッドの設定を適用します。

kubectl apply -f pod.yaml

ポッド内でボリュームとしてのシークレットを確認する

このステップでは、my-secret シークレットからのデータベース パスワードでアプリケーションが適切に構成されていることを確認します。

まず、アプリケーションを実行しているコンテナ内でシェル セッションを開くには、次のコマンドを実行します。

kubectl exec -it secret-pod -- sh

シェル セッションに入ったら、次のコマンドを実行して値を表示します。

cat /etc/secret-volume/password

出力はシークレットの値でなければなりません。

Secret verification command output

まとめ

この実験では、Kubernetes シークレットを使用して機密情報を保管する方法と、ポッドでそれを使用する方法を学びました。シークレットは機密情報を管理するための安全な方法を提供し、平文でシークレットを公開することを避けるためにできる限り使用する必要があります。