有没有办法让 Helm 中的子图表中的 randAlphaNum 值保持一致?

usb*_*ter 7 kubernetes-helm

我有一个主图表,可以在 _helpers.ptl 中生成随机密码。这个随机密码需要被多个子chart(db和app)使用。

在主图表的_helpers.ptl中:

{{/* Generate db credentials */}}
{{- define "test.dbCredentials" -}}
dbUser: {{ randAlphaNum 16 | quote }}
dbPass: {{ randAlphaNum 32 | quote }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

主图表的configmap.yml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  {{- include "test.dbCredentials" . | nindent 2 }}
Run Code Online (Sandbox Code Playgroud)

子图的configmap.yml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  {{- include "test.dbCredentials" . | nindent 2 }}
Run Code Online (Sandbox Code Playgroud)

当我调试这个时,主图和子图的凭据是不同的。有没有办法在主图中生成随机值,并将精确值传递给几个子图?

小智 0

我需要做一些非常类似的事情:生成一个随机密码,然后将其存储为秘密,但同时使用 bcrypt 对其进行哈希处理以进行部署本身。在尝试了所有方法(包括此处此处描述的所有解决方案)之后,我发现实现此工作的唯一方法是使用单个文件。就我而言,我必须在同一个图表中创建密码、哈希、秘密和部署。这是我如何做到这一点的示例摘录:

{{- $adminPassword := randAlphaNum 42 -}}

# This secret is used to store the user credentials generated.
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"
                  image: "{{ .Values.image.name }}"
                  env:
                      # Full admin user.  
                      - name: USERS_ADMIN_USERNAME
                        value: {{ .Values.authentication.users.adminUsername  | quote}}
                      - name: USERS_ADMIN_PASSWORD
                        value: {{(htpasswd "BCRYPT" $adminPassword )  | quote }}
Run Code Online (Sandbox Code Playgroud)