GKE负载均衡器外部IP访问提示Connection Refused问题排查求助
GKE部署GPU应用后LoadBalancer访问出现Connection Refused的排查方案
一、检查Pod运行状态与容器端口监听
- 确认Pod状态:执行
kubectl get pods,查看Pod是否处于Running状态。若为Pending,需排查节点资源是否充足(Spot节点可能因资源紧张无法调度)或GPU驱动配置是否正常。 - 验证容器端口监听:执行
kubectl exec -it <pod-name> -- bash进入Pod,再用netstat -tulpn或ss -tulpn检查7860端口是否被进程监听。若未监听,说明应用未成功启动,或启动时仅绑定127.0.0.1(需改为0.0.0.0才能对外提供服务)。 - 查看Pod启动日志:执行
kubectl logs <pod-name>,排查应用启动时是否有GPU依赖缺失、配置错误等报错信息。
二、验证Service与Pod的关联有效性
- 检查Service的Endpoints:执行
kubectl describe svc app-service,查看Endpoints字段是否包含Pod的IP与7860端口。若为空,需确认Service的selector标签与Pod的metadata.labels是否完全匹配(你的配置中标签一致,仍需手动确认)。 - 直接访问Pod IP测试:通过
kubectl get pods -o wide获取Pod IP,在集群内其他Pod或节点执行curl <pod-ip>:7860。若能访问,说明Pod本身正常,问题出在Service或LoadBalancer层面;若仍无法访问,回到第一步排查Pod内部问题。
三、检查GKE LoadBalancer与网络规则
- 确认LoadBalancer状态:执行
kubectl get svc app-service,查看EXTERNAL-IP是否已分配(非<pending>)、STATUS是否为Ready。 - 验证GCP防火墙规则:登录GCP控制台进入「VPC网络->防火墙」,确认存在允许80端口入站的规则(目标标签为集群节点标签,来源为
0.0.0.0/0)。若缺失,需手动创建该规则。 - 排查NetworkPolicy限制:若集群启用了NetworkPolicy,需确认存在允许Service访问Pod的规则,避免流量被拦截。
四、容器镜像与YAML配置检查
- 确认应用端口暴露配置:确保镜像内的应用确实监听7860端口,且启动参数未限制仅本地访问。
- 修正Deployment的YAML缩进问题:你的配置中
ports字段缩进比同级的image、env多一个空格,YAML对缩进敏感,可能导致端口配置未被识别。修正后的配置片段如下:
修正后执行containers: - name: sd image: $IMAGE ports: - containerPort: 7860 env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64kubectl apply -f app-deployment.yaml --force重新部署。 - 验证GPU资源识别:执行
kubectl exec -it <pod-name> -- nvidia-smi,检查GPU是否被正常识别。若命令报错,说明节点GPU驱动未正确安装,需确认集群创建时已配置GPU节点池的驱动安装,或启用NVIDIA GPU Operator。
五、检查LoadBalancer健康检查状态
GKE的LoadBalancer会自动配置针对targetPort(7860)的健康检查。若应用未提供健康检查端点,可能导致健康检查失败,LoadBalancer停止转发流量。可登录GCP控制台的负载均衡器页面,查看健康检查状态是否正常。若失败,需在应用中添加健康检查接口(如/healthz),或修改Service的健康检查配置。
内容的提问来源于stack exchange,提问作者Sunatte
相关产品推荐
相关产品推荐

