确定 kube-proxy 是否使用 ipvs 模式
背景
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
这个命令会直接返回ipvs或iptables。
确定 kube-proxy 是否使用 ipvs 模式
https://www.seafog.cn/archives/XYIlSoWy