Kubernetes Learning 第9章:ConfigMap / Secret ~アプリの設定と機密情報の管理~

Kubernetesでは、アプリケーションの実行に必要な設定や認証情報をコンテナに直接書き込まずに、外から注入するのがベストプラクティスです。

それを可能にするのが ConfigMapSecret です。


🔹 ConfigMap:設定値を外出しにする

ConfigMapは、設定ファイルや環境変数などを外部から注入するためのリソースです。

利用する場面

  • アプリの実行ポート、モード(dev/prod)、接続先URLなど
  • ソースコードを変えずに、設定だけ切り替えたいとき

例:ConfigMapの定義

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_MODE: "production"
  PORT: "8080"

このConfigMapをPodにマウントすると、以下のように環境変数として使えます:

spec:
  containers:
    - name: myapp
      image: myapp:latest
      envFrom:
        - configMapRef:
            name: app-config

✅ これでアプリの中では APP_MODEPORT の値が環境変数として参照できます。


🔸 Secret:パスワードやトークンなどの機密情報を安全に管理

Secretは、機密性の高い情報(例:DBのパスワード、APIキー)を暗号化して管理するためのリソースです。

特徴

  • Base64でエンコードされ、Kubernetes内部では保護されて管理される
  • Podに環境変数やファイルとして注入可能
  • 権限管理(RBAC)と組み合わせることでアクセス制御ができる

例:Secretの定義(Base64)

echo -n 'mypassword' | base64
# → bXlwYXNzd29yZA==
apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
data:
  DB_PASSWORD: bXlwYXNzd29yZA==

Pod内で環境変数として渡すには:

env:
  - name: DB_PASSWORD
    valueFrom:
      secretKeyRef:
        name: db-secret
        key: DB_PASSWORD

💡 Base64は「暗号」ではなく「エンコード」です。
より安全にするには、KMS(鍵管理システム)やSealed Secretsなどの仕組みと組み合わせます。


📦 ConfigMapとSecretの使い分け

項目ConfigMapSecret
用途一般的なアプリ設定パスワード、トークンなど機密情報
データ形式プレーンテキストBase64エンコード(内部で暗号化)
表示・編集誰でも確認しやすい権限が必要
セキュリティ高くない(誰でも見える)高め(RBACと連携して保護)

🧩 どのようにPodに渡せるの?

ConfigMapもSecretも、以下の方法でPodに渡せます:

方法説明
環境変数env または envFrom で渡す
ボリュームマウントファイルとして /etc/config/... に渡す
コマンド引数args, command で参照も可能

💡 実践のヒント

  • 環境ごとに設定を変えたい → ConfigMapを環境別に定義
  • パスワードを含めたくない → Secretで分離し、.gitignoreを徹底
  • HelmやKustomize と併用すれば、ConfigMap/Secretの管理がさらに柔軟になります

mh

Related Posts

Kubernetes Learning 第8章:ServiceとIngress ~クラスタ外との橋渡し~

KubernetesではアプリケーションをPodとして動かし…

Kubernetes Learning 第7章:Pod / ReplicaSet / Deployment / StatefulSet を理解する

Kubernetesではアプリケーションを「コンテナで動かす…

You Missed

Kubernetes Learning 第9章:ConfigMap / Secret ~アプリの設定と機密情報の管理~

  • 投稿者 mh
  • 5月 13, 2025
  • 3 views

Android application development 第13章:Configuration Change(構成の変更)とは

  • 投稿者 mh
  • 5月 13, 2025
  • 2 views

Kubernetes Learning 第8章:ServiceとIngress ~クラスタ外との橋渡し~

  • 投稿者 mh
  • 5月 12, 2025
  • 15 views

Android application development 第12章:Activityのライフサイクルと onCreate / onStart / onResume の扱い方

  • 投稿者 mh
  • 5月 12, 2025
  • 16 views

Kubernetes Learning 第7章:Pod / ReplicaSet / Deployment / StatefulSet を理解する

  • 投稿者 mh
  • 5月 11, 2025
  • 22 views

Android application development 第11章:Fragmentの導入とActivityとの連携

  • 投稿者 mh
  • 5月 11, 2025
  • 24 views