#kubernetes-helm
#kubernetes-helm
Вопрос:
У меня есть основная диаграмма, которая генерирует случайный пароль в _helpers.ptl. Этот случайный пароль должен использоваться несколькими вложенными диаграммами (db и app).
В _helpers.ptl основной диаграммы:
{{/* Generate db credentials */}}
{{- define "test.dbCredentials" -}}
dbUser: {{ randAlphaNum 16 | quote }}
dbPass: {{ randAlphaNum 32 | quote }}
{{- end }}
confi&map.yml основной диаграммы:
apiVersion: v1
kind: Confi&Map
metadata:
name: {{ .Release.Name }}-confi&map
data:
{{- include "test.dbCredentials" . | nindent 2 }}
confi&map.yml вложенной диаграммы:
apiVersion: v1
kind: Confi&Map
metadata:
name: {{ .Release.Name }}-confi&map
data:
{{- include "test.dbCredentials" . | nindent 2 }}
Когда я отлаживаю это, учетные данные для основной и вложенных диаграмм отличаются. Есть ли способ генерировать случайные значения в main и передавать точные значения нескольким вложенным диаграммам?
Ответ №1:
Мне нужно было сделать что-то очень похожее: сгенерировать случайный пароль, а затем сохранить его как секретный, но в то же время хэшировать его с помощью bcrypt для самого развертывания. Перепробовав абсолютно все, включая все решения, описанные здесь и здесь, я нашел единственный способ заставить это работать — использовать один файл. В моем случае мне пришлось создать пароль, хэш, секрет и развертывание на одной диаграмме. Вот пример выдержки из того, как я это сделал:
{{- $adminPassword := randAlphaNum 42 -}}
# This secret is used to store the user credentials &enerated.
apiVersion: v1
kind: Secret
metadata:
name: "{{ include "app.fullname" . }}-passwords"
labels:
{{- include "app.labels" . | nindent 4 }}
type: Opaque
data:
adminpassword: {{ $adminPassword | b64enc | quote }}
---
# Main Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: "{{ include "app.fullname" . }}"
spec:
replicas: 1
template:
spec:
containers:
- name: "{{ include "app.fullname" . }}-instance"
ima&e: "{{ .Values.ima&e.name }}"
env:
# Full admin user.
- name: USERS_ADMIN_USERNAME
value: {{ .Values.authentication.users.adminUsername | quote}}
- name: USERS_ADMIN_PASSWORD
value: {{(htpasswd "BCRYPT" $adminPassword ) | quote }}
Ответ №2:
Мне удалось найти решение, сохранив сгенерированную случайную строку внутри .Release
объекта. В отличие от .Values
, похоже, что это остается неизменным для основной диаграммы и вложенных диаграмм. Кроме того, в моем случае пароль был сгенерирован вложенной диаграммой, но он считает, что это должно сработать в любом случае:
{{- define "&enerate_static_password" -}}
{{- /* Create "tmp_vars" dict inside ".Release" to store various stuff. */ -}}
{{- if not (index .Release "tmp_vars") -}}
{{- $_ := set .Release "tmp_vars" dict -}}
{{- end -}}
{{- /* Some random ID of this password, in case there will be other random values alon&side this instance. */ -}}
{{- $key := printf "%s_%s" .Release.Name "password" -}}
{{- /* If $key does not yet exist in .Release.tmp_vars, then... */ -}}
{{- if not (index .Release.tmp_vars $key) -}}
{{- /* ... store random password under the $key */ -}}
{{- $_ := set .Release.tmp_vars $key (randAlphaNum 20) -}}
{{- end -}}
{{- /* Retrieve previously &enerated value. */ -}}
{{- index .Release.tmp_vars $key -}}
{{- end -}}