一文搞懂各类 Docker 网络 - 天天5分钟玩转 Docker 容器技术(72)

前面各小节咱们前后学习了 Docker Overaly,Macvaln,Flannel,Weave 和 Calico 跨主机网络方案。目前这个领域是百家争鸣,并且还有新的方案不断涌现。docker

本节将从不一样维度比较各类网络方案,你们在选择的时候能够参考。CloudMan 的建议是:没有最好的,只有最适合的,明确本身的需求,经过 PoC 选型。数据库

Docker 起初只提供了简单的 single-host 网络,显然这不利于 Docker 构建容器集群并经过 scale-out 方式横向扩展到多个主机上。网络

在市场需求的推进下,跨主机容器网络技术开始发展。这是一个很是活跃的技术领域,在不长的时间里已经涌现了不少优秀方案。本章咱们详细讨论了几种主流的方案 - Docker Overlay、Macvlan、Flannel、Weave 和 Calico。如今是时候作个比较了,让你们对各类方案的特色和优点有更深刻的理解。分布式

咱们将从以下几个方面比较,你们能够根据不一样场景选择最合适的方案。性能

网络模型
采用何种网络模型支持 multi-host 网络?学习

Distributed Store 
是否须要 etcd 或 consul 这类分布式 key-value 数据库存储网络信息?测试

IPMA
如何管理容器网络的 IP?spa

连通与隔离
提供怎样的网络连通性?支持容器间哪一个级别和哪一个类型的隔离?code

性能
性能比较。ip

网络模型

跨主机网络意味着将不一样主机上的容器用同一个虚拟网络链接起来。这个虚拟网络的拓扑结构和实现技术就是网络模型。

Docker overlay 如名称所示,是 overlay 网络,创建主机间 VxLAN 隧道,原始数据包在发送端被封装成 VxLAN 数据包,到达目的后在接收端解包。

Macvlan 网络在二层上经过 VLAN 链接容器,在三层上依赖外部网关链接不一样 macvlan。数据包直接发送,不须要封装,属于 underlay 网络。

Flannel 咱们讨论了两种 backend:vxlan 和 host-gw。vxlan 与 Docker overlay 相似,属于 overlay 网络。host-gw 将主机做为网关,依赖三层 IP 转发,不须要像 vxlan 那样对包进行封装,属于 underlay 网络。

Weave 是 VxLAN 实现,属于 overlay 网络。

各方案的网络模型描述以下:

Distributed Store

Docker Overlay、Flannel 和 Calico 都须要 etcd 或 consul。Macvlan 是简单的 local 网络,不须要保存和共享网络信息。Weave 本身负责在主机间交换网络配置信息,也不须要 Distributed Store。

IPAM

Docker Overlay 网络中全部主机共享同一个 subnet,容器启动时会顺序分配 IP,能够经过 --subnet 定制此 IP 空间。

Macvlan 须要用户本身管理 subnet,为容器分配 IP,不一样 subnet 通讯依赖外部网关。

Flannel 为每一个主机自动分配独立的 subnet,用户只须要指定一个大的 IP 池。不一样 subnet 之间的路由信息也由 Flannel 自动生成和配置。

Weave 的默认配置下全部容器使用 10.32.0.0/12 subnet,若是此地址空间与现有 IP 冲突,能够经过 --ipalloc-range 分配特定的 subnet。

Calico 从 IP Pool(可定制)中为每一个主机分配本身的 subnet。

连通与隔离

同一 Docker Overlay 网络中的容器能够通讯,但不一样网络之间没法通讯,要实现跨网络访问,只有将容器加入多个网络。与外网通讯能够经过 docker_gwbridge 网络。

Macvlan 网络的连通或隔离彻底取决于二层 VLAN 和三层路由。

不一样 Flannel 网络中的容器直接就能够通讯,没有提供隔离。与外网通讯能够经过 bridge 网络。

Weave 网络默认配置下全部容器在一个大的 subnet 中,能够自由通讯,若是要实现隔离,须要为容器指定不一样的 subnet 或 IP。与外网通讯的方案是将主机加入到 weave 网络,并把主机看成网关。

Calico 默认配置下只容许位于同一网络中的容器之间通讯,但经过其强大的 Policy 可以实现几乎任意场景的访问控制。

性能

性能测试是一个很是严谨和复杂的工程,这里咱们只尝试从技术方案的原理上比较各方案的性能。

最朴素的判断是:Underlay 网络性能优于 Overlay 网络

Overlay 网络利用隧道技术,将数据包封装到 UDP 中进行传输。由于涉及数据包的封装和解封,存在额外的 CPU 和网络开销。虽然几乎全部 Overlay 网络方案底层都采用 Linux kernel 的 vxlan 模块,这样能够尽可能减小开销,但这个开销与 Underlay 网络相比仍是存在的。因此 Macvlan、Flannel host-gw、Calico 的性能会优于 Docker overlay、Flannel vxlan 和 Weave。

Overlay 较 Underlay 能够支持更多的二层网段,能更好地利用已有网络,以及有避免物理交换机 MAC 表耗尽等优点,因此在方案选型的时候须要综合考虑。

至此,Docker 网络部分咱们已经所有讨论完了,下一节将开启数据管理部分,即跨主机 Docker 存储。

二维码+指纹.png

相关文章
相关标签/搜索