はじめに
この実験では、パスワードや API キー、その他の機密データなどの機密情報を安全に管理するために、Kubernetes Secrets をどのように使用するかを学びます。秘密を作成し、アプリケーションで使用し、アプリケーションが適切に構成されていることを確認します。各ステップは前のステップをベースに構築されているため、注意深く従ってください。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、パスワードや API キー、その他の機密データなどの機密情報を安全に管理するために、Kubernetes Secrets をどのように使用するかを学びます。秘密を作成し、アプリケーションで使用し、アプリケーションが適切に構成されていることを確認します。各ステップは前のステップをベースに構築されているため、注意深く従ってください。
リソースを作成する前に、稼働している Kubernetes クラスタが必要です。Minikube は、ローカル マシン上で動作する軽量の Kubernetes 環境です。
作業ディレクトリに移動する:
ターミナルを開き、デフォルトのプロジェクト フォルダに移動します。
cd /home/labex/project
Minikube を起動する:
Minikube を起動して Kubernetes クラスタを初期化します。
minikube start
Minikube が稼働していることを確認する:
Minikube クラスタの状態を確認します。
minikube status
kubelet
や apiserver
などのコンポーネントが 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
シークレットが表示されるはずです。
このステップでは、アプリケーションを変更して、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
デプロイメントが表示されるはずです。
このステップでは、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
シークレットから取得したデータベース パスワードが表示されるはずです。
これでシークレットを作成したので、ポッド内でボリュームとしてマウントすることができます。マウントされたボリュームからシークレット値を読み取り、コンソールに出力する単純なポッドを作成します。
次の内容で 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
出力はシークレットの値でなければなりません。
この実験では、Kubernetes シークレットを使用して機密情報を保管する方法と、ポッドでそれを使用する方法を学びました。シークレットは機密情報を管理するための安全な方法を提供し、平文でシークレットを公開することを避けるためにできる限り使用する必要があります。