You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:16:16