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

Kubernetes NGINX Ingress需添加通配规则才路由流量的原因排查

Kubernetes NGINX Ingress 路由异常排查解析

我在部署了NGINX Ingress控制器的Kubernetes集群(版本v1.29.2)中,配置了Ingress资源,意图基于特定主机名将流量路由至对应ClusterIP服务(service1、service2均监听80端口),且已正确配置host1.example.com和host2.example.com的DNS记录。初始Ingress配置如下:

kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: my-ingress
  namespace: my-namespace
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    cert-manager.io/cluster-issuer: letsencrypt-production
spec:
  ingressClassName: nginx
  rules:
    - host: host1.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service1
                port:
                  number: 80
    - host: host2.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service2
                port:
                  number: 80
  tls:
    - hosts:
        - host1.example.com
        - host2.example.com
      secretName: tls-cert

但该配置无法正确路由流量。排查后添加了一条未指定主机的通配规则:

- http:
    paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service2
            port:
              number: 80

添加后,指定主机及所有其他流量的路由均恢复正常。针对该现象,有两个疑问:

  1. 为何添加这条通配规则能解决问题?
  2. 原本的特定主机规则为何无法独立实现流量路由?

问题解答

1. 通配规则解决问题的原因

添加无主机的通配规则后,从两方面修复了路由异常:

  • 兜底覆盖异常请求:该规则会让NGINX Ingress生成默认的catch-all路由,承接所有Host头不匹配指定规则的流量(包括Host头为空、格式错误的异常请求),避免了因无匹配路由直接返回404的情况。
  • 修正rewrite注解的配置错误:初始配置全局设置的rewrite-target: /$2依赖路径中的第二个正则捕获组,但实际path仅为/(无任何捕获组),导致NGINX配置中的$2变量未定义,重写逻辑出现异常。添加通配规则后,控制器重新生成的NGINX配置结构发生变化,原有带主机规则的rewrite逻辑被重新解析,间接修正了无效变量引发的路由错误。

2. 原特定主机规则失效的核心原因

原配置无法独立工作的关键问题出在rewrite-target注解的错误配置:

  • 你设置的rewrite-target: /$2需要路径中包含至少两个正则捕获组(比如(/|$)(.*)),但实际path仅为/(pathType为Prefix),没有定义任何捕获组,导致NGINX处理请求时$2变量不存在,重写后的路径逻辑异常(比如隐式重定向或无效路径)。
  • 当Ingress中只有带主机的规则时,NGINX控制器生成的server块会严格应用这个错误的rewrite规则,所有匹配该主机的请求都会被错误处理,最终无法正确路由到后端服务。

内容的提问来源于stack exchange,提问作者Adarsh Kumar Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:33:21