You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes中ClusterIP服务curl超时问题求助

排查ClusterIP服务curl超时问题

根据你提供的服务和Pod信息,以下是逐步排查步骤:

1. 直接验证Pod的可访问性

先跳过Service,直接从控制平面节点访问Pod的IP,确认Pod本身是否正常响应:

curl http://172.16.222.234
  • 如果请求超时:问题出在Pod与控制平面节点的网络连通性,或者Pod内的Nginx服务未正常监听。
  • 如果请求成功:问题出在Service的流量转发逻辑。

情况1:Pod访问超时

a. 确认Pod内Nginx是否正常监听端口

进入Pod内部检查Nginx的监听状态:

kubectl exec -it nginx-nfs-deployment-5dd946cdd6-7hh4k -- bash -c "netstat -tulpn | grep 80"

正常输出应该显示0.0.0.0:80或:::80,说明Nginx在所有接口监听80端口。如果没有输出,重启Pod或重新拉取Nginx镜像。

b. 检查节点防火墙规则

登录到Pod所在节点c1-node1(IP:192.168.0.11),检查防火墙是否允许Pod网段(172.16.0.0/16)的入站流量:

  • 对于iptables:
    iptables -L INPUT -n | grep 172.16
    
    确保没有拒绝该网段的规则。
  • 对于firewalld:
    firewall-cmd --list-all
    
    确认Pod网段已被允许,或临时关闭防火墙测试:firewall-cmd --stop。

c. 检查Calico CNI网络配置

你的集群使用Calico作为CNI,检查Calico组件状态:

kubectl get pods -n calico-system

确保所有Calico Pod处于Running状态。同时检查是否存在阻止流量的网络策略:

kubectl get networkpolicies --all-namespaces

如果有默认拒绝策略,需要添加允许控制平面节点访问Pod的规则。


情况2:Pod访问成功,但Service访问超时

a. 确认Service与Pod的标签匹配

虽然描述中显示Selector是app=nginx,Pod也有app=nginx标签,但再次验证:

kubectl get pods --show-labels | grep nginx
kubectl get svc nginx-nfs-service -o jsonpath='{.spec.selector}'

确保两者标签完全一致(注意大小写和字符)。

b. 检查kube-proxy运行状态

ClusterIP的流量转发依赖kube-proxy,检查控制平面节点上的kube-proxy Pod:

kubectl get pods -n kube-system | grep kube-proxy

如果Pod异常,重启kube-proxy:

kubectl delete pod -n kube-system <kube-proxy-pod-name>

同时查看kube-proxy日志,排查转发规则是否生成异常:

kubectl logs -n kube-system <kube-proxy-pod-name>

c. 检查控制平面节点的iptables规则

kube-proxy会生成iptables规则处理Service流量,检查是否存在对应Service的规则:

iptables -t nat -L KUBE-SERVICES -n | grep 10.105.179.135

如果没有相关规则,重启kube-proxy或刷新iptables规则:

iptables -F && iptables -t nat -F && systemctl restart kube-proxy

内容的提问来源于stack exchange,提问作者Zeinab Ganjei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 18:15:17