【从零造容器】容器网络性能真相:veth vs macvlan vs eBPF 数据面

💡 原文中文,约6100字,阅读约需15分钟。
📝

内容提要

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,以获得更低的延迟和更高的吞吐量。

➡️

继续阅读