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

通过Ingress暴露服务时返回404 Not Found错误如何解决?

问题原因及排查方案

  • 第一类通用配置问题(占90%以上概率)
    你当前的Ingress配置为/前缀匹配,默认Nginx Ingress等主流Ingress Controller不会自动截断转发路径,也就是说你访问www.example.com/example-api时,转发到后端服务的请求路径依然是/example-api,如果你的后端Web服务没有对应/example-api的路由,就会直接返回404。
    验证方式:直接在集群内部访问后端Pod的3000端口+/example-api路径,如果返回404,就属于这个问题。
    解决方案:如果后端服务的接口都是根路径路由,需要给Ingress添加路径重写注解,以Nginx Ingress为例,修改后的Ingress配置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    # 开启路径重写,将匹配到的路径后半部分转发到后端
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  tls:
  - hosts:
    - www.example.com
    secretName: example-tls
  rules:
  - host: www.example.com
    http:
      paths:
      - path: /(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: example-service
            port:
              number: 3000

如果只需要匹配/example-api前缀的请求,可以把path改为/example-api(/|$)(.*)即可。

  • 第二类hostNetwork场景特有问题
    如果上述配置修改后还是404,按以下步骤排查:
  1. 确认你的后端Pod(配置了hostNetwork: true)的服务是监听0.0.0.0:3000而非127.0.0.1:3000,后者只能接收节点本地的请求,无法接收集群内部转发的流量
  2. 确认Pod所在节点的3000端口没有被其他进程占用,hostNetwork模式下端口是直接占用节点主机端口,冲突会导致服务无法正常监听
  3. 检查Ingress Controller如果也使用了hostNetwork模式,确认你访问的www.example.com已经正确解析到Ingress Controller所在节点的IP,没有解析错误
  4. 先跳过Ingress,直接在集群内部访问example-service:3000/example-api验证Service转发是否正常,如果这一步就返回404,说明问题出在Service或后端Pod,和Ingress无关

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:12:02