ConfigMapsとSecrets
ConfigMapsとSecretsを使用して、Kubernetesのデプロイメント内で設定データや機密情報を安全に管理します。
「ConfigMapsとSecrets」はCoddyKit上の無料Docker & DevOps Fundamentalsレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDocker & DevOps Fundamentals学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Docker & DevOps Fundamentalsコースには全4レッスンが含まれています。
ConfigMapとSecretの概要
ようこそ。このレッスンでは、Kubernetesで設定データと機密情報を管理する方法を学びます。柔軟で安全なアプリケーションのデプロイに欠かせない2つのツール、ConfigMapとSecretについて説明します。

設定を外部化する理由
データベースの認証情報やAPIキーを、アプリケーションのDockerイメージに直接ハードコードする状況を想像してください。更新が難しくなり、機密データも露出してしまいます。
- 柔軟性の低下:変更するにはイメージを再ビルドする必要があります。
- セキュリティリスク:機密データがイメージに埋め込まれます。
- 環境依存:開発環境と本番環境など、環境ごとに異なる設定が必要です。
ConfigMap:機密性のないデータ
ConfigMapは、機密性のない設定データをキーと値のペアとして保存するKubernetesオブジェクトです。ログレベルやAPIエンドポイントなど、アプリケーションの設定をまとめて管理する場所と考えることができます。
設定をアプリケーションコードから分離できるため、デプロイの移植性が高まり、管理もしやすくなります。
ConfigMapの定義
ConfigMapは、リテラル値、ファイル、またはディレクトリから作成できます。以下は、YAMLファイルで定義した簡単な例です。
apiVersion: v1
kind: ConfigMap
metadata:
name: my-app-config
data:
log_level: "INFO"
api_endpoint: "http://myapi.example.com"環境変数としてのConfigMap
作成したConfigMapのデータは、Podで環境変数として利用できます。アプリケーションに設定を渡す一般的な方法です。
Podでmy-app-configを使用する方法は次のとおりです。
apiVersion: v1
kind: Pod
metadata:
name: configmap-env-pod
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "echo Log Level: $LOG_LEVEL; echo API: $API_ENDPOINT"]
env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: my-app-config
key: log_level
- name: API_ENDPOINT
valueFrom:
configMapKeyRef:
name: my-app-config
key: api_endpoint
restartPolicy: NeverマウントしたファイルとしてのConfigMap
ConfigMapのデータは、コンテナ内にファイルとしてマウントすることもできます。各キーと値のペアが1つのファイルになり、キーがファイル名、値がファイルの内容になります。
アプリケーションが特定のパスから読み込む設定ファイルに便利です。
apiVersion: v1
kind: Pod
metadata:
name: configmap-file-pod
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "cat /etc/config/log_level; cat /etc/config/api_endpoint"]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: my-app-config
restartPolicy: NeverSecret:機密データ
SecretはConfigMapに似ていますが、パスワード、APIキー、TLS証明書などの機密データを扱うために設計されています。Kubernetesを使うと、これらを安全に管理して配布できます。
ConfigMapがデータをプレーンテキストで保存するのに対し、Secretはbase64エンコードされます。これは暗号化ではありませんが、偶発的な露出を防ぐのに役立ちます。
Secretの定義
Secretを作成するときは、値をbase64エンコードする必要があります。echo -n 'my-password' | base64を使ってエンコードできます。
以下は、データベースのパスワードの例です。
apiVersion: v1
kind: Secret
metadata:
name: db-credentials
type: Opaque
data:
username: YWRtaW4= # base64 of 'admin'
password: c3VwZXJzZWNyZXRwYXNz # base64 of 'supersecretpass'PodでのSecretの使用
SecretはConfigMapとほぼ同じ方法でPodから利用できます。環境変数として使用することも、ファイルとしてマウントすることもできます。Kubernetesは、コンテナに渡す前に自動的にデコードします。
環境変数はログに記録されたり調査されたりしやすいため、セキュリティ上は通常、ファイルとしてマウントする方法が推奨されます。
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: my-app-container
image: busybox
command: ["sh", "-c", "echo DB User: $DB_USERNAME; echo DB Pass: $DB_PASSWORD"]
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: db-credentials
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-credentials
key: password
restartPolicy: Neverセキュリティのベストプラクティス
base64エンコードは暗号化ではないことを覚えておいてください。保存時のデータを真に暗号化するには、Kubernetes Secretsバックエンド(Vaultなど)や、クラウドプロバイダーのKMSサービスを利用する必要があります。
- RBAC:Secretにアクセスできるユーザーを制御します。
- 最小権限:Podには必要なSecretへのアクセスだけを許可します。
- マウントしたファイル:環境変数よりもSecretをファイルとしてマウントする方法を優先します。
設定に関する確認問題
Kubernetesで、アプリケーション用にAPIキー(機密情報)とログレベルの設定(機密性なし)を保存する必要があります。
それぞれにどのKubernetesオブジェクトを使用すべきですか?
まとめ:ConfigMapとSecret
よくできました。Kubernetesでアプリケーションの設定と機密データを管理する方法を学びました。
- ConfigMap:機密性のないキーと値のペアを保存します。
- Secret:機密データを保存します(base64エンコード)。
- どちらもPodから環境変数またはマウントしたファイルとして利用できます。
- 機密情報を扱うときは、必ずセキュリティのベストプラクティスに従ってください。
次は、RBACや外部Secret管理ソリューションなど、高度なセキュリティトピックを学びましょう。
よくある質問
「ConfigMapsとSecrets」レッスンは無料ですか?
はい。「ConfigMapsとSecrets」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Docker & DevOps Fundamentalsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Docker & DevOps Fundamentalsコースには全4レッスンが含まれています。
「ConfigMapsとSecrets」で何を学びますか?
ConfigMapsとSecretsを使用して、Kubernetesのデプロイメント内で設定データや機密情報を安全に管理します。 ブラウザで直接実行するハンズオンコードでDocker & DevOps Fundamentalsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Docker & DevOps Fundamentalsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDocker & DevOps Fundamentalsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ConfigMapsとSecrets」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDocker & DevOps Fundamentalsレッスンでコードを書いて実行できますか?
はい。すべてのDocker & DevOps Fundamentalsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ステートレスアプリのDeployment
- ネットワークアクセスのためのService
- ConfigMapsとSecrets
- Ingressと外部ルーティング