首页/云/Kubernetes 速查/kube-proxy 与转发规则排查
网络与服务55 条

kube-proxy 与转发规则排查

Service 不通按层查:Endpoints 是否有就绪后端 → kube-proxy 组件是否正常 → 节点上的转发规则与防火墙是否放行。

Kubernetes 速查云更新于 2026-10-13

排查定位

Service 访问不通时,转发规则是整条链路里最容易被怀疑、也最容易查错的一层。适用平台是 Kubernetes。ClusterIP 的实现由每个节点上的 kube-proxy 负责:iptables 模式下写入大量规则链,IPVS 模式下写入虚拟服务与真实服务器条目,两者都依赖 Endpoints 已有就绪后端。正确顺序是「先确认有没有后端,再看 kube-proxy 组件状态,最后落到 Pod 所在节点核对规则」。

基本信息

适用平台Kubernetes(节点上的 kube-proxy 组件)
工作模式iptables、IPVS,部分环境用 nftables 后端
依赖对象Service 与 EndpointSlice,规则由控制器在这些对象变更时刷新
检查位置规则与组件都在各节点本地,不在控制面

典型使用场景

  • 服务整体访问不通:先确认端点列表是否为空,避免在转发层白查
  • 只有部分节点不通:说明是节点侧的规则或内核模块问题
  • 短连接大量建连失败:怀疑 conntrack 表满或会话复用问题
  • 切了 IPVS 模式后异常:核对内核模块与调度算法配置
  • 节点维护前预检:确认取消调度后流量路径与端点刷新的表现符合预期

分层检查

分层检查
kubectl get svc web-svc -o wide                       # 先看 Service 本身的端口与类型
kubectl get endpointslices -l kubernetes.io/service-name=web-svc   # 有没有就绪后端
kubectl -n kube-system get pod -l k8s-app=kube-proxy -o wide       # 组件在各节点是否就绪
kubectl -n kube-system logs -l k8s-app=kube-proxy --tail=50        # 看同步报错
# 以下在 Pod 所在节点执行
iptables-save | grep -i web-svc                        # iptables 模式:核对规则条目
ipvsadm -Ln | head -20                                 # IPVS 模式:虚拟服务与真实服务器
conntrack -C                                           # 会话表条目数,判断是否接近上限

分层与结论

层检查结果结论方向
Endpoints为空选择器不匹配或后端未就绪,与转发无关
Endpoints有地址但仍不通继续查转发规则与后端监听
kube-proxyPod 未就绪或反复重启看日志里的同步失败与内核模块报错
节点规则无对应条目组件未同步,检查节点网络或组件版本
conntrack条目接近上限调大表容量或排查长连接泄漏
Endpoints 为空时任何转发规则都不会命中:先把选择器不匹配或后端未就绪这两个最常见原因排除,再看 kube-proxy。
kube-proxy 的规则在每台节点上各自维护,控制面节点查到的结果不代表 Pod 所在节点;确定故障 Pod 在哪台机器上,再登那台机器核对。

易错点

  • 在控制面节点查规则:kube-proxy 规则按节点各自维护,要落到 Pod 所在节点,查错机器会得出「规则不存在」的错误结论
  • IPVS 模式内核模块缺失:日志会提示 ip_vs 相关模块加载失败,规则无法建立,需在节点侧 modprobe 并按文档持久化
  • 忽略 conntrack:短连接服务在会话表接近上限时会随机失败,表现为「时通时不通」,需结合内核参数与监控判断
  • 把 Service 不通直接归因 kube-proxy:NetworkPolicy 拦截与后端未监听同样会表现为不通,应先分层排除

数据来源与参考

  • Kubernetes 官方文档 · 虚拟 IP 与服务代理
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌