将helm子图服务名称引用到位于父图表中的入口控制器中的最佳方法是什么
values.yaml
---
ingress:
paths:
- serviceName: app-1
path: /app-1/*
port: 8080
- serviceName: app-2
path: /app-2/*
port: 8080
ingress.yaml
---
{{- range .Values.ingress.paths }}
- path: {{ .path }}
backend:
{{- $subchart := .serviceName -}}
serviceName: {{- include "$subchart.fullname" .}}
servicePort: {{ .port }}
{{- end }}模板:没有与模板$subchart.fullname关联的模板gotpl
发布于 2018-03-07 16:27:13
以版本为作用域的硬编码子图表名称如何?
{{ .Release.Name }}-<subchart_name>
发布于 2020-05-15 17:34:35
我发现引用服务名称的最好方法是覆盖他们正在使用的模板。然而,这样做有一些警告。
对于子图表和图表,它们将具有不同的上下文,因此它们很可能会呈现模板differently
才能使用
大多数图表在其_helpers.tpl文件中都有一个类似于以下模板的模板。
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "newchart.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}子图表对您的图表具有不同的.Values。我们将在呈现此模板时修复此问题,方法是创建一个类似于子图表上下文的上下文。
我们没有使用.上下文调用它,而是通过用子图.Values替换.Values来创建一个新上下文。
{{ template "newchart.fullname" (set (deepCopy .) "Values" .Values.newchart }}我们使用deepCopy,这样我们实际上不会改变.上下文,而是创建一个新的上下文来使用。
子图表可以访问它自己的.Chart值,我们无法复制这些值。在这种情况下,我们必须将.Chart.Name的值硬编码到模板中。在这种情况下,我们可以将其替换为图表名称newchart。
一旦我们这样做了,子图表上的nameOverride和fullnameOverride都将工作,而您不必手动更改模板文件中的任何内容。
发布于 2021-10-22 06:37:35
helm 3.7版本已经解决了https://github.com/helm/helm/pull/9957的问题。
您可以像这样使用
{{ template "bar.fullname" .Subcharts.bar }}https://stackoverflow.com/questions/49142353
复制相似问题