Ingress默认后端不生效,未定义路径被误转发至main-svc求助
问题原因
你的Ingress规则里,根路径path: "/"使用了pathType: Prefix,而Prefix类型的匹配逻辑是只要请求路径以指定前缀开头就会匹配。所有未定义的路径(比如/blogs、/abcd)都以"/"开头,所以会被这条规则优先匹配,直接转发到main-svc,根本不会触发默认后端的逻辑。
另外,你配置的nginx.ingress.kubernetes.io/rewrite-target: /$1在根路径规则下没有实际作用,因为path: "/"没有捕获组,$1是空值,会重写为"/",但这不是核心问题。
修复方案
可以通过以下方式解决:
方案1:将根路径改为Exact匹配
把根路径的pathType改成Exact,这样只有请求路径严格等于"/"的时候才会匹配main-svc,其他未匹配的路径会触发默认后端转发到error-svc。同时建议把同一个host的规则合并到一个rules条目下,这是更规范的写法:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-demo annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: ingressClassName: nginx rules: - host: "demoapp.com" http: paths: - pathType: Exact path: "/" backend: service: name: main-svc port: number: 80 - path: "/photo" pathType: Prefix backend: service: name: photo-svc port: number: 80 - path: "/video" pathType: Prefix backend: service: name: video-svc port: number: 80
验证步骤
修改Ingress规则后,执行以下命令更新配置:
kubectl apply -f your-ingress-file.yaml
等待Ingress Controller同步规则后,测试各路径:
- 访问
demoapp.com→ 转发至main-svc - 访问
demoapp.com/photo→ 转发至photo-svc - 访问
demoapp.com/blogs或其他未定义路径 → 转发至error-svc
内容的提问来源于stack exchange,提问作者hello_ubuntu
相关产品推荐
相关产品推荐

