K8s中通过Ingress访问返回404,请求排查方向
Ingress访问404且请求未转发的排查方向
1. 本地DNS解析与访问链路验证
- 确认域名解析结果:执行
nslookup demo.localdev.me或ping demo.localdev.me,检查解析IP是否指向Ingress Controller的服务IP(集群节点IP、Ingress Controller的LoadBalancer/NodePort对应IP)。如果解析到127.0.0.1但Ingress Controller不在本机,需调整本地hosts或DNS配置。 - 用
curl -v http://demo.localdev.me查看响应头,通过Server字段判断404来源:若为本地服务(如Apache/Nginx),说明请求未到达集群Ingress;若为Ingress Controller标识(如nginx),则Ingress已收到请求但路由配置有误。
2. Ingress Controller状态检查
- 确认Controller Pod运行状态:执行
kubectl get pods -n <ingress-controller-namespace>(比如ingress-nginx),检查Pod是否处于Running状态,无重启或崩溃记录。 - 查看Controller日志排查异常:
kubectl logs <ingress-pod-name> -n <ingress-controller-namespace>,检查是否存在配置加载失败、权限不足或后端服务访问错误的日志。 - 验证Controller服务端口:执行
kubectl get svc -n <ingress-controller-namespace>,若为NodePort类型,尝试访问http://demo.localdev.me:<node-port>,排除端口映射问题。
3. Ingress资源配置校验
- 查看Ingress绑定状态:
kubectl get ingress,检查ADDRESS列是否有有效值,为空则说明Ingress Controller未识别该Ingress(大概率是ingressClassName不匹配,比如Controller用nginx但Ingress资源未指定或指定错误)。 - 详细检查Ingress规则:
kubectl describe ingress example-ingress,确认:Host字段严格匹配demo.localdev.me- Path规则正确(比如根路径
/的pathType为Prefix或Exact,按需设置) - 关联的Service名称、命名空间、端口完全正确
- 验证Service转发能力:执行
kubectl exec -it <任意集群内Pod> -- curl <service-name>.<namespace>.svc.cluster.local,确认后端Service可正常返回内容。
4. 本地端口与网络冲突排查
- 检查本地80端口占用情况:Linux用
netstat -tulpn | grep :80,Windows用netstat -ano | findstr ":80",若有本地服务(如Apache、Nginx)占用80,请求会被本地服务处理返回404,需停止本地服务或调整Ingress Controller的端口映射。 - 验证集群内部网络连通性:执行
kubectl exec -it <ingress-pod-name> -n <ingress-controller-namespace> -- curl <service-name>.<namespace>.svc.cluster.local,若无法访问,排查集群网络插件(如Calico、Flannel)的运行状态。
5. 缓存与客户端问题
- 清除浏览器缓存或使用隐私模式访问,避免旧DNS缓存或页面缓存导致的异常。
- 换用curl、Postman等不同客户端测试,排除浏览器自身问题。
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

