Kubernetes中跨服务调用端点遭连接拒绝问题排查求助
Kubernetes服务连接拒绝问题排查方案
你提到直接在db-daemon Pod内部调用API正常,但从其他Pod通过Pod IP:19091或db-service:8081调用时都出现connection refused,结合你的YAML配置,以下是核心排查点和修复方案:
1. 检查服务监听地址(最可能原因)
如果你的db-daemon服务只绑定了localhost(127.0.0.1),而非0.0.0.0,那么只能在容器内部访问,外部Pod或Service根本连不上。
- 进入Pod验证监听地址:
要是输出里的监听地址是kubectl exec -it <你的db-daemon-pod名称> -- netstat -tulpn127.0.0.1:19091,立刻修改服务配置,让它监听0.0.0.0:19091。
2. 确认Service与Pod的关联状态
虽然你的YAML里标签匹配看起来没问题,但还是要实际验证Service是否正确关联到Pod:
kubectl describe service db-service
看Endpoints字段,如果显示<none>,说明标签有拼写/大小写错误;如果显示了Pod的IP和端口,说明关联正常。
3. 验证容器内服务真的在19091端口运行
YAML里的containerPort只是声明,不代表服务实际在这个端口启动。在Pod内执行:
kubectl exec -it <你的db-daemon-pod名称> -- curl localhost:19091
如果这个命令返回错误,说明服务没在19091端口运行,得检查服务的启动参数或配置文件,调整端口到19091。
4. 排查网络策略限制
如果集群启用了NetworkPolicy,可能有规则阻止test-defintion-server访问db-daemon。先查看现有网络策略:
kubectl get networkpolicy
如果存在限制规则,需要添加允许访问的策略,示例如下:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-db-access spec: podSelector: matchLabels: app: db-daemon ingress: - from: - podSelector: matchLabels: app: test-defintion-server ports: - protocol: TCP port: 19091
5. 节点级防火墙检查(少见情况)
极端情况下,节点的防火墙可能拦截Pod间的19091端口访问。可以登录运行db-daemon Pod的节点,检查iptables或firewalld规则,但这种情况在标准Kubernetes集群里很少出现。
内容的提问来源于stack exchange,提问作者Sam Turner
相关产品推荐
相关产品推荐

