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

基于路径通过Nginx Ingress路由至K8s服务的问题排查

问题分析与解决方案

你的判断是对的:当访问/test时,Nginx Ingress默认会把完整路径/test转发给httpd容器,而httpd的默认页面仅存在于根路径/下,因此返回404错误。你尝试的rewrite规则未生效,核心问题有两个:

  • pathType与正则路径不兼容:你使用了正则格式的path,但指定了pathType: Prefix——这个类型是为前缀匹配设计的,和正则匹配逻辑冲突,导致rewrite规则未被正确应用。
  • 正则分组与rewrite目标不匹配:你编写的/test(/|$)(.*)正则中,$2对应第二个分组(.*),但访问/test时该分组为空;若访问/test/xxx,$2为xxx,但httpd本身没有对应路径,仍会返回404。

修复后的Ingress配置

调整pathType并简化rewrite规则,让/和/test路径均能返回"It works!":

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-server-ingress
  namespace: web
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: somehost.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-server-service
            port:
              number: 5000
      - path: /test(/.*)?
        pathType: ImplementationSpecific
        backend:
          service:
            name: web-server-service
            port:
              number: 5000

配置说明

  • pathType: ImplementationSpecific:让Nginx Ingress控制器按照自身逻辑处理路径匹配,兼容正则表达式。
  • path: /test(/.*)?:匹配/test及所有以/test/开头的路径。
  • rewrite-target: /:直接将所有匹配路径重写为httpd的根路径,确保返回默认的"It works!"页面。

内容的提问来源于stack exchange,提问作者Gene Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:57:35