Kubernetes请求Pod时出现Connection Refused问题求助
问题排查与解决方案
1. 确认Nginx Ingress Controller是否正常部署运行
Docker Desktop内置的Kubernetes默认不会自动安装Ingress Controller,这是导致Ingress无法转发请求的常见原因:
- 执行命令检查组件状态:
查看输出中是否存在名称包含kubectl get pods -n kube-systemnginx-ingress的Pod,且状态为Running。 - 若未安装,可通过两种方式部署:
- 打开Docker Desktop设置 → Kubernetes,勾选Enable ingress controller并应用;
- 使用Helm安装:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm install ingress-nginx ingress-nginx/ingress-nginx
2. 验证Pod的网络可达性与服务状态
你提到直接curl Pod IP和ClusterIP超时,说明Pod层面存在网络或服务启动问题:
- 检查Pod运行状态:
确认两个服务的Pod均处于kubectl get podsRunning状态,无CrashLoopBackOff等异常。 - 查看Pod日志排查服务启动问题:
重点确认.NET服务是否绑定到kubectl logs <platforms-service-pod-name> kubectl logs <commands-service-pod-name>0.0.0.0:8080而非localhost:8080——若绑定localhost,集群内其他节点/Pod将无法访问该服务。 - 强制.NET服务绑定IPv4地址:
在Program.cs中修改WebHost配置:
或在.UseUrls("http://0.0.0.0:8080")appsettings.json中配置Kestrel:
重新构建镜像并重新部署。"Kestrel": { "Endpoints": { "Http": { "Url": "http://0.0.0.0:8080" } } }
3. 检查ClusterIP Service的端点关联
确认Service已正确关联到Pod:
- 查看Service的端点信息:
检查kubectl describe service platform-clusterip-service kubectl describe service command-clusterip-serviceEndpoints字段是否显示Pod的IP与8080端口。若为空,说明Service的selector与Pod的labels不匹配(你的配置中已对应,可再次核对)。 - 在集群内临时Pod中测试Service访问:
进入临时Pod后执行:kubectl run -it --rm --image=curlimages/curl curl-test
若仍超时,说明Pod服务本身存在问题或集群网络异常(Docker Desktop默认无网络策略限制)。curl platform-clusterip-service:80/api/platforms curl command-clusterip-service:80/api/commands/platforms
4. 检查Ingress配置与主机端口占用
- 查看Ingress状态与事件:
检查Events中是否存在后端服务找不到、Ingress Controller未处理等报错。kubectl describe ingress ingress-service - 确认主机80端口未被占用:
执行命令查看端口占用情况:
若80端口被IIS、Apache等程序占用,需停止占用程序,或修改Ingress Controller的端口映射配置。netstat -ano | findstr :80
5. 查看Ingress Controller日志排查转发问题
当Ingress Controller运行正常但请求仍失败时,查看控制器日志:
kubectl logs <nginx-ingress-controller-pod-name> -n kube-system
通过日志定位请求转发过程中的错误,比如路径匹配失败、后端服务不可达等。
内容的提问来源于stack exchange,提问作者Mateusz
相关产品推荐
相关产品推荐

