一文搞懂各种 Docker 网络 - 每天5分钟玩转 Docker 容器技术(72)
2017-09-24 16:36
525 查看
前面各小节我们先后学习了 Docker Overaly,Macvaln,Flannel,Weave 和 Calico 跨主机网络方案。目前这个领域是百家争鸣,而且还有新的方案不断涌现。
本节将从不同维度比较各种网络方案,大家在选择的时候可以参考。CloudMan 的建议是:没有最好的,只有最适合的,明确自己的需求,通过 PoC 选型。
Docker 起初只提供了简单的 single-host 网络,显然这不利于 Docker 构建容器集群并通过 scale-out 方式横向扩展到多个主机上。
在市场需求的推动下,跨主机容器网络技术开始发展。这是一个非常活跃的技术领域,在不长的时间里已经涌现了很多优秀方案。本章我们详细讨论了几种主流的方案 - Docker Overlay、Macvlan、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、Flannel 和 Calico 都需要 etcd 或 consul。Macvlan 是简单的 local 网络,不需要保存和共享网络信息。Weave 自己负责在主机间交换网络配置信息,也不需要 Distributed Store。
Docker Overlay 网络中所有主机共享同一个 subnet,容器启动时会顺序分配 IP,可以通过
IP 空间。
Macvlan 需要用户自己管理 subnet,为容器分配 IP,不同 subnet 通信依赖外部网关。
Flannel 为每个主机自动分配独立的 subnet,用户只需要指定一个大的 IP 池。不同 subnet 之间的路由信息也由 Flannel 自动生成和配置。
Weave 的默认配置下所有容器使用 10.32.0.0/12 subnet,如果此地址空间与现有 IP 冲突,可以通过
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 存储。
本节将从不同维度比较各种网络方案,大家在选择的时候可以参考。CloudMan 的建议是:没有最好的,只有最适合的,明确自己的需求,通过 PoC 选型。
Docker 起初只提供了简单的 single-host 网络,显然这不利于 Docker 构建容器集群并通过 scale-out 方式横向扩展到多个主机上。
在市场需求的推动下,跨主机容器网络技术开始发展。这是一个非常活跃的技术领域,在不长的时间里已经涌现了很多优秀方案。本章我们详细讨论了几种主流的方案 - Docker Overlay、Macvlan、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 网络。
各方案的网络模型描述如下:
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 存储。
相关文章推荐
- 一文搞懂各种 Docker 网络 - 每天5分钟玩转 Docker 容器技术(72)
- 一文搞懂各种 Docker 网络 - 每天5分钟玩转 Docker 容器技术(72) 推荐
- 一文搞懂各种 Docker 网络 - 每天5分钟玩转 Docker 容器技术(72)
- 一张表搞懂各种 Docker 监控方案 - 每天5分钟玩转 Docker 容器技术(86)
- 一张表搞懂各种 Docker 监控方案 - 每天5分钟玩转 Docker 容器技术(86)
- 一张表搞懂各种 Docker 监控方案 - 每天5分钟玩转 Docker 容器技术(86)
- 一张表搞懂各种 Docker 监控方案 - 每天5分钟玩转 Docker 容器技术(86)
- 准备 overlay 网络实验环境 - 每天5分钟玩转 Docker 容器技术(49)
- Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)
- Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)
- Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)
- 如何自定义容器网络?- 每天5分钟玩转 Docker 容器技术(33)
- 如何部署 Calico 网络?- 每天5分钟玩转 Docker 容器技术(67)
- none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
- Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)
- Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)
- Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)
- 如何部署 Calico 网络?- 每天5分钟玩转 Docker 容器技术(67)
- Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)
- Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)