Kubernetes 掌舵人获得分包服务名称
让helm subchart服务名称引用到位于父图表中的我的入口控制器中的最佳方法是什么Kubernetes 掌舵人获得分包服务名称,kubernetes,yaml,kubernetes-helm,Kubernetes,Yaml,Kubernetes Helm,让helm subchart服务名称引用到位于父图表中的我的入口控制器中的最佳方法是什么 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
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 }}
模板:没有与模板“gotpl”关联的模板“$subchart.fullname”按版本范围硬编码的subchart名称如何
{{.Release.Name}-
这取决于子图表的定义
例如,elasticsearch
chart(参见此处)定义了2个服务
两个服务名称都可以声明为value
clusterName
我发现引用服务名称的最佳方法是重写它们正在使用的模板。然而,这样做有一些警告
{{/*
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 }}
子图表与图表具有不同的。值。当我们通过创建一个类似于subcharts上下文的上下文来呈现这个模板时,我们将修复这个问题
我们不使用
上下文调用它,而是通过将.Values
替换为subcharts.Values
来创建一个新上下文
{{ template "newchart.fullname" (set (deepCopy .) "Values" .Values.newchart }}
我们使用deepCopy,这样我们就不会实际更改
上下文,而是创建一个新的上下文来使用
子图表有权访问自己的.Chart
值,我们无法复制这些值。在这种情况下,我们必须将.Chart.Name
的值硬编码到模板中。在这种情况下,我们可以将其替换为图表名称newchart
完成此操作后,子图表上的nameOverride
和fullnameOverride
都将正常工作,而无需手动更改模板文件中的任何内容。如果子图表使用\u helpers.tpl中的fullname
功能,则可以使用此功能(将postgresql
替换为子图表的名称):
当名称长度超过X时,它将失败。因为大多数图表都是从模板函数中获取名称的,模板函数会截断集合的名称。
{{- $fullName := include "postgresql.fullname" (mustMerge (dict "Chart" (dict "Name" "postgresql") "Values" .Values.postgresql) (deepCopy .)) -}}