k8s iptables-nft vs iptables-legacy

kube-proxy 不是直接“调用内核模块”,而是一个 Go 进程,把 Service 和 EndpointSlice 转成内核转发/NAT 规则。不同模式调用的用户态工具不同:

kube-proxy 模式它实际怎么下发规则内核最终执行
iptables 执行容器内的 iptables-restore / ip6tables-restore 批量写规则 xtables/netfilter;若该命令是 iptables-nft,规则会被转换进 nftables
nftables 执行容器内的 nft,将一批 nft 规则/集合提交为事务 nftables 内核框架
ipvs 用 IPVS 的 netlink 接口创建 Virtual Server / Real Server,同时仍会使用少量 iptables 规则 IPVS 内核模块 + netfilter

所以你看到“物理机没有 iptables 客户端、但有内核模块”完全正常:执行 iptables-restorenft 的是 kube-proxy 容器,不是宿主机 shell。

关键区别是:

iptables 模式
kube-proxy → iptables-restore → iptables 内核接口
                         └─ 若二进制为 iptables-nft → nftables 内核规则

nftables 模式
kube-proxy → nft → nftables 内核接口

因此,iptables-nft 不等于 kube-proxy 的 nftables 模式。

  • 前者:kube-proxy 仍是 iptables Proxier,只是 iptables 命令的兼容后端为 nft。

  • 后者:kube-proxy 是 nftables Proxier,直接生成并执行 nft 规则事务。

在 kube-proxy 容器内可验证它究竟调用哪套工具:

# iptables 模式会需要/调用它
iptables-restore --version

# nftables 模式会需要/调用它
nft --version

但两套工具都在镜像中也不代表当前使用哪套;当前模式仍由 kube-proxy 的 mode 选择。官方实现上,nftables 后端当前确实是通过执行 nft CLI 下发规则,不是直接操纵 nf_tables 内核模块。 Kubernetes 相关实现说明

 

 

 

对。你的表描述的是 iptables 命令默认后端,不是 kube-proxy 的 proxy-mode

kube-proxy 在 mode: iptables 时不会特意执行:

/usr/sbin/iptables-legacy
/usr/sbin/iptables-nft

它调用的是通用命令:

iptables
iptables-restore
ip6tables
ip6tables-restore

实际落到 legacy 还是 nft,取决于 kube-proxy 进程所在文件系统内 的命令链接:

iptables-restore
  → /etc/alternatives/iptables-restore
    → /usr/sbin/iptables-nft-restore       # iptables-nft 后端

# 或
    → /usr/sbin/iptables-legacy-restore    # legacy 后端

所以应检查的是 kube-proxy 容器内:

iptables --version
iptables-restore --version
readlink -f "$(command -v iptables)"
readlink -f "$(command -v iptables-restore)"

输出含义:

iptables v1.8.x (nf_tables)

即 kube-proxy 的 iptables 模式通过 iptables-nft 兼容层写 nftables 规则。

iptables v1.8.x (legacy)

即 kube-proxy 的 iptables 模式写 legacy xtables 规则。

而:

mode: nftables

是另一套 kube-proxy 实现;它直接调用 nft,不走 iptables / iptables-restore,也不受上述 alternatives 链接影响。

一句话:

kube-proxy mode=iptables + iptables-restore → iptables-nft
≠
kube-proxy mode=nftables + nft

posted on 2026-08-28 19:12  小镇-做题家  阅读(2)  评论(0)    收藏  举报

导航