通过浏览器访问Kubernetes Pod内运行的应用失败该如何解决?
Kubernetes NodePort访问异常排查步骤
- 第一步:确认Pod运行状态与端口监听配置
执行kubectl get pods app-pod6确认Pod处于Running状态,无异常重启记录;执行kubectl logs app-pod6查看应用运行日志是否存在报错。
进一步进入Pod内部执行ss -tunlp | grep 3000,确认3000端口绑定的地址是0.0.0.0而非127.0.0.1,如果绑定的是本地回环地址,外部请求无法进入容器,需要修改应用启动配置调整监听地址。 - 第二步:验证Service配置与集群内转发可用性
执行kubectl get endpoints app-svc6确认ENDPOINTS字段已正确关联Pod的IP和3000端口,若ENDPOINTS为空说明Service未正确匹配Pod。
先在Kubernetes节点本地执行curl 127.0.0.1:31974/app/home验证是否能正常返回结果:- 如果本地访问正常,说明问题出在节点外部访问的网络限制上
- 如果本地访问也失败,执行
curl [Service的ClusterIP]:3000/app/home验证ClusterIP是否能正常访问,排查Service到Pod的转发链路
- 第三步:检查节点端口访问限制
先确认节点防火墙是否放开NodePort端口:- 若节点使用firewalld,执行
firewall-cmd --add-port=31974/tcp --permanent && firewall-cmd --reload开放端口 - 若节点使用ufw,执行
ufw allow 31974/tcp开放端口
同时确认如果是云环境部署,云服务器的安全组规则也需要放开31974/tcp端口的入方向访问。可临时关闭selinux验证是否为selinux限制:setenforce 0。
- 若节点使用firewalld,执行
- 第四步:验证kube-proxy运行状态
执行kubectl get pods -n kube-system | grep kube-proxy确认对应节点的kube-proxy Pod处于Running状态,执行kubectl logs -n kube-system [kube-proxy的Pod名称]查看是否有转发规则配置报错,kube-proxy负责维护NodePort的iptables/ipvs转发规则,异常会导致端口不通。 - 额外注意事项:访问时需要携带完整路径
192.168.102.128:31974/app/home,不要直接访问根路径,避免应用未配置根路径路由导致的404错误。
内容的提问来源于stack exchange,提问作者Azkaban
相关产品推荐
相关产品推荐

