如何在Helm中合并Ingress注释中的配置片段?
合并Helm子Chart中Ingress的Configuration-Snippet注释块
要实现将global.ingress.annotations和ingress.annotations中的nginx.ingress.kubernetes.io/configuration-snippet合并,核心是在Helm模板中读取两处配置并拼接,以下是具体实现步骤:
1. 读取并准备配置内容
在ingress.yaml模板中,先获取全局和本地的annotations配置,以及各自的snippet内容:
{{- /* 读取全局和本地的annotations,默认空字典避免空值错误 */}} {{- $globalAnnotations := .Values.global.ingress.annotations | default dict }} {{- $localAnnotations := .Values.ingress.annotations | default dict }} {{- /* 提取两处的configuration-snippet内容,默认空字符串 */}} {{- $globalSnippet := index $globalAnnotations "nginx.ingress.kubernetes.io/configuration-snippet" | default "" }} {{- $localSnippet := index $localAnnotations "nginx.ingress.kubernetes.io/configuration-snippet" | default "" }}
2. 合并Snippet内容
将两处snippet拼接后去除首尾多余空行,避免生成无效的空行:
{{- $mergedSnippet := printf "%s\n%s" $globalSnippet $localSnippet | trim }}
3. 合并Annotations并替换Snippet
先合并全局和本地的annotations(本地配置会覆盖全局同名键,符合Helm常规逻辑),再将合并后的snippet替换到annotations中:
{{- $mergedAnnotations := merge $globalAnnotations $localAnnotations }} {{- if $mergedSnippet }} {{- $_ := set $mergedAnnotations "nginx.ingress.kubernetes.io/configuration-snippet" $mergedSnippet }} {{- end }}
4. 输出最终Annotations
遍历合并后的annotations,针对snippet做特殊的多行格式处理,其他annotations正常输出:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress annotations: {{- range $key, $value := $mergedAnnotations }} {{- if eq $key "nginx.ingress.kubernetes.io/configuration-snippet" }} {{ $key }}: | {{ $value | nindent 6 }} {{- else }} {{ $key }}: {{ $value | quote }} {{- end }} {{- end }} spec: # 此处保留你的Ingress规则等原有配置
这样生成的Ingress资源中,configuration-snippet会包含两处配置的所有内容,同时保留其他annotations的配置。
内容的提问来源于stack exchange,提问作者jsalvas
相关产品推荐
相关产品推荐

