访问Kubernetes前端服务出现Whitelabel Error Page 404该如何排查?
Kubernetes访问前端服务返回404白标错误排查步骤
这个报错是SpringBoot服务的默认错误页,说明你发出的请求没有打到预期的Nginx前端服务,大概率被路由到了后端Spring服务,可按以下顺序排查:
1. 验证集群内部前端服务可用性
先排除K8s内部服务配置错误:
- 执行
kubectl get svc确认前端服务的EXTERNAL-IP和你访问的公网IP一致 - 执行
kubectl describe svc <前端服务名称>检查Selector字段是否匹配前端Nginx Pod的标签,Port/TargetPort映射是否正确对应Nginx容器的监听端口(默认80) - 临时启动测试容器访问内部服务IP,验证返回内容:
如果返回内容还是404白标页,说明服务的Selector配置错误,请求被转发到了后端Pod;如果返回正常的Nginx页面,问题出在集群外部访问链路。kubectl run -it --rm --image=curlimages/curl curl-test -- curl http://<前端服务集群IP>
2. 排查Nginx前端Pod配置
如果内部访问前端服务也异常,检查Pod本身配置:
- 拉取Pod运行日志看是否有启动报错:
kubectl logs <前端Nginx Pod名称> - 进入Pod验证Nginx配置和静态文件是否存在:
kubectl exec -it <前端Nginx Pod名称> -- bash # 进入容器后执行以下检查 cat /etc/nginx/conf.d/default.conf ls <配置中root指定的静态文件目录> - 本地直接运行镜像验证可用性:
docker run -d -p 8080:80 stacksimplify/Kube-frontend-nginx:1.0.0,访问本地8080端口看是否能正常打开页面,排除镜像本身配置错误的问题。
3. 检查外部访问链路配置
如果内部访问正常,排查集群外部到内部的链路:
- 登录Azure控制台查看负载均衡器的后端池配置,确认是否绑定了前端服务对应的后端节点,没有错误绑定到后端服务的入口
- 如果使用了Ingress暴露服务,检查Ingress规则的path和host配置是否正确,有没有将前端路径的请求错误转发到后端服务。
4. 验证前后端路由规则
如果访问特定路径才出现404,检查路由配置:
- 查看Nginx配置中的反向代理规则,是否将静态资源请求也错误转发到了后端服务
- 如果前端是SPA单页应用,确认Nginx是否配置了
try_files $uri $uri/ /index.html;规则,否则直接访问前端路由路径会返回404。
内容的提问来源于stack exchange,提问作者Hvaandres
相关产品推荐
相关产品推荐

