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

Kubernetes Ingress Nginx无法转发请求至Service,访问products.com出现404

问题分析与解决方案

问题原因

你的Ingress配置仅定义了products.com/list路径的转发规则,当访问根路径products.com/时,没有对应的Ingress规则匹配,Nginx Ingress Controller无法找到后端服务,因此返回404错误。

解决方案

根据你的需求选择对应方案:

方案1:将根路径也转发到products-srv服务

修改Ingress配置,添加根路径的规则:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-srv
spec:
  ingressClassName: nginx
  rules:
    - host: products.com
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              service:
                name: products-srv
                port: 
                  number: 4000
          - path: /list
            pathType: ImplementationSpecific
            backend:
              service:
                name: products-srv
                port: 
                  number: 4000

或者更简洁的方式(如果服务支持前缀匹配):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-srv
spec:
  ingressClassName: nginx
  rules:
    - host: products.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: products-srv
                port: 
                  number: 4000

说明:pathType: Prefix会匹配所有以/开头的路径,包含/list,无需单独配置/list规则。

方案2:配置默认后端处理根路径404

如果根路径不需要转发到业务服务,可添加默认后端避免404:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-srv
spec:
  ingressClassName: nginx
  defaultBackend:
    service:
      name: default-http-backend  # 需提前创建该默认服务(如基于nginx镜像的ClusterIP服务)
      port:
        number: 80
  rules:
    - host: products.com
      http:
        paths:
          - path: /list
            pathType: ImplementationSpecific
            backend:
              service:
                name: products-srv
                port: 
                  number: 4000

额外检查项

  • 确认Nginx Ingress Controller Pod运行正常:
    kubectl get pods -n ingress-nginx
    
  • 确认Ingress资源已正确关联Controller:
    kubectl describe ingress ingress-srv
    
  • 确认Ingress Controller服务已正确暴露(如NodePort需对应端口访问,或已做本地端口转发到80端口):
    kubectl get svc -n ingress-nginx
    

内容的提问来源于stack exchange,提问作者S Ahmed Naim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:27:10