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"


person doe1331    schedule 07.03.2018    source источник


Ответы (4)


Как насчет жестко запрограммированного имени поддиаграммы, ограниченного выпуском?

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

person Radek 'Goblin' Pieczonka    schedule 07.03.2018
comment
Это не сработает, если длина имени превышает X. Потому что большинство диаграмм получают имя от функции-шаблона, которая усекает собранное имя. - person beatrice; 06.05.2020

Я обнаружил, что лучший способ сослаться на имя службы - это переопределить шаблон, который они используют. Однако при этом есть некоторые предостережения.

  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.

Как только мы это сделаем, и nameOverride, и fullnameOverride на подграфике будут работать без необходимости вручную изменять что-либо в файлах шаблонов.

person Kristinn Björgvin Árdal    schedule 15.05.2020

Это зависит от определения поддиаграммы!

В качестве примера elasticsearch диаграммы см. Здесь https://github.com/elastic/helm-charts/blob/master/elasticsearch/templates/service.yaml определяет 2 службы.

Имя обоих сервисов может быть объявлено как значение clusterName.

person Thomas Decaux    schedule 10.10.2019

Если во вложенной диаграмме используется функция fullname из _helpers.tpl (предоставляется helm по умолчанию для новых диаграмм), вы можете использовать это (замените postgresql именем вложенной диаграммы):

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