Kubernetes客户端Pod连接server-service:5000失败,请求排查原因
从你给出的错误信息和Kubernetes配置来看,客户端无法连接server-service:5000并出现Connection refused,以下是几个核心排查方向:
1. Service端口访问错误
你的服务器Service server-service 配置中,port字段为80,targetPort为5000。这意味着集群内访问该服务时,应该使用80端口而非5000端口。但客户端代码中请求的是server-service:5000,这是直接的配置不匹配问题,正确的访问地址应为server-service:80。
2. 服务器容器未在5000端口监听
Deployment里声明的containerPort:5000仅为端口标识,不代表容器内服务实际在该端口启动。你可以进入任意服务器Pod,执行命令检查端口监听状态:
kubectl exec -it <server-pod-name> -- netstat -tulpn
如果没有进程监听5000端口,要么调整服务配置让它监听5000,要么修改Service的targetPort到服务实际监听的端口。
3. Service与Pod标签不匹配
检查服务器Deployment的Pod模板标签和Service选择器是否完全一致:
- Deployment Pod模板标签:
app: server - Service选择器:
app: server
用以下命令验证匹配情况:
# 查看Pod标签 kubectl get pods --show-labels -l app=server # 查看Service后端Endpoint状态 kubectl describe service server-service
如果Endpoints字段为空,说明Service找不到匹配的Pod,大概率是标签拼写、大小写错误导致的。
4. 服务器Pod未就绪
如果服务器Pod的就绪探针配置错误,或者服务启动耗时过长,Pod会处于未就绪状态,此时Service不会将流量转发给它。查看Pod状态:
kubectl get pods -l app=server
若READY列显示0/1,说明Pod未就绪,执行kubectl describe pod <server-pod-name>查看事件日志,排查启动或探针失败的原因。
5. DoS模拟导致服务器拒绝连接
你的应用用于模拟拒绝服务攻击,若客户端并发请求量过大,服务器连接数被耗尽或服务被压垮,也会出现连接拒绝。可以先降低客户端请求速率,验证基础连接是否正常,再逐步增加压力测试攻击逻辑。
内容的提问来源于stack exchange,提问作者Joe Spark

