はじめに
この実験(Lab)では、Kubernetes Secrets を使用して、パスワード、API キー、その他の機密データなどの機密情報を安全に管理する方法を学びます。Secret を作成し、アプリケーションで使用し、アプリケーションが適切に設定されていることを確認します。各ステップは前のステップに基づいて構築されているため、注意深く手順に従ってください。
Minikube クラスタの起動
リソースを作成する前に、稼働中の Kubernetes クラスタが必要です。Minikube は、ローカルマシン上で動作する軽量な Kubernetes 環境です。
作業ディレクトリへの移動:
ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。
cd /home/labex/projectMinikube の起動:
Minikube を起動して、Kubernetes クラスタを初期化します。
minikube start- このコマンドは、ローカルマシン上にシングルノードの Kubernetes クラスタをセットアップします。
- Minikube の起動には、システムのパフォーマンスによっては数分かかる場合があります。
Minikube が実行されていることを確認:
Minikube クラスタの状態を確認します。
minikube statuskubeletやapiserverなどのコンポーネントが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 を公開することを避けるために、可能な限り使用する必要があります。


