对计算机网络或者Kubernetes 网络稍有了解的工程师都应该听说过延展网络(Overlay Network),Overlay 网络其实并不是一门新技术,它是指构建在另一个网络上的计算机网络,这是一种网络虚拟化技术的形式,近年来云计算虚拟化技术的演进促进了网络虚拟化技术的应用。
因为 Overlay 网络是建立在另一个计算机网络之上的虚拟网络,所以它不能独立出现,Overlay 底层依赖的网络就是 Underlay 网络,这两个概念也经常成对出现。
Underlay 网络是专门用来承载用户IP 流量的基础架构层,它与Overlay 网络之间的关系有点类似物理机和虚拟机。Underlay 网络和物理机都是真正存在的实体,它们分别对应着真实存在的网络设备和计算设备,而Overlay 网络和虚拟机都是依托在下层实体使用软件虚拟出来的层级。
一、虚拟机迁移
Kuberentes 目前已经是容器编排领域的事实标准了,虽然很多传统行业仍然在使用物理机部署服务,但是越来越多的计算任务在未来都会运行在虚拟机上。虚拟机迁移是将虚拟机从一个物理硬件设备移到另一个设备的过程,因为日常的更新维护,集群中的大规模虚拟机迁移是比较常见的事情,上千台物理机组成的大集群使得集群内的资源调度变得更加容易,我们可以通过虚拟机迁移来提高资源的利用率、容忍虚拟机的错误并提高节点的可移植性。
当虚拟机所在的宿主机因为维护或者其他原因宕机时,当前实例就需要迁移到其他的宿主机上,为了保证业务不中断,我们需要保证迁移过程中的IP 地址不变,因为 Overlay 是在網络层实现二层网络,所以多个物理机之间只要网络层可达就能组建虚拟的局域网,虚拟机或者容器迁移后仍然处于同一个二层网络,也就不需要改变IP 地址。
迁移后的虚拟机与其他的虚拟机虽然位于不同的数据中心,但是由于上述两个数据中心之间可以通过IP 协议连通,所以迁移后的虚拟机仍然可以通过 Overlay 网络与原集群的虚拟机组成二层网络,集群内部的主机也完全不清楚底层的网络架构,它们只知道不同虚拟机之间是可以连通的。
二、虚拟机规模
目前,Kuberentes 官方支持的最大集群为5000 节点,如果这5000 个节点中的每个节点都仅仅包含一个容器,这对于内部的网络设备其实没有太大的压力,但是在实际情况下5000 节点的集群中都包含几万甚至几十万个容器,当某个容器向集群中发送ARP 请求,集群中的全部容器都会收到ARP 请求,这时会带来极高的网络负载。
在使用VxLAN 搭建的Overlay 网络中,网络会将虚拟机发送的数据重新封装成IP 数据包,这样网络只需要知道不同VTEP 的MAC 地址,由此可以将MAC 地址表项中的几十万条数据降低到几千条,ARP 请求也只会在集群中的VTEP 之间扩散,远端的VTEP 将数据拆包后也仅会在本地广播,不会影响其他的VTEP,虽然这对于集群中的网络设备仍然有较高的要求,但是已经极大地降低了核心网络设备的压力。
Overlay 网络其实与软件定义网络(Software-defined networking、SDN)密切相关,而SDN 引入了数据平面和控制平面,其中数据平面负责转发数据,而控制平面负责计算并分发转发表。VxLAN 的 RFC7348 中只定义了数据平面的内容,由该技术组成的网络可以通过传统的自学习模式学习网络中的 MAC 与ARP 表项,但是在大规模的集群中,我们仍然需要引入控制平面分发路由转发表。
三、网络隔离
大规模的数据中心往往都会对外提供云计算服务,同一个物理集群可能会被拆分成多个小块分配给不同的租户(Tenant),因为二层网络的数据帧可能会进行广播,所以出于安全的考虑这些不同的租户之间需要进行网络隔离,避免租户之间的流量互相影响甚至恶意攻击。传统的网络隔离会使用虚拟局域网技术(Virtual LAN、VLAN),VLAN 会使用12 比特表示虚拟网络ID,虚拟网络的上限是4096 个。
4096 个虚拟网络对于大规模的数据中心来说远远不够,VxLAN 会使用24 比特的VNI 表示虚拟网络个数,总共可以表示16,777,216 个虚拟网络,这也就能满足数据中心多租户网络隔离的需求了。
更多的虚拟网络其实是VxLAN 带来的好处,它不应该成为使用VxLAN 的决定性因素。VLAN 协议的扩展协议IEEE 802.1ad 允许我们在以太网帧中加入两个802.1Q 的协议头,两个VLAN ID 组成的24 比特也可以表示16,777,216 个虚拟网络,所以想要解决网络隔离不是使用 VxLAN 或者Overlay 网络的充分条件。
四、总结
目前的数据中心包含多个集群以及海量的物理机,Overlay 网络是虚拟机和底层网络设备之间的中间层,通过Overlay 网络这一个中间层,我们可以解决虚拟机的迁移问题、降低二层核心网络设备的压力并提供更大规模的虚拟网络数量。
在使用VxLAN 构成二层网络中,虚拟机在不同集群、不同可用区和不同数据中心迁移后,仍然可以保证二层网络的可靠性,这能够帮助我们保证线上业务的可用性、提升集群的资源利用率、容忍虚拟机和节点的故障。
集群中虚拟机的规模可能是物理机是几十倍,与物理机构成的传统集群相比,虚拟机构成的集群包含的MAC 地址数量庞大,网络设备很难承担如此大规模的二层网络请求,Overlay 网络通过IP封包和控制平面可以减少集群中的MAC 地址表项和ARP 请求。
VxLAN 的协议头使用24 位的VNI 表示虚拟网络,总共可以表示1600 万的虚拟网络,我们可以为不同的虚拟网络单独分配网络带宽,满足多租户的网络隔离需求。
需要注意的是,Overlay 网络只是一种在物理网络上的虚拟网络,使用该技术并不能直接解决集群中的规模性等问题,而VxLAN 也不是组建Overlay 网络的唯一方法,在不同场景中我们可以考虑使用不同的技术,例如:NVGRE、GRE 等。