<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Iptables on 涯余的博客</title><link>https://hangyan.github.io/tags/iptables/</link><description>Recent content in Iptables on 涯余的博客</description><generator>Hugo</generator><language>zh</language><managingEditor>hang.yan@hotmail.com (涯余)</managingEditor><webMaster>hang.yan@hotmail.com (涯余)</webMaster><lastBuildDate>Mon, 20 Sep 2021 19:56:17 +0800</lastBuildDate><atom:link href="https://hangyan.github.io/tags/iptables/index.xml" rel="self" type="application/rss+xml"/><item><title>eBPF, iptables, nftables</title><link>https://hangyan.github.io/post/2021-ebpf-iptables/</link><pubDate>Mon, 20 Sep 2021 19:56:17 +0800</pubDate><author>hang.yan@hotmail.com (涯余)</author><guid>https://hangyan.github.io/post/2021-ebpf-iptables/</guid><description>&lt;p&gt;把它们三个列在一起，是因为确实有错综复杂的关系。我也想理一理他们在网络方面的前景,比较侧重于 K8s 和 CNI 方面.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;iptables&lt;/code&gt;: kube-proxy最开始基于 iptables 来实现了 service 的负载均衡，只支持随机算法。因为 iptables 本身的局限性，目前提供了 ipvs 模式.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nftables&lt;/code&gt;: 可以说是 iptables 的替代品，更好的API及性能，但是因为 iptables 的遗留使用率太高，暂时难以看到全面替代的可能。&lt;/li&gt;
&lt;li&gt;&lt;code&gt; eBPF&lt;/code&gt;: 影响越来越多，有可能会在很多场景下替代 iptables&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这是简要的说明。下面将根据不同侧面来详细分析一下。&lt;/p&gt;
&lt;h2 id="iptables"&gt;iptables&lt;/h2&gt;
&lt;p&gt;两个主要问题:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;规则数量线性增长&lt;/li&gt;
&lt;li&gt;更新规则需要整个替换掉，无法保证原子性。更新规则的效率也很低。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="ipset"&gt;ipset&lt;/h2&gt;
&lt;p&gt;ipset 是 iptables 的一个扩展，主要解决的问题是 iptables 的线性增长问题。考虑到 iptables 的现实中的普及性以及大家求稳的心态， ipset 在很多场景下仍是一个不错的选择。其基本思想是用 hash 等数据结构来替代原来的线性匹配，这种设计我们在很多地方都可以见到，比如 ovs, eBPF等等。&lt;/p&gt;
&lt;p&gt;nftables 作为 iptables 的继任者，很多设计已经了 ipset 里的设计。二者有一定的相似性。&lt;/p&gt;
&lt;h2 id="ipvs"&gt;ipvs&lt;/h2&gt;
&lt;p&gt;没找到太好的深入介绍的资料，但根据网上找的测试数据，比 iptables 好很多.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.tigera.io/wp-content/uploads/2019/04/Picture1.png"&gt;&lt;/p&gt;
&lt;p&gt;Service 数量少时不明显，数量很大时差距就出来了。&lt;/p&gt;
&lt;h2 id="kube-proxy"&gt;kube-proxy&lt;/h2&gt;
&lt;p&gt;eBPF, iptables, nftables,ipvs, ipset这些东西，最终在 k8s 上的落脚点都是 kube-proxy. kube-proxy实现了各种 Service 的功能，底层用什么，是可能会变的，从最开始的 iptables 到现在的 ipvs, 以后真用其他的东西也说不准. 除了 iptables 和 ipvs, 我们也能找到其他方面的尝试:&lt;/p&gt;</description></item></channel></rss>