Kubernetes の configmap の一部としてシークレットを保持するにはどうすればよいでしょうか?

Kubernetes の configmap の一部としてシークレットを保持するにはどうすればよいでしょうか?

アプリケーションに構成ファイルを作成する構成マップがあります。

構造は以下のようになります。

apiVersion: v1
kind: ConfigMap
metadata:
  name: database-configmap
data:
  config: |
   dbport=5432
   dcname=
   dbssl=false
   locktime=300
   domainuser=
   dattserverhost=localhost
   conntype=ON-PREM
   dbinstance=
   dattusessl=false
   dbpwd=VrjvBguQ
   iisport=80
   docountupgrade=false
   doreportupgrade=false
   dbname=dattdatabase
   dattuseiis=false
   dbtype=POSTGRESQL
   dbusername=postg
   dbserver=tgres.database.azure.com
   domainpwd=

完全なファイルはプロパティ ファイルにダンプされ、アプリケーションはそれを使用します。

いくつかのプロパティ (dbusername、dbpassword など) を Kubernetes シークレットとして保存し、デプロイメント ポッドが作成されたときに、これらのシークレットと configmap がプロパティ ファイルにマージされるようにする方法はありますか?

提案してください。

答え1

短い答え:やらないことです。

SecretsConfigMaps異なるオブジェクトです。Secretsは Base64 エンコードで難読化されており、機密データに使用する必要がありますが、ConfigMapsは非機密データに使用されます。

機密データと非機密データ用に別々のオブジェクトを作成し、それらを で使用する必要があります。との両方を使用するようにDeploymentを変更できます。次に例を示します。DeploymentSecretsConfigMaps

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: envtest
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: envtest
    spec:
      containers:
      - name: envtest
        image: gcr.io/<PROJECT_ID>/envtest
        ports:
        - containerPort: 3000
        env:
        - name: LANGUAGE
          valueFrom:
            configMapKeyRef:
              name: language
              key: LANGUAGE
        - name: API_KEY
          valueFrom:
            secretKeyRef:
              name: apikey
              key: API_KEY

Secretsとの両方にはさまざまな使用方法がありますConfigMaps。詳細については、以下のソースを参照してください。

関連情報