エンタープライズアプリケーションをデプロイするには、データベースのパスワードや API キーなどの機密データを管理する必要があります。この情報をコードにハードコーディングすると、深刻なセキュリティリスクが生じ、データ漏洩につながる可能性があります。Kubernetes Secret は、機密データをアプリケーションコードから分離するための暗号化されたストレージメカニズムを提供します。これにより、コードの漏洩によるセキュリティインシデントを防ぐことができます。
方法の選択
メソッド | 機能 | ユースケース |
ボリュームとしてマウント (推奨) | ファイル権限によって、データを分離し、プロセス間の漏洩を防ぎます。Secret への変更は、マウントされたファイルに自動的に同期されます。 | 本番環境、特にデータベースのパスワードや API キーなど、詳細なファイル権限の制御が必要な機密性の高いデータに最適です。 |
環境変数として挿入 | コンテナ内のすべてのプロセスから簡単にアクセスできますが、ログを介して意図せず漏洩するリスクが高まります。設定の更新を反映させるには、Pod を再起動する必要もあります。 | ログレベルやサービスエンドポイントなど、単純な設定の挿入に適しています。また、環境変数を読み込むように設計されている既存アプリケーションにも利用できます。 |
Secret の作成
コンソール
ACK コンソールにログインし、左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、変更するクラスターの名前をクリックし、左側のナビゲーションウィンドウで、 を選択します。
[Secret] ページで、デフォルトの [名前空間] を選択し、[作成] をクリックします。新しい Secret を以下のように設定します。
名前: nginx-secret
タイプ: Opaque
Opaque: パスワードや証明書などの機密データを保存するために使用される Base64 でエンコードされた Secret。
プライベートリポジトリログオン Secret: プライベートイメージリポジトリの認証情報を保存します。
TLS 証明書: Transport Layer Security (TLS)/Secure Sockets Layer (SSL) 証明書と秘密鍵を保存します。
次のキーと値のペアを追加します:
username: admin
password: MySecurePassword!
api-key: ak-1234567890abcdef
プレーンテキストの値を入力する場合は、[Base64 でデータ値をエンコード] にチェックを入れます。
kubectl
Secret を作成します。
重要この例はデモンストレーションのみを目的としています。本番環境では、
--from-literalを使用する代わりに、ファイルまたは他の安全なソースから Secret を作成してください。kubectl create secret generic nginx-secret \ --from-literal=username=admin \ --from-literal=password='MySecurePassword!' \ --from-literal=api-key='ak-1234567890abcdef' \ -n defaultSecret が作成されたことを確認します。
kubectl get secret nginx-secret期待される出力:
NAME TYPE DATA AGE nginx-secret Opaque 3 23h
Secret の使用
Deployment と Secret は、同じ名前空間に配置する必要があります。
方法 1: ボリュームとしてマウント
この方法では、Secret のデータをコンテナ内のファイルとして安全に利用します。
コンソール
Deployment を作成します。
[クラスター] ページで、管理対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
ステートレスワークロード (Deployment) を作成します。
[Deployment] ページで、[イメージから作成] をクリックします。
[基本情報] ステップで、次のパラメーターを設定し、[次へ] をクリックします:
名前: nginx-volume-demo
名前空間: default
レプリカ: 2
タイプ: Deployment
コンテナを構成します。
[コンテナ] ステップで、[イメージ名] と [ポート] を設定します:
イメージ名:
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6コンテナポート: 80, プロトコル: TCP
重要このイメージをプルするには、クラスターがインターネットにアクセスできる必要があります。クラスターの作成時に [VPC の SNAT を設定] (デフォルトで有効) を選択した場合、追加の操作は不要です。それ以外の場合は、「既存の ACK クラスターでインターネットアクセスを有効にする」をご参照ください。
[ボリューム] セクションで、[ローカルストレージの追加] をクリックします。
PV タイプ: Secret
名前: secret-volume
マウントソース: 事前に作成された Secret (例: nginx-secret) を選択します。
コンテナパス: コンテナ内のマウントパス (例: /etc/nginx/secrets) を指定します。
次に、[次へ] をクリックします。
[高度な設定] ステップで、必要に応じてアクセス制御、スケーリング、スケジューリング、ラベル、およびアノテーションを設定します。その後、ページ下部の [作成] をクリックします。
[完了] ステップで、アプリケーションタスクを監視します。
[作成タスク送信済み] セクションで、[詳細の表示] をクリックし、コンテナのステータスが
Runningであることを確認します。
Secret のファイルがマウントされたことを確認します。
対象 Pod (例:
nginx-volume-demo-7xxxxxx****) を選択します。[操作] 列で [ターミナル] をクリックし、nginxコンテナを選択してターミナルセッションを開きます。Secret のファイルがマウントされたことを確認します。
ls -la /etc/nginx/secrets期待される出力:
total 4 drwxrwxrwt 3 root root 140 Sep 15 02:31 . drwxr-xr-x 1 root root 4096 Sep 15 02:31 .. drwxr-xr-x 2 root root 100 Sep 15 02:31 ..2025_09_15_02_31_13.2599431463 lrwxrwxrwx 1 root root 32 Sep 15 02:31 ..data -> ..2025_09_15_02_31_13.2599431463 lrwxrwxrwx 1 root root 18 Sep 15 02:31 api-key.txt -> ..data/api-key.txt lrwxrwxrwx 1 root root 22 Sep 15 02:31 db-password.txt -> ..data/db-password.txt lrwxrwxrwx 1 root root 22 Sep 15 02:31 db-username.txt -> ..data/db-username.txtファイルの内容を確認します。
cat /etc/nginx/secrets/db-username.txt cat /etc/nginx/secrets/api-key.txt期待される出力:
admin ak-1234567890abcdef
出力は Secret 内のデータと一致し、アプリケーションがそれにアクセスできることを確認します。
kubectl
nginx-volume-demo.yaml という名前のファイルを作成します。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-volume-demo namespace: default labels: app: nginx-volume spec: replicas: 2 selector: matchLabels: app: nginx-volume template: metadata: labels: app: nginx-volume spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 protocol: TCP # Secret ボリュームをマウント volumeMounts: - name: secret-volume mountPath: /etc/nginx/secrets readOnly: true volumes: - name: secret-volume secret: secretName: nginx-secret # ファイル権限を設定 defaultMode: 0644 # オプション: ファイル名のマッピングをカスタマイズ items: - key: username path: db-username.txt - key: password path: db-password.txt - key: api-key path: api-key.txtSecret を使用する Deployment を作成します。
kubectl apply -f nginx-volume-demo.yamlPod のステータスを確認します。
kubectl get pods -l app=nginx-volume -n default期待される出力:
NAME READY STATUS RESTARTS AGE nginx-volume-demo-7db46895bc-c98b5 1/1 Running 0 4h20m nginx-volume-demo-7db46895bc-pc6qg 1/1 Running 0 4h20mSecret のファイルがマウントされたことを確認します。
kubectl exec deployment/nginx-volume-demo -n default -- ls -la /etc/nginx/secrets期待される出力:
total 4 drwxrwxrwt 3 root root 140 Sep 15 02:31 . drwxr-xr-x 1 root root 4096 Sep 15 02:31 .. drwxr-xr-x 2 root root 100 Sep 15 02:31 ..2025_09_15_02_31_13.2599431463 lrwxrwxrwx 1 root root 32 Sep 15 02:31 ..data -> ..2025_09_15_02_31_13.2599431463 lrwxrwxrwx 1 root root 18 Sep 15 02:31 api-key.txt -> ..data/api-key.txt lrwxrwxrwx 1 root root 22 Sep 15 02:31 db-password.txt -> ..data/db-password.txt lrwxrwxrwx 1 root root 22 Sep 15 02:31 db-username.txt -> ..data/db-username.txtファイルの内容を確認します。
kubectl exec deployment/nginx-volume-demo -n default -- cat /etc/nginx/secrets/db-username.txt kubectl exec deployment/nginx-volume-demo -n default -- cat /etc/nginx/secrets/api-key.txt期待される出力:
admin ak-1234567890abcdef出力は Secret 内のデータと一致し、アプリケーションがデータにアクセスできることを確認します。
方法 2: 環境変数として挿入
この方法では、Secret をコンテナ内の環境変数として公開します。
コンソール
Deployment を作成します。
[クラスター] ページで、管理対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
デプロイメントを作成します。
[Deployment] ページで、[イメージから作成] をクリックします。
[基本情報] ステップで、以下のパラメーターを設定し、[次へ] をクリックします:
名前: nginx-env-demo
名前空間: default
レプリカ: 2
タイプ: Deployment
コンテナを設定します。
[コンテナ] ステップで、[イメージ名] と [ポート] を設定します:
イメージ名:
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6コンテナポート: 80, プロトコル: TCP
重要このイメージをプルするには、クラスターがインターネットにアクセスできる必要があります。クラスター作成時に [VPC の SNAT を設定] (デフォルトで有効) を選択した場合、追加の操作は不要です。それ以外の場合は、「既存の ACK クラスターでインターネットアクセスを有効にする」をご参照ください。
[環境] セクションで、[追加] をクリックします。
タイプ: Secrets
変数キー:
USERNAME。値/ValueFrom: 事前に作成された Secret (例:
nginx-secret) からソースを選択します。次に、各キーの環境変数名を指定します。
その後、[次へ] をクリックします。
[高等な設定] ステップで、必要に応じてアクセスの制御、スケーリング、スケジューリング、ラベル、およびアノテーションを設定します。次に、ページの下部にある [作成] をクリックします。
[完了] ステップで、アプリケーションタスクを監視します。
[作成タスク送信済み] セクションで、[詳細の表示] をクリックし、コンテナのステータスが
Runningであることを確認します。
環境変数が挿入されたことを確認します。
対象 Pod (例:
nginx-env-demo-7xxxxxx****) を選択します。[操作] 列で [ターミナル] をクリックし、nginxコンテナを選択してターミナルセッションを開きます。env | grep -E 'DB_|API_|NGINX_'期待される出力:
API_KEY=ak-1234567890abcdef NGINX_api-key=ak-1234567890abcdef NGINX_password=MySecurePassword! NGINX_username=admin DB_USERNAME=admin DB_PASSWORD=MySecurePassword!出力は Secret 内のデータと一致し、アプリケーションが環境変数経由でデータにアクセスできることを確認します。
kubectl
nginx-env-demo.yaml という名前のファイルを作成します。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-env-demo namespace: default labels: app: nginx-env spec: replicas: 2 selector: matchLabels: app: nginx-env template: metadata: labels: app: nginx-env spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 protocol: TCP # Secret から個別のキーと値のペアを挿入 env: - name: DB_USERNAME valueFrom: secretKeyRef: name: nginx-secret key: username - name: DB_PASSWORD valueFrom: secretKeyRef: name: nginx-secret key: password - name: API_KEY valueFrom: secretKeyRef: name: nginx-secret key: api-key # オプション: プレフィックスを付けて Secret からすべてのキーと値のペアを挿入 envFrom: - prefix: NGINX_ secretRef: name: nginx-secretSecret を使用する Deployment を作成します。
kubectl apply -f nginx-env-demo.yamlPod のステータスを確認します。
kubectl get pods -l app=nginx-env -n default期待される出力:
NAME READY STATUS RESTARTS AGE nginx-env-demo-6dc7556d9-6pjhj 1/1 Running 0 3h33m nginx-env-demo-6dc7556d9-rcqsh 1/1 Running 0 3h33m環境変数が挿入されたことを確認します。
kubectl exec deployment/nginx-env-demo -n default -- env | grep -E 'DB_|API_|NGINX_'期待される出力:
API_KEY=ak-1234567890abcdef NGINX_api-key=ak-1234567890abcdef NGINX_password=MySecurePassword! NGINX_username=admin DB_USERNAME=admin DB_PASSWORD=MySecurePassword!出力は Secret 内のデータと一致し、アプリケーションが環境変数経由でデータにアクセスできることを確認します。
Secret の管理
Secret の作成後、[Secret] ページで以下の操作を実行できます:
操作 | 説明 |
Secret の表示 | Secret の名前をクリックして詳細を表示します。 |
Secret の編集 | [操作] 列で、[編集] をクリックして Secret のデータを変更します。 重要 使用中の Secret を変更すると、アプリケーションのサービスが中断される可能性があります。操作は慎重に行ってください。 |
Secret の削除 | [操作] 列で、[削除] をクリックして不要になった Secret を削除します。 重要
|
関連ドキュメント
Pod の一般的な問題の診断とトラブルシューティング方法については、「Pod の異常に関するトラブルシューティング」をご参照ください。
コンソールと kubectl を使用して ACK クラスターでステートレスアプリケーションを作成する方法については、「Deployment の作成」をご参照ください。
Secret の詳細については、Kubernetes の公式ドキュメントをご参照ください。