web-dev-qa-db-ja.com

kubernetessecretから構成マップにデータをインポートする

アプリのデータベース構成を含むkubernetesConfigMapを使用していますが、データベースパスワードを持つシークレットがあります。 ConfigMapでこのシークレットを使用する必要があるため、ConfigMapに環境変数を追加し、シークレットからポッドデプロイメントの値を指定しようとすると、ConfigMapの値が取得したため、パスワードを使用してmysqlに接続できません。変数の正確な文字列。

apiVersion: v1
kind: ConfigMap
metadata:
  name: config
data:
  APP_CONFIG: |
    port: 8080
    databases:
      default:
        connector: mysql
        Host: "mysql"
        port: "3306"
        user: "root"
        password: "$DB_PASSWORD"

およびdeployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: app
  labels:
    app: backend
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
      - name: app
        image: simple-app-image
        ports:
          - name: "8080"
            containerPort: 8080
        env:
          - name: APP_CONFIG
            valueFrom:
              configMapKeyRef:
                name: config
                key: APP_CONFIG
          - name: DB_PASSWORD
            valueFrom:
              secretKeyRef:
                name: "mysql-secret"
                key: "mysql-root-password"

注:シークレットが存在し、「mysql-root-password」値を取得してデータベースへのログインに使用できます

7
yara mohamed

Kubernetesはその代わりを行うことはできません。コンテナのエントリポイントで、Shellを使用して置き換える必要があります。

これは実際の例です。デフォルトのエントリポイントを変更して、その置換で新しい変数を作成します。このコマンドの後に、目的のエントリポイントを追加する必要があります。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: app
  labels:
    app: backend
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
      - name: app
        image: simple-app-image
        command:
          - /bin/bash
          - -c
        args:
          - "NEW_APP_CONFIG=$(echo $APP_CONFIG | envsubst) && echo $NEW_APP_CONFIG && <INSERT IMAGE ENTRYPOINT HERE>"
        ports:
          - name: "app"
            containerPort: 8080
        env:
          - name: APP_CONFIG
            valueFrom:
              configMapKeyRef:
                name: config
                key: APP_CONFIG
          - name: DB_PASSWORD
            valueFrom:
              secretKeyRef:
                name: "mysql-secret"
                key: "mysql-root-password"
4
Ignacio Millán

configMap全体をsecretに変換し、データベースのパスワードをそこに直接デプロイします。次に、シークレットをファイルとしてボリュームにマウントし、コンテナー内の通常の構成ファイルのように使用できます。

0
peedee