#kubernetes-helm
Вопрос:
У меня есть раздел в моих ценностях.yaml, который выглядит так:
env:
normal:
ENV_VAR_1: value
ENV_VAR_2: otherValue
secret:
secret-location:
ENV_VAR_USERNAME: username
ENV_VAR_PASSWORD: password
different-secret:
ENV_CONN_STRING: my_conn_string
У меня есть функция _helpers.tpl примерно так:
{{/*
Add environment variables
*/}}
{{- define "helpers.list-env-variables" }}
{{- range $key, $val := .Values.env.normal }}
- name: {{ $key }}
value: {{ $val }}
{{- end }}
{{- range $name := .Values.env.secret }}
{{- }}
{{- range $key, $val := $name }}
- name: {{ $key }}
valueFrom:
secretKeyRef:
name: {{ $name }}
key: {{ $val }}
{{- end }}
{{- end }}
{{- end }}
и это называется в развертывании.ямл, как и следовало ожидать:
env:
{{- include "helpers.list-env-variables" . | indent 12 }}
Таким образом, обычные переменные среды добавляются просто отлично, но секретные-нет. В нем указывается, что secretKeyRef.name: значение как map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password]
вместо secret-key-ref
.
вывод отладки руля:
...
env:
- name: ENV_VAR_1
value: value
- name: ENV_VAR_2
value: otherValue
- name: ENV_VAR_PASSWORD
valueFrom:
secretKeyRef:
name: map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password]
key: password
- name: ENV_VAR_USERNAME
valueFrom:
secretKeyRef:
name: map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password]
key: username
- name: ENV_CONN_STRING
valueFrom:
secretKeyRef:
name: map[ENV_CONN_STRING:my_conn_string]
key: my_conn_string
У меня уже есть все эти секреты, загруженные в мой кластер K8s (они передаются нескольким микросервисам, поэтому мне не нужно добавлять новые секреты, что, похоже, хочет сделать шаблон Helm по умолчанию) — мне просто нужно ссылаться на существующие секреты.
Мое предположение здесь заключается в том, что в моей функции чего-то не хватает для получения значения элемента (например, «секретное местоположение»), я просто не могу понять, что это такое. Если есть другой способ, я могу структурировать свои ценности.yaml для достижения этой цели, я тоже готов к этому.
Ответ №1:
При получении секретных данных они также могут быть получены в виде ключа-val.
Попробуйте заменить _helpers.tpl следующим
{{/*
Add environment variables
*/}}
{{- define "helpers.list-env-variables" }}
{{- range $key, $val := .Values.env.normal }}
- name: {{ $key }}
value: {{ $val }}
{{- end }}
{{- range $k, $v := .Values.env.secret }}
{{- }}
{{- range $key, $val := $v }}
- name: {{ $key }}
valueFrom:
secretKeyRef:
name: {{ $k }}
key: {{ $val }}
{{- end }}
{{- end }}
{{- end }}
Комментарии:
1. Классно! Это было именно то, что мне было нужно. Совершенно ошеломленный тем, что я не хватал ключ из этого внешнего диапазона.