Kubernetes YAMLのSecretsとConfigMapsをENVに変換する

Kubernetes SecretおよびConfigMap YAMLマニフェストを.envファイル形式に変換します。base64エンコードされた値の処理と設定抽出の管理方法を学びます。

Real-World Configs

詳細な説明

Kubernetesは設定をConfigMapsに、機密データをSecretsに格納し、どちらもYAMLマニフェストとして定義されます。これらを.env形式に変換するのは、ローカル開発時やデプロイメントプラットフォーム間の移行時によく行われます。

Kubernetes ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  DATABASE_HOST: db.production.svc.cluster.local
  DATABASE_PORT: "5432"
  DATABASE_NAME: myapp
  LOG_LEVEL: info
  CACHE_TTL: "3600"
  FEATURE_NEW_UI: "true"

Kubernetes Secret(値はbase64エンコード済み):

apiVersion: v1
kind: Secret
metadata:
  name: app-secrets
type: Opaque
data:
  DATABASE_PASSWORD: cDRzc3cwcmQ=
  JWT_SECRET: c3VwZXItc2VjcmV0LWtleS0xMjM=
  API_KEY: YWJjZGVmZzEyMzQ1Ng==

結合された.env出力:

# From ConfigMap: app-config
DATABASE_HOST=db.production.svc.cluster.local
DATABASE_PORT=5432
DATABASE_NAME=myapp
LOG_LEVEL=info
CACHE_TTL=3600
FEATURE_NEW_UI=true

# From Secret: app-secrets
DATABASE_PASSWORD=p4ssw0rd
JWT_SECRET=super-secret-key-123
API_KEY=abcdefg123456

主な変換ステップ:

  1. ConfigMapのdataセクション にはプレーンテキストのキーバリューペアが含まれています。変換は直接的で、dataマップを抽出してKEY=VALUE形式にフォーマットするだけです。
  2. Secretのdataセクション にはbase64エンコードされた値が含まれています。各値は.envファイルに書き込む前にデコード(echo "cDRzc3cwcmQ=" | base64 -d)する必要があります。
  3. SecretのstringDataセクション(存在する場合)にはプレーンテキストの値が含まれ、Kubernetesが自動的にbase64エンコードします。これらはデコードなしで直接変換できます。

Kubernetes固有の注意事項:

  • 名前空間付きデータ。 ConfigMapsとSecretsは名前空間スコープです。.envに抽出すると、名前空間のコンテキストが失われます。
  • 複数のConfigMaps。 Podは複数のConfigMapsをマウントできます。1つの.envファイルに統合する際、キーの衝突に注意してください。
  • バイナリデータ。 SecretsにはTLS証明書のようなバイナリデータを含めることができます。これらは特別な処理が必要で、通常は値全体をBase64エンコードするか、別ファイルに書き出します。

kubectlによる抽出のショートカット:

kubectl get configmap app-config -o jsonpath='{.data}' | \
  jq -r 'to_entries[] | "\(.key)=\(.value)"'

このパイプラインはConfigMapデータを抽出し、クラスターから直接ENV形式にフォーマットします。

ユースケース

本番Kubernetesクラスターを反映したローカル開発環境をセットアップするために、ConfigMapとSecretの値をdocker-composeまたはdotenvベースの開発サーバーで使用する.envファイルに抽出する場合。

試してみる — YAML ↔ ENV Converter

フルツールを開く