掌舵获取子图服务名称

时间:2018-03-07 00:44:29

标签: kubernetes yaml kubernetes-helm

最好的方法是让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"

4 个答案:

答案 0 :(得分:3)

如何通过发布确定硬编码的子图名称?

{{ .Release.Name }}-<subchart_name>

答案 1 :(得分:1)

我发现引用服务名称的最佳方法是覆盖他们使用的模板。但是,有一些注意事项。

  1. 子图和您的图表将具有不同的上下文,因此它们很有可能以不同的方式呈现模板
  2. 有些东西只能在子图中使用

大多数图表的_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

完成此操作后,子图表上的nameOverridefullnameOverride都可以工作,而无需手动更改模板文件中的任何内容。

答案 2 :(得分:0)

这取决于子图的定义!

例如,elasticsearch图表(请参见此处https://github.com/elastic/helm-charts/blob/master/elasticsearch/templates/service.yaml)定义了2个服务。

两个服务名称都可以声明为值clusterName

答案 3 :(得分:0)

如果子图表使用 fullname 中的 _helpers.tpl 函数(默认情况下由 helm 为新图表提供),您可以使用它(将 postgresql 替换为子图表的名称):< /p>

{{- $fullName := include "postgresql.fullname" (mustMerge (dict "Chart" (dict "Name" "postgresql") "Values" .Values.postgresql) (deepCopy .)) -}}