在谷歌云部署Nginx服务时遭遇Connection Refused错误
排查GKE中Nginx服务Connection Refused问题
你在谷歌云用ReplicationController和LoadBalancer Service部署Nginx后,访问external_ip:84出现Connection Refused,咱们一步步拆解可能的原因:
1. Nginx容器监听端口配置错误(最核心的问题)
看你的ReplicationController配置,容器的containerPort设成了5000,但默认的Nginx镜像实际监听的是80端口,不是5000!这就导致Service把流量转发到容器的5000端口,但这个端口根本没有服务在监听,自然会触发拒绝连接的错误。
你可以手动验证这一点:
- 进入任意一个Nginx容器:
kubectl exec -it <nginx-pod-name> -- /bin/bash - 在容器内查看监听端口:
你会明确看到Nginx实际绑定的是80端口。netstat -tulpn | grep nginx
解决方法:把RC配置里的containerPort: 5000改成80,同时把Service里的targetPort: 5000也改成80,然后重新部署资源。
2. 容器是否正常运行
如果端口修正后仍有问题,先确认Pod状态是否正常:
- 查看所有Pod的运行状态:
确保所有Pod的状态都是kubectl get podsRunning,没有CrashLoopBackOff或Pending的异常情况。 - 查看Pod日志,排查Nginx启动是否失败:
kubectl logs <nginx-pod-name>
3. Service与Pod的标签匹配是否正常
你的Serviceselector设置为name: nginx-web,RC里Pod的labels也包含name: nginx-web,这部分看起来是对的,但可以再验证下关联状态:
- 查看Service关联的后端Pod:
在输出的kubectl describe service nginx-webEndpoints字段中,如果显示<none>或者数量和你设置的replicas不符,说明标签匹配存在问题(不过你的配置里标签是一致的,大概率不是这个原因)。
4. 谷歌云防火墙规则是否允许流量
LoadBalancer类型的Service会自动创建对应的防火墙规则,但偶尔可能出现配置延迟或异常:
- 登录谷歌云控制台,进入「VPC网络」->「防火墙规则」,找到和该Service关联的规则,确认它允许来自
0.0.0.0/0的TCP 84端口流量。
5. LoadBalancer是否完全就绪
LoadBalancer资源需要一定时间完成配置和绑定,你可以查看Service的状态:
kubectl get service nginx-web
确保EXTERNAL-IP不是<pending>状态,等待状态稳定后再尝试访问。
内容的提问来源于stack exchange,提问作者rishi007bansod
相关产品推荐
相关产品推荐

