背景

kube-proxy 的 IPVS 模式自 1.8 引入,初衷是缓解 iptables 规则膨胀带来的性能问题。但内核 IPVS API alone 无法完整实现 Service 语义,IPVS 模式底层仍依赖 iptables 做兜底,维护成本高、行为难统一。

在 Kubernetes v1.35 中,kube-proxy 的 IPVS 模式 被正式标记为废弃(Deprecate),并将在 v1.37 彻底移除,推荐迁移到 nftables 模式。

确认

要确认 kube-proxy 是否运行在 IPVS 模式下,最直接的方法是通过 Kubernetes API 查看其配置,或者检查它在节点上留下的“痕迹”。

方法一:

最直接的方法,查看 kube-proxy 的配置中 mode 字段是否为 ipvs。

kubectl get cm -n kube-system kube-proxy -o jsonpath='{.data.config\.conf}' | grep mode
  • 如果输出包含mode: "ipvs":说明当前配置为 IPVS 模式。
  • 如果输出是mode: ""mode: "iptables":说明当前是 iptables 模式(这也是默认模式)。

方法二:

查看任意一个 kube-proxy Pod 的日志,它会在启动时打印当前使用的模式。

kubectl logs -n kube-system -l k8s-app=kube-proxy --tail=50 | grep -i "proxier"
  • 如果在日志中看到"Using ipvs Proxier":确认是 IPVS 模式。
  • 如果在日志中看到"Using iptables Proxier""assuming iptables proxy":则是在 iptables 模式下运行。

方法三:

kube-proxy 会在本地的10249端口暴露一个状态接口,可以直接查询其模式。在集群的任一节点上执行:

curl http://localhost:10249/proxyMode

这个命令会直接返回ipvsiptables