Секретный ключ руля в развертывании yaml
Я ищу возможный способ ссылки на секреты в моем deploy.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 ответ
Я не вижу способа добиться этого без настройки COUCHDB_USER
а также COUCHDB_PASSWORD
в контейнере
Один из обходных путей, вы можете указать свой секрет в container.EnvFrom
и весь твой секрет keys
будет преобразован в переменные окружения. затем вы можете использовать эти переменные среды для создания вашей составной среды (т. е. COUCHDB_URL).
К вашему сведению, чтобы создать 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