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
相关产品推荐
相关产品推荐

