Azure Kubernetes集群中Ingress-Nginx始终返回404页面求助
问题分析与解决建议
以下是可能导致/api/users/路径返回404的常见原因及排查方案:
1. 路径转发与后端服务路由不匹配
你的Ingress配置使用Prefix匹配规则,会将完整请求路径(比如/api/users/currentuser/)直接转发给be-auth-srv服务。如果后端服务的路由规则是监听/currentuser/而非/api/users/currentuser/,就会返回404。
解决方法:添加路径重写注解,剥离前缀路径后转发给后端:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-service annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: rules: - host: www.example.com http: paths: - path: /api/users(/|$)(.*) pathType: ImplementationSpecific backend: service: name: be-auth-srv port: number: 9001 - path: /auth(/|$)(.*) pathType: ImplementationSpecific backend: service: name: be-contact-form-srv port: number: 9000
通过正则捕获组将/api/users/currentuser/重写为/currentuser/后转发,同时将pathType改为ImplementationSpecific(结合正则重写时,Prefix规则可能不符合预期)。
2. 后端服务或Pod未正常运行
检查be-auth-srv服务是否有可用的后端Pod:
- 查看服务端点状态:
kubectl get endpoints be-auth-srv
如果ENDPOINTS列为空,说明没有Pod关联到该服务,或Pod未就绪。
- 检查Pod状态:
kubectl get pods -l <be-auth-srv对应的Pod标签>
确认Pod处于Running状态,且就绪探针检测通过。
3. Ingress Controller配置冲突或路径匹配异常
- 检查是否存在其他Ingress资源匹配同一个
host路径,导致请求被错误路由:
kubectl get ingress
- 查看Ingress Controller生成的实际Nginx配置,确认路径规则是否符合预期:
kubectl exec -n <ingress-controller命名空间> <ingress-controller-pod名称> -- cat /etc/nginx/nginx.conf | grep -A 10 -B 5 "/api/users"
4. 后端服务端口或路由配置错误
确认be-auth-srv服务暴露的端口9001正确,后端应用确实在监听该端口,且应用内部的路由规则已正确配置对应路径。
内容的提问来源于stack exchange,提问作者Manel
相关产品推荐
相关产品推荐

