секретный ключ руля в развертывании yaml - PullRequest
0 голосов
/ 10 января 2019

Я ищу возможный способ ссылки на секреты в моем развертывании. Yaml (1 вкладыш)

В настоящее время я использую

containers:
        - name: {{ template "myapp.name" . }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: Always
          env:
            - name: COUCHDB_USER
              valueFrom:
                secretKeyRef:
                  name: {{ .Release.Name }}-secrets
                  key: COUCHDB_USER
            - name: COUCHDB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: {{ .Release.Name }}-secrets
                  key: COUCHDB_PASSWORD

С минимально возможной модификацией я хочу добиться чего-то вроде этого:

containers:
        - name: {{ template "myapp.name" . }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: Always
          env:
            - name: COUCHDB_URL
              value: http://${COUCHDB_USER}:${COUCHDB_PASSWORD}@{{ .Release.Name }}-couchdb:5984

Просто капризно, если я смогу сделать это за 1 шаг во время развертывания, вместо того, чтобы передать 2 переменные env и проанализировать их в моем приложении.

1 Ответ

0 голосов
/ 10 января 2019

Я не вижу способа достичь этого без установки COUCHDB_USER и COUCHDB_PASSWORD в контейнере env.

Одно из возможных решений: вы можете указать свой секрет в container.EnvFrom, и весь ваш секрет keys будет преобразован в переменные окружения. затем вы можете использовать эти переменные среды для создания вашей составной среды (т. е. COUCHDB_URL).

FYI, Для создания env из другого env в kubernetes используется (). Фигурные скобки {} не будут работать в этот самый момент.


Один образец,

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  COUCHDB_USER: YWRtaW4=
  COUCHDB_PASSWORD: MWYyZDFlMmU2N2Rm
---
apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: redis
    envFrom:
    - secretRef:
        name: mysecret
    env:
    - name: COUCHDB_URL
      value: http://$(COUCHDB_USER):$(COUCHDB_PASSWORD)rest-of-the-url

Вы можете подтвердить вывод,

$ kubectl exec -it secret-env-pod bash

root@secret-env-pod:/data# env | grep COUCHDB
COUCHDB_URL=http://admin:1f2d1e2e67dfrest-of-the-url
COUCHDB_PASSWORD=1f2d1e2e67df
COUCHDB_USER=admin

В вашем случае yaml для контейнера:

    containers:
    - name: {{ template "myapp.name" . }}
      image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
      imagePullPolicy: Always
      envFrom:
      - secretRef:
          name: {{ .Release.Name }}-secrets
      env:
      - name: COUCHDB_URL
        value: http://$(COUCHDB_USER):$(COUCHDB_PASSWORD)@{{ .Release.Name }}-couchdb:5984
...