Nginx Ingress Helm Chart中ServiceAccount名称的计算逻辑解析
问题:Helm模板中
ingress-nginx.serviceAccountName如何解析ServiceAccount名称? 你查看的Ingress-Nginx Helm Chart的ServiceAccount模板代码如下:
{{- if or .Values.serviceAccount.create -}} apiVersion: v1 kind: ServiceAccount metadata: labels: {{- include "ingress-nginx.labels" . | nindent 4 }} app.kubernetes.io/component: controller {{- with .Values.controller.labels }} {{- toYaml . | nindent 4 }} {{- end }} name: {{ template "ingress-nginx.serviceAccountName" . }} namespace: {{ .Release.Namespace }} {{- if .Values.serviceAccount.annotations }} annotations: {{- toYaml .Values.serviceAccount.annotations | nindent 4 }} {{- end }} automountServiceAccountToken: {{ .Values.serviceAccount.automountServiceAccountToken }} {{- end }}
其中核心行是:
name: {{ template "ingress-nginx.serviceAccountName" . }}
解析逻辑说明
{{ template "ingress-nginx.serviceAccountName" . }} 是调用了Helm Chart中_helpers.tpl文件里的命名模板,这个模板的作用是生成ServiceAccount的名称,具体逻辑如下:
- 优先检查用户是否在
values.yaml中配置了.Values.serviceAccount.name,如果有自定义配置,直接使用该名称; - 如果没有自定义配置,就调用另一个命名模板
ingress-nginx.fullname生成默认名称,默认名称通常由Helm发布名称(.Release.Name)加上Chart名称(ingress-nginx)组合而成,格式类似{{ .Release.Name }}-ingress-nginx。
对应Ingress-Nginx Helm Chart 4.5.2版本,ingress-nginx.serviceAccountName的模板定义大致如下:
{{- define "ingress-nginx.serviceAccountName" -}} {{- if .Values.serviceAccount.name -}} {{- .Values.serviceAccount.name -}} {{- else -}} {{- include "ingress-nginx.fullname" . -}} {{- end -}} {{- end -}}
简单说,这个模板就是「用户自定义名称优先,无自定义则用发布名+Chart名的默认组合」的逻辑。
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

