第 8 章 容器网络 - 072 - 一文搞懂各种 Docker 网络

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

 

跨主机网络方案:

Docker Overaly

Macvaln

Flannel

Weave

Calico

 

根据不同场景选择最合适的方案:

网络模型

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

Distributed Store

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

IPMA

如何管理容器网络的 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 网络。

 

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

 

Docker overlay

Macvlan

Flannel vxlan

Flannel host-gw

 Weave

Calico

网络模型

Overlay:VxLAN

Underlay

Overlay:VxLAN

Underlay:纯三层

Overlay:VxLAN

Underlay:纯三层

 

Distributed Store

Docker Overlay、Flannel 和 Calico 都需要 etcd 或 consul。

Macvlan 是简单的 local 网络,不需要保存和共享网络信息。

Weave 自己负责在主机间交换网络配置信息,也不需要 Distributed Store。

 

Docker overlay

Macvlan

Flannel vxlan

Flannel host-gw

 Weave

Calico

Distributed Store

Yes

No

Yes

Yes

No

Yes

 

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

Macvlan

Flannel vxlan

Flannel host-gw

 Weave

Calico

IPAM

单一subnet

自定义

每个host一个subnet

每个host一个subnet

单一subnet

每个host一个subnet

 

连通与隔离

Docker Overlay

  同一 Docker Overlay 网络中的容器可以通信,但不同网络之间无法通信,要实现跨网络访问,只有将容器加入多个网络。与外网通信可以通过 docker_gwbridge 网络。

Macvlan

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

Flannel

  不同 Flannel 网络中的容器直接就可以通信,没有提供隔离。与外网通信可以通过 bridge 网络。

Weave

  Weave 网络默认配置下所有容器在一个大的 subnet 中,可以自由通信,如果要实现隔离,需要为容器指定不同的 subnet 或 IP。与外网通信的方案是将主机加入到 weave 网络,并把主机当作网关。

Calico

  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 表耗尽等优势,所以在方案选型的时候需要综合考虑。

 

------------------------------------------引用来自-----------------------------------------------------

https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587882&idx=1&sn=2eb4e0a24bdeca2c9ac0f2c5d3d8469d&chksm=8d3081b3ba4708a54eac6f3ddb5d75b617167898831f089e955ab9df20da0392f9b0f2347eaa&scene=21#wechat_redirect

posted @ 2019-04-17 09:57  gsophy  阅读(195)  评论(0编辑  收藏  举报