Secrets を使用したアプリケーションの設定

KubernetesBeginner
オンラインで実践に進む

はじめに

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

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 を使用して環境をリセットしてください。

Secret の作成

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

/home/labex/project ディレクトリに、以下の内容で my-secret.yaml という名前のファイルを作成します。

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

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

次のコマンドを実行して、Secret をクラスタに適用します。

kubectl apply -f my-secret.yaml

次のコマンドを実行して、Secret が作成されたことを確認します。

kubectl get secrets

my-secret Secret がリストに表示されるはずです。

アプリケーションでの Secret の使用

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

/home/labex/project ディレクトリに、以下の内容で 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

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

次のコマンドを実行して、Deployment をクラスタに適用します。

kubectl apply -f my-app.yaml

次のコマンドを実行して、Deployment が作成されたことを確認します。

kubectl get deployments

my-app Deployment がリストに表示されるはずです。

設定の検証

このステップでは、アプリケーションが my-secret Secret からのデータベースパスワードで正しく設定されていることを検証します。

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

kubectl get pods -l app=my-app

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

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

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

<pod-name> を、先ほどメモした Pod の実際の名前に置き換えます。

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

echo $DATABASE_PASSWORD

my-secret Secret から取得されたデータベースパスワードが表示されるはずです。

Secret を Pod 内の Volume としてマウント

Secret を作成したので、Pod 内の Volume としてマウントできます。マウントされた Volume から Secret の値を読み取り、コンソールに出力するシンプルな Pod を作成します。

/home/labex/project ディレクトリに、以下の内容で 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

Pod の設定を適用します。

kubectl apply -f pod.yaml

Pod 内の Volume としての Secret の検証

このステップでは、アプリケーションが my-secret Secret からのデータベースパスワードで正しく設定されていることを検証します。

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

kubectl exec -it secret-pod -- sh

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

cat /etc/secret-volume/password

出力は、Secret の値であるはずです。

まとめ

この実験では、Kubernetes Secret を使用して機密情報を保存する方法と、Pod でそれらを使用する方法を学びました。Secret は、機密情報を管理するための安全な方法を提供し、プレーンテキストで Secret を公開することを避けるために、可能な限り使用する必要があります。