Docker各种跨主机通信容器网络介绍与比较

前言

  • 本节我们主要讨论跨主机容器通信间方案
    在这里插入图片描述

Libnetwork与CNM

  • libnetwork是docker容器的网络库,最核心的内容就是Container Network Model(CNM),这种模型容器网络进行了抽象,由以下三类组件组成:
  1. Sandbox
    Sandbox是容器的网络栈,包括容器的interface,router表和DNS设置。Linux Network Namespace是Sandbox的标准实现。Sandbox可以包含来自不同的Network的Endpoint。
  2. Endpoint
    Endpoint的作用是将Sandbox接入Network。Endpoint的典型实现就是Veth-pair,一个Endpoint只能属于一个网络,同样也只能属于一个Sandbox。
  3. Network
    Network包含一组Endpoint,同一个Networ的Endpoint可以直接通信,Network的实现可以是Linux Bridge、Vlan等。
  • CNM示例图
    在这里插入图片描述
  • Docker网络架构图
    在这里插入图片描述

Docker原生容器网络

Overlay

  • 为了支持跨主机通信,Docker提供了Overlay Driver,使用户可以创建基于VxLAN的overlay网络。VxLAN可以将二层数据封装到UDP进行传输,VxLAN提供与VLAN相同的以太网二层服务,但是拥有更强大的扩展性以及灵活性。
  • VxLAN相比于VLAN的优点
  1. 支持更多的二层网段
  2. 能更好的利用已有的网络路径
  3. 避免物理交换机MAC的耗尽

Macvlan

  • macvlan本身是Linux kernel模块,它的功能是允许同一个物理网卡配置多个MAC地址,即多个interface,每个interface可以配置自己的IP。macvlan本质上就是一种网卡虚拟化技术。
  • macvlan的最大优点就是性能极其出色,关键最重要的是macvlan不需要创建Linux Bridge,而是通过以太interface直接连到物理网络。

Docker第三方容器网络

Flannel

  • flannel是centos开发容器网络的解决方案。flannel为每个host分配一个subnet,容器从此subnet中分配IP,这些IP可以在host间路由,容器无需NAT和端口映射就可以跨主机通信。
  • 每个subnet都是从一个更大的IP池子中分配subnet。为了在各个主机之间共享信息,flannel用etcd存放网络配置、已分配的subnet、host的IP等信息。
  • 数据包在主机间转发是由backend实现的。flannel提供了多种backend,最常用的有vxlan和host-gw。

Weave

  • weave是Weaveworks开发的容器网络解决方案。weave创建的虚拟网络可以部署在多个主机上的容器连接起来。对容器来说,weave就是像一个巨大的以太网交换机,所有容器都被接入到这个交换机,容器可以直接通信,无需NAT和端口映射。Weave的DNS模块使容器可以通过hostname访问。

Calico

  • Calico是一个纯三层的虚拟网络方案,Calico为每个容器分配一个IP,每个host都是router,把不同的host容器连接起来。与VxLAN不同的是,Calico不对数据包做额外封装,不需要NAT和端口映射,扩展性和性能都很好。

比较各种网络方案

网络模型

  • 跨主机网络意味着将不同的主机上的容器用一个虚拟网络连接起来。这个虚拟网络的拓扑结构和实现技术就是网络模型。
  • Docker overlay是overlay网络,建立主机间的VxLAN隧道,原始数据包在发送端被封装成VxLAN数据包,到达目的后在接收端解包,
  • Macvlan网络在二层通过VLAN连接容器,在三层上依赖外部网关连接不同的的macvlan,数据包直接发送不需要封装,属于underlay网络。
  • Flannel有两种:vxlan属于Overlay网络,host-gw将主机作为网关,依赖三层IP转发,不需要像VxLAN那样对包进行封装,属于underlay网络。
Docker OverlayMacvlanFlannel VxLANFlannel host-gwWeaveCalico
网络模型Overlay:VxLANUnderlayOverlay:VxLANUnderlay:纯三层Overlay:VxLANUnderlay:纯三层

Distributed Store

  • Docker Overlay、Flannel、Calico都需要etcd或consul。Macvlan是简单的local网络,不需要保存共享网络信息。Weave自己负责在主机间交换网络配置信息,也不需要。
Docker OverlayMacvlanFlannel VxLANFlannel host-gwWeaveCalico
Distributed Store需要不需要需要需要不需要需要

IPAM

  • Docker Overlay网络中所有主机共享一个subnet,容器启动时会顺序分配IP,可以通过–subnet定制IP空间。
  • Macvlan需要用户自己管理subnet,为容器分配IP,不同的subnet通信依赖外部网关。
  • Flannel为每个主机自动分配独立的subnet,用户只需要指定一个大的IP池。不同的subnet之间路由信息也由Flannel自动生成。
  • Weave的默认配置下所有容器的使用10.32.0.0/12subnet,如果此地址空间与现有IP冲突,可以通过–ipalloc-range分配特定的subnet。
  • Calico是从自定义的IP池中为每个主机分配subnet。
Docker OverlayMacvlanFlannel VxLANFlannel host-gwWeaveCalico
Distributed Store单一subnet自定义每一个host一个subnet每一个host一个subnet单一subnet每一个host一个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、Calico、Flannel host-gw的性能会优于Docker Overlay、Flannel VxLAN和Weave。
  • Overlay较Underlay可以支持更多的二层网段,能更好的利用已有的网络,以及有避免无礼交换机Mac表耗尽等优势。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值