eBPF, iptables, nftables
把它们三个列在一起,是因为确实有错综复杂的关系。我也想理一理他们在网络方面的前景,比较侧重于 K8s 和 CNI 方面. iptables: kube-proxy最开始基于 iptables 来实现了 service 的负载均衡,只支持随机算法。因为 iptables 本身的局限性,目前提供了 ipvs 模式. nftables: 可以说是 iptables 的替代品,更好的API及性能,但是因为 iptables 的遗留使用率太高,暂时难以看到全面替代的可能。 eBPF: 影响越来越多,有可能会在很多场景下替代 iptables 这是简要的说明。下面将根据不同侧面来详细分析一下。 iptables 两个主要问题: 规则数量线性增长 更新规则需要整个替换掉,无法保证原子性。更新规则的效率也很低。 ipset ipset 是 iptables 的一个扩展,主要解决的问题是 iptables 的线性增长问题。考虑到 iptables 的现实中的普及性以及大家求稳的心态, ipset 在很多场景下仍是一个不错的选择。其基本思想是用 hash 等数据结构来替代原来的线性匹配,这种设计我们在很多地方都可以见到,比如 ovs, eBPF等等。 nftables 作为 iptables 的继任者,很多设计已经了 ipset 里的设计。二者有一定的相似性。 ipvs 没找到太好的深入介绍的资料,但根据网上找的测试数据,比 iptables 好很多. Service 数量少时不明显,数量很大时差距就出来了。 kube-proxy eBPF, iptables, nftables,ipvs, ipset这些东西,最终在 k8s 上的落脚点都是 kube-proxy. kube-proxy实现了各种 Service 的功能,底层用什么,是可能会变的,从最开始的 iptables 到现在的 ipvs, 以后真用其他的东西也说不准. 除了 iptables 和 ipvs, 我们也能找到其他方面的尝试: ...