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

Nginx Ingress同域名下多个Ingress的server-snippet注解无法合并问题问询

问题结论

NGINX Ingress Controller 原生默认不支持同一主机(host)下多个Ingress资源的nginx.ingress.kubernetes.io/server-snippet注解合并。
该限制是控制器的默认设计:server-snippet配置会直接注入到对应域名的Nginx server 块顶层,控制器未提供多段配置的冲突校验和自动合并逻辑,为了避免配置覆盖、语法错误等问题,单个域名下仅第一个被处理的Ingress的server-snippet会生效,后续同域名Ingress的该注解会被跳过,同时抛出你看到的报错日志。

可行解决方案

方案1:合并到单个Ingress资源

如果两个Ingress绑定的是同一个域名,直接将所有路径规则和snippet配置合并到同一个Ingress资源中即可,示例配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/server-snippet: |
      location ~* "^/service1/endpoint(/|$)(.*)" { 
        deny all; 
        return 403; 
      }
      location ~* "^/service2/endpoint(/|$)(.*)" { 
        deny all; 
        return 403; 
      }
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
  name: merged-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          service: 
            name: service1
            port:
              number: 80
        path: /service1/endpoint(/|$)(.*)
        pathType: ImplementationSpecific
      - backend:
          service: 
            name: service2
            port:
              number: 80
        path: /service2/endpoint(/|$)(.*)
        pathType: ImplementationSpecific

方案2:改用configuration-snippet注解

如果需要拆分多个Ingress资源管理不同路径,可替换使用nginx.ingress.kubernetes.io/configuration-snippet注解:该注解的配置会注入到当前Ingress对应路径的location块内,不同Ingress的配置互相独立,不会产生冲突。
你的场景中无需在snippet中额外声明location块,直接写访问控制规则即可,示例Ingress1配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      deny all;
      return 403;
  name: Ingress1
spec:
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          service: 
            name: service1
            port:
              number: 80
        path: /service1/endpoint(/|$)(.*)
        pathType: ImplementationSpecific

Ingress2对应调整即可,两个资源可同时正常生效。

内容的提问来源于stack exchange,提问作者Avanth Aditya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:45:05