【从零造容器】容器网络性能真相:veth vs macvlan vs eBPF 数据面
内容提要
Docker 默认网络模型使用 veth、bridge 和 iptables,导致性能损失。macvlan 和 ipvlan 提供更高的吞吐量和更低的延迟。Cilium 通过 eBPF 替代 iptables,显著提升性能。在选择网络方案时,需要考虑延迟、性能和复杂度。
关键要点
-
Docker 默认网络模型使用 veth、bridge 和 iptables,导致性能损失。
-
每个包从容器到宿主机要经过多个步骤,iptables 的 conntrack 是最大的性能杀手。
-
macvlan 跳过 bridge,提供几乎与裸机相同的性能,但容器与宿主机不能直接通信。
-
ipvlan 共享 MAC 地址,适用于云环境,无需 promiscuous mode,性能接近 macvlan。
-
Cilium 通过 eBPF 替代 iptables,显著提升性能,尤其在规则数量多时表现优越。
-
选择网络方案时需考虑延迟、性能和复杂度,适合的场景包括高性能服务和 Kubernetes 集群。
延伸问答
Docker 默认网络模型的性能问题是什么?
Docker 默认网络模型使用 veth、bridge 和 iptables,导致性能损失,吞吐量降低约20%。
macvlan 和 ipvlan 的主要区别是什么?
macvlan 让每个容器拥有独立的 MAC 地址,适合高性能场景,但容器与宿主机不能直接通信;ipvlan 共享 MAC 地址,适用于云环境,无需 promiscuous mode。
Cilium 如何提升网络性能?
Cilium 通过 eBPF 替代 iptables,显著提升性能,尤其在规则数量多时表现优越,避免了传统 iptables 的 O(n) 复杂度。
选择容器网络方案时需要考虑哪些因素?
选择网络方案时需考虑延迟、性能和复杂度,适合的场景包括高性能服务和 Kubernetes 集群。
使用 Docker bridge 网络时的延迟和吞吐量是多少?
使用 Docker bridge 网络时,TCP 吞吐量为 7.52 Gbps,延迟增加约 18μs。
如何在高性能服务中选择合适的网络方案?
对于高性能服务,推荐使用 macvlan 或 host network,以获得更低的延迟和更高的吞吐量。