Pod IP 可访问而 ClusterIP 不通,问题通常落在 Service 选择器、EndpointSlice 或节点转发规则。IPVS 模式下还需确认虚拟服务与真实服务器是否同步。
从对象关系开始
kubectl get svc api -n production -o yaml
kubectl get endpointslices -n production -l kubernetes.io/service-name=api -o wide
kubectl get pods -n production -l app=api --show-labels
确认端口、targetPort、协议和 Pod readiness。只有 Ready 的端点通常会进入转发规则,探针失败会表现为 Service 无后端。
检查故障节点
kubectl logs -n kube-system ds/kube-proxy --since=20m
ipvsadm -Ln
ip addr show kube-ipvs0
conntrack -S
比较正常节点与异常节点的 IPVS 表。规则缺失时检查 kube-proxy 配置、API watch、内核模块和同步错误;规则存在则继续检查路由、NetworkPolicy 和回程路径。
常见误区
- 只测试 ClusterIP,不直接测试 Endpoint IP
- 重启全部 kube-proxy,丢失单节点现场
- 手工编辑 IPVS 规则,随后又被控制器覆盖
- 忽略 externalTrafficPolicy 带来的本地端点要求
收尾清单
修复后从同节点 Pod、跨节点 Pod 和节点本机分别测试。持续监控 kube-proxy 同步错误、Service 无端点和 conntrack 使用率。