2026年7月1日

2026年7月1日

KubernetesのConfigMapとSecretを管理する方法

はじめに

Kubernetesは、アプリケーションやサービスの管理を高度に行えるオープンソースクラスタマネージャーです。この記事では、KubernetesにおけるConfigMapとSecretの基本操作から応用までを解説します。これらのリソースは、環境変数やファイルなどの設定情報を安全に保存し、コンテナ内から参照することができます。

症状・背景

  • Kubernetesでアプリケーションを展開する際に、静的なデータ(例:アプリケーションの設定パラメータ)が必要な場合
  • スキーマ変更やパスワード変更などの頻繁に更新される情報管理が必要な場合
  • セキュリティ上の理由から、コンテナ内で外部ファイルを読み取らないで済むようにする必要がある場合

手順・設定方法

ステップ1: ConfigMapを作成する

# ファイルconfigmap.yamlに以下のような内容を記述します。
apiVersion: v1
kind: ConfigMap
metadata:
  name: example-configmap
data:
  config.json: |-
    {
      "key": "value"
    }

# ConfigMapを作成します。
kubectl apply -f configmap.yaml

# 状態確認
kubectl get configmap example-configmap -o yaml

ステップ2: Secretを生成する

# ファイルsecret.yamlに以下のような内容を記述します。
apiVersion: v1
kind: Secret
metadata:
  name: example-secret
type: Opaque
data:
  username: dXNlcm5hbWU=
  password: cGFzc3Vtcw==

# Secretを作成します。
kubectl apply -f secret.yaml

# 状態確認
kubectl get secret example-secret -o yaml

ステップ3: ConfigMapとSecretを使用するPodの作成

# ファイルpod.yamlに以下のような内容を記述します。
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: example-container
    image: nginx
    env:
      - name: CONFIG_VAR
        valueFrom:
          configMapKeyRef:
            name: example-configmap
            key: config.json
      - name: USERNAME
        valueFrom:
          secretKeyRef:
            name: example-secret
            key: username

# Podを作成します。
kubectl apply -f pod.yaml

# 状態確認
kubectl get pods -o wide

ステップ4: 実践/トラブルシュート/監視

# Pod内からSecretを参照するか確認します。
kubectl exec example-pod -- cat /run/secrets/example-secret/username

# ConfigMapを参照するか確認します。
kubectl exec example-pod -- cat /etc/configmap/config.json

注意事項

  • SecretのデータはBase64エンコードされているため、必要に応じてデコードしてください。
  • ConfigMapやSecretはクラスタ全体で共有されます。そのため、セキュリティ上のリスクが伴う場合があります。
  • 大量のデータを含む場合はConfigMapを使用し、小さなデータ(例:パスワード)はSecretを使用することが推奨されています。
  • デプロイメントやステージング環境など、異なるデータが必要な場合は、それぞれの環境に対して異なるConfigMapとSecretを作成することをお勧めします。

まとめ

1. ConfigMap: 静的な設定情報を格納し、Pod内から参照することができます。ファイル形式で管理が容易です。

2. Secret: パスワードやAPIキーなどの機密情報を暗号化して保存します。コンテナ内の安全性が向上します。

3. 使用例: ConfigMapとSecretは、アプリケーションの設定パラメータや認証情報を安全に管理するために効果的に使用できます。

4. 注意点: これらのリソースはクラスタ全体で共有されるため、セキュリティ上のリスクを考慮に入れる必要があります。

5. 監視: ConfigMapとSecretはPodのログから参照されることがありますが、定期的な確認が必要です。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ