容器网络方案介绍及对比

  • 容器网络方案分类:
  • 容器网络库及容器网络模型(Container Network Model):
  • 网络方案介绍:
  • 网络方案对比
  • 兄弟公司底层网络技术选型:
  • 容器网络方案分类:

    按照来源分类:

    1、 docker原生网络方案

    2、 第三方网络方案

     

    按照方案是否提供跨主机网络:

    1、 单主机网络方案

    2、 跨主机网络方案

    容器网络方案介绍及对比

    容器网络库及容器网络模型(Container Network Model):

    容器网络方案介绍及对比

     

    libnetwork 是 docker 容器网络库,最核心的内容是其定义的 Container Network Model (CNM),这个模型对容器网络进行了抽象,由以下三类组件组成:

    1、 Sandbox

    容器网络栈。Linux network namespace是标准实现。包括容器interface、路由表、dns设置。

    2、 Network

    常见的实现,比如linux bridge。

    3、 Endpoint

    作用是联通sandbox和network。

     

    容器网络方案介绍及对比

     

    例子:

    容器网络方案介绍及对比

    1、 sandbox,由 Network Namespace 实现,每个容器有自己的network namespace

    2、 network,由linux bridge docker0和br-5d863e9f78b6实现。

    3、 endppont,由三对veth pair实现。

     

    网络方案介绍:

    Bridge

    1、 linux bridge,linux Bridge(网桥)是工作于二层的虚拟网络设备,功能类似于物理的交换机。

    2、 veth pair,vth pair 是一对虚拟网卡,从一张veth网卡发出的数据包可以直接到达它的peer veth,两者之间存在着虚拟链路。

    3、 特点:

    1) container独立的network namespace,用veth pair连接到host上的linux bridge

    2) 各bridge网络彼此独立,不同网络不联通,因此同一host上的不同网络下的container不通,不同host上的container更不通。加上路由是否就可以通了?

    Docker Overlay

    容器网络方案介绍及对比

     特点

    1)各container独立的network namespace

    2)各host上新起同样的network namespace,里面生成同样的overlay bridge

    3)container通过veth pair连到各host上的overlay bridge

    4)各host上的overlay bridge通过vxlan设备建立overlay 网络

    5)为了使各container能访问外网,overlay网络方案同时在各主机上创建了bridge用于各container访问外部网络

    6)使用consul存储状态数据

    7)提供dns服务

     

    Macvlan

    macvlan 本身是 linxu kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP。macvlan 本质上是一种网卡虚拟化技术,Docker 用 macvlan 实现容器网络就不奇怪了。

    容器网络方案介绍及对比

    1、网卡虚拟化技术,允许一块网卡配置多个mac地址,即多个interface

    2、本质还是单主机网络。需要人工在各host上创建network

    3、同时在使用的时候,手动为各container分配静态ip地址,且要避免ip冲突

    4、不提供dns服务

    5、独占host网卡。为避免这种状况,使用网卡虚拟化技术,将一块网卡上配置上多个sub-interface

    6、需要真实存在的网关

     

    Flannel

    本质上是把docker默认的相互隔离的docker0网络连起来组成了一个更大的网络,实现了跨主机通信,所以就失去了网络隔离性。

    flannel 没有创建新的 docker 网络,而是直接使用默认的 bridge 网络。同一主机的容器通过 docker0 连接,跨主机流量通过 flannel.1 转发。

    overlay backend方案:

    1、各主机上的interface flanne.1

    2、etcd管理各主机上的subnet

    3、不提供dns服务

    Vxlan backend方案:

    1、通过vxlan封装解决不同host上的网络联通

    host-gw backend方案:

    1、通过路由表的方式解决联通性

    容器网络方案介绍及对比

    Weave

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

    weave 运行了三个容器:

    weave 是主程序,负责建立 weave 网络,收发数据 ,提供 DNS 服务等。

    weaveplugin 是 libnetwork CNM driver,实现 Docker 网络。

    weaveproxy 提供 Docker 命令的代理服务,当用户运行 Docker CLI 创建容器时,它会自动将容器添加到 weave 网络。

    1、首先要将不同node加入同一个weave网络

    2、bridge + open vswtich,分工不同,bridge负责把容器接入weave网络,open vswitch负责在主机间的vxlan数据转发。

    3、bridge负责将docker网络接入weave网络,open vswitch负责vxlan隧道收发数据

    4、weave网络默认使用一个大subnet

    容器网络方案介绍及对比

    Calico

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

    1、三层网络虚拟方案

    2、实现方式的主要技术是路由表配置,需要etcd

    3、可以使用network policy

    容器网络方案介绍及对比

     

    网络方案对比

    网络模型

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

    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 Unerlay:纯三层

     

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

     

    总结起来,各网络方案的重点区别在于:

    1、 是用overlay网络技术联通各容器网络,还是纯unerlay技术+路由

    2、 再就是overlay技术网络之间的差别,以及各undeylay技术方案之间的差别


    兄弟公司底层网络技术选型:

    1、兄弟公司1:calico

    2、兄弟公司2:open shiftsdn(open shift定制的SDN网络方案,可类比waeve)


    calico于waeve对比:

    1)技术复杂度:calico < waeve,calico主要基于简单的路由技术,waeve主要基于复杂的SDN技术。

    2)性能:calico > waeve,calico不需要对数据包进行二次封装解封,waeve需要对数据包进行二次封装解封。

    3)扩展性:calico < waeve,waeve属于overlay网络,可以支持更多的网段。


    从技术复杂度和性能方面看,calico均优于waeve。从使用场景看,容器云平台只限于内部使用,不考虑接入外部用户,隔离及扩展性不是重点,与兄弟公司1相似。因此,底层网络方案建议采用calico。

    上一篇:boost::geometry::detail::overlay::approximately_equals用法的测试程序


    下一篇:DevExpress WinForms帮助文档:表单控件 - 如何在覆盖表单上显示自定义按钮