容器的到来给数据中心网络提出了一些新的挑战, 为了适配容器, 网络部分也需要随之调整, 所以围绕容器产生了很多不同的网络解决方案, 本文主要来介绍一下几种容器网络方案技术.
容器技术很火, 经常为人所提及, 尤其是开源容器工具 docker, 已在不少数据中心里有广泛应用. 容器主要是对软件和其依赖环境的标准化打包, 将应用之间相互隔离, 并能运行在很多主流操作系统上. 这样看来容器和虚拟机技术很类似, 容器是 App 层面的隔离, 而虚拟化是物理资源层面的隔离, 容器解决了虚拟技术的不少痛点问题, 很多时候容器可以和虚拟机结合在一起使用, 这也是目前数据中心主流的做法. 容器的到来给数据中心网络提出了一些新的挑战, 为了适配容器, 网络部分也需要随之调整, 所以围绕容器产生了很多不同的网络解决方案, 本文主要来介绍一下几种容器网络方案技术.
Callico
Callico 容器网络和其他虚拟网络最大的不同是, 它没有采用 overlay 网络做报文转发, 提供了纯三层网络模型. 三层通信模型表示每个容器都通过 IP 直接通信, 中间通过路由转发找到对方, 容器所在节点类似于传统路由器, 提供了路由查找功能, 要想路由工作能够正常, 每个容器所在的主机节点必须有某种方法知道整个集群的路由信息, Callico 采用 BGP 路由协议, 全称是 Border Gateway Protocol.
通过 BGP, 使得全网所有的 Node 和网络设备都记录到全网路由, 可以看到这种方式会产生很多的无效路由, 对网络设备路由规格要求较大, 整网不能有路由规格低的设备. BGP 是一种成熟的网络路由协议, 在传统网络中就有广泛使用, 如此网络部分天然就可以对 Callico 进行支持, 只不过对网络路由规格要求高一些. 另外, Callico 实现了从源容器经过源宿主机, 经过数据中心路由, 然后到达目的宿主机, 最后分配到目的容器过程, 整个过程中始终都是根据 BGP 协议进行路由转发, 并没有进行封包, 解包过程, 这样转发效率就会快得多. 所以, 往往技术越简化, 执行效率越高效, 这是 Callico 容器网络的技术优势.
Flannel
Flannel 是 CoreOS 提出用于解决容器集群跨主机通讯的网络解决方案. Flannel 实质上是一种覆盖网络 Overlay network, 也就是将 TCP 数据包装在另一种网络包里面进行路由转发和通信, 目前已支持 UDP,VXLAN,AWS VPC,GCE 路由等数据转发方式, 其中以 VXLAN 技术最为流行, 很多数据中心在考虑引入容器时, 也考虑将网络切换到 Flannel 的 VXLAN 网络中来.
Flannel 为每个主机分配一个 subnet, 容器从此 subnet 中分配 IP, 这些 IP 可在主机间路由, 容器间无需 NAT 和端口映射就可以跨主机通讯. Flannel 让集群中不同节点主机创建容器时都具有全集群唯一虚拟 IP 地址, 并连通主机节点网络. Flannel 可为集群中所有节点重新规划 IP 地址使用规则, 从而使得不同节点上的容器能够获得 "同属一个内网" 且 "不重复的" 的 IP 地址, 让不同节点上的容器能够直接通过内网 IP 通信, 网络封装部分对容器是不可见的. 源主机服务将原本数据内容 UDP 封装后根据自己的路由表投递给目的节点, 数据到达以后被解包, 然后直接进入目的节点虚拟网卡, 然后直接达到目的主机容器虚拟网卡, 实现网络通信目的. Flannel 虽然对网络要求较高, 要引入封装技术, 转发效率也受到影响, 但是却可以平滑过渡到 SDN 网络, VXLAN 技术可以和 SDN 很好地结合起来, 值得整个网络实现自动化部署, 智能化运维和管理, 这也是网络技术发展的方向. 所以, Flannel 舍弃了传统网络, 完全新建一套覆盖网络来支持容器, 较适合于新建数据中心网络部署.
Weave
Weave 实质上也是覆盖网络, Weave 可以把不同主机上容器互相连接的网络虚拟成一个类似于本地网络的网络, 不同主机之间都使用自己的私有 IP 地址, 当容器分布在多个不同的主机上时, 通过 Weave 可以简化这些容器之间的通信. Weave 网络中的容器使用标准的端口提供服务(如 MySQL 默认使用 3306), 管理微服务是十分直接简单的. 每个容器都可以通过域名来与另外的容器通信, 也可以直接通信而无需使用 NAT, 也不需要使用端口映射或者复杂的联接. 部署 Weave 容器网络最大的好处是无需修改你的应用代码.
Weave 通过在容器集群的每个主机上启动虚拟路由器, 将主机作为路由器, 形成互联互通的网络拓扑, 在此基础上, 实现容器的跨主机通信. 要部署 Weave 需要确保主机 Linux 内核版本在 3.8 以上, Docker1.10 以上, 主机间访问如果有防火墙, 则防火墙必须彼此放行 TCP 6783 和 UDP 6783/6784 这些端口号, 这些是 Weave 控制和数据端口, 主机名不能相同, Weave 要通过主机名识别子网. Weave 网络类似于主机 Overlay 技术, 直接在主机上进行报文流量的封装, 从而实现主机到主机的跨 Underlay 三层网络的互访, 这是和 Flannel 网络的最大区别, Flannel 是一种网络 Overlay 方案.
三种容器网络方案, 适用于不同的应用场景, 就看数据中心如何选择了, 从难易度上来讲, Callico 最简单, 其次 Flannel,Weave 最复杂, 从网络技术来看, Weave 和 Flannel 都是网络封装技术, 区别在于封装的位置在网络设备上还是主机上. 下图详列了下三种容器网络方案的特点对比:
从物理机到虚拟机, 再到容器, 这是服务器虚拟化技术发展的必然趋势, 容器解决虚拟机的使用限制, 但也将网络引入更复杂的境地, 数据中心网络要去适应这种变化, 要去适配容器, 所以才出现了这么多种容器网络方案, 这些方案都是为容器而生, 从网络层面去适配容器, 是数据中心向容器进化所必须的.
来源: http://network.51cto.com/art/201903/594224.htm