Импортируйте данные в конфигурационную карту из секрета Кубернет - PullRequest
0 голосов
/ 21 мая 2018

Я использую kubernetes ConfigMap, который содержит конфигурации базы данных для приложения, и есть секрет, который имеет пароль базы данных.Мне нужно использовать этот секрет в ConfigMap, поэтому, когда я пытаюсь добавить переменную среды в ConfigMap и указать значение в развертывании модуля из секрета, я не могу подключиться к mysql с паролем, поскольку значения в ConfigMap занялиточная строка переменной.

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"

и deploy.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" ииспользовать для входа в базу данных

Ответы [ 2 ]

0 голосов
/ 14 августа 2019

Я бы преобразовал все configMap в secret и развернул бы пароль базы данных прямо там.Затем вы можете смонтировать секрет как файл на том и использовать его как обычный файл конфигурации в контейнере.

0 голосов
/ 21 мая 2018

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"
...