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