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 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

Kubernetes Learning 第38章:Operatorとは? ~Kubernetesに「運用の自動化ロボット」を組み込む仕組み~

You Missed

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第13章:ストレージとデータベースの基礎 : オブジェクトストレージ: Cloud Storage(バケット、オブジェクト、ストレージクラス)- あなたの「データ置き場」

  • 投稿者 mh
  • 6月 23, 2025
  • 9 views

Kubernetes Learning 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

  • 投稿者 mh
  • 6月 21, 2025
  • 27 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第12章:Cloud CDN(Content Delivery Network):あなたのWebサイトを「世界中のユーザーに超高速で届ける宅配便ネットワーク」

  • 投稿者 mh
  • 6月 20, 2025
  • 35 views

Kubernetes Learning 第38章:Operatorとは? ~Kubernetesに「運用の自動化ロボット」を組み込む仕組み~

  • 投稿者 mh
  • 6月 19, 2025
  • 40 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第11章:Cloud Load Balancing:あなたのGCPリソースを「賢く振り分ける交通整理の達人」

  • 投稿者 mh
  • 6月 18, 2025
  • 43 views

Kubernetes Learning 第37章:JenkinsやGitHub ActionsからのKubernetesデプロイ例 ~CI/CDツールとKubernetesをつなげてみよう~

  • 投稿者 mh
  • 6月 17, 2025
  • 42 views