Kubernetes LoadBalancer服务ExternalIP pending或无法访问求助
看起来你已经完成了服务暴露和手动指定ExternalIP的操作,但访问时遇到了卡点,我来帮你一步步拆解排查可能的原因:
1. 先确认后端Pod状态正常
首先得保证你的hotspot-deployment对应的Pod是健康运行的,没有启动失败或异常重启的情况:
kubectl get pods -l app=hotspot-deployment # 注意这里的标签要和你的Deployment selector保持一致
如果Pod状态不是Running,立刻查看Pod日志定位启动问题:
kubectl logs <你的Pod名称>
2. 检查Service与Pod的关联是否生效
Service是通过标签选择器匹配Pod的,如果两者标签不匹配,哪怕绑定了ExternalIP,流量也无法转发到后端。查看Service详情,重点关注Endpoints字段:
kubectl describe svc hotspot-deployment
如果Endpoints为空,说明你的Service的selector和Deployment的labels不匹配,需要调整两者标签保持一致。
3. 验证NodePort本身是否可访问
你的Service的NodePort是31354,先绕开ExternalIP,直接通过Minikube节点IP访问NodePort,确认服务本身是可用的:
curl $(minikube ip):31354
如果这个访问也失败,说明问题出在服务本身或Pod到Service的转发环节,而非ExternalIP配置。
4. 确认手动指定的IP与Minikube节点的关联
你手动指定的192.168.98.103需要是Minikube节点实际拥有的IP,或是本地网络能路由到Minikube节点的IP。先确认Minikube节点的真实IP:
minikube ip
如果192.168.98.103不是Minikube节点的IP,要么调整网络环境让这个IP能路由到Minikube节点,要么换成Minikube节点的实际IP再尝试。
5. 排查防火墙与内部网络策略
- 本地机器的防火墙可能拦截了对
192.168.98.103:8080的访问,可以临时关闭防火墙测试,或添加允许该端口的规则。 - Minikube内部如果配置了
NetworkPolicy,可能会阻止外部流量访问Service,检查是否存在相关策略:
kubectl get networkpolicy
如果有,确认它是否允许外部流量访问你的Service。
6. 重启minikube tunnel重试
哪怕之前没报错,有时候tunnel可能没正确处理手动指定的ExternalIP,尝试清理并重启:
minikube tunnel --cleanup minikube tunnel
保持tunnel运行的状态下,再次访问http://192.168.98.103:8080试试。
内容的提问来源于stack exchange,提问作者PRERNA AGARWAL

