为什么集群需要 Overlay 网络( 二 )

  • 单个集群中的虚拟机规模可能非常大 , 大量的 MAC 地址和 ARP 请求会为网络设备带来巨大的压力;
  • 传统的网络隔离技术 VLAN 只能建立 4096 个虚拟网络 , 公有云以及大规模的虚拟化集群需要更多的虚拟网络才能满足网络隔离的需求;
  • 虚拟机迁移Kuberentes 目前已经是容器编排领域的事实标准了 , 虽然很多传统行业仍然在使用物理机部署服务 , 但是越来越多的计算任务在未来都会跑在虚拟机上 。虚拟机迁移是将虚拟机从一个物理硬件设备移到另一个设备的过程 , 因为日常的更新维护 , 集群中的大规模虚拟机迁移是比较常见的事情 , 上千台物理机组成的大集群使得集群内的资源调度变得更加容易 , 我们可以通过虚拟机迁移来提高资源的利用率、容忍虚拟机的错误并提高节点的可移植性[^3] 。
    当虚拟机所在的宿主机因为维护或者其他原因宕机时 , 当前实例就需要迁移到其他的宿主机上 , 为了保证业务不中断 , 我们需要保证迁移过程中的 IP 地址不变 , 因为 Overlay 是在网络层实现二层网络 , 所以多个物理机之间只要网络层可达就能组建虚拟的局域网 , 虚拟机或者容器迁移后仍然处于同一个二层网络 , 也就不需要改变 IP 地址 。
    为什么集群需要 Overlay 网络

    文章插图
     
    virtual-machine-migration
    图 5 - 跨数据中心的虚拟机迁移
    如上图所示 , 迁移后的虚拟机与其他的虚拟机虽然位于不同的数据中心 , 但是由于上述两个数据中心之间可以通过 IP 协议连通 , 所以迁移后的虚拟机仍然可以通过 Overlay 网络与原集群的虚拟机组成二层网络 , 集群内部的主机也完全不清楚、不关心底层的网络架构 , 它们只知道不同虚拟机之间是可以连通的 。
    虚拟机规模我们在 为什么 Mac 地址不需要全球唯一 曾经介绍过二层网络的通信需要依赖 MAC 地址 , 一个传统的二层网络需要网络设备中存储从 IP 地址到 MAC 地址的转发表 。
    目前 Kuberentes 官方支持的最大集群为 5000 节点 , 如果这 5000 个节点中的每个节点都仅仅包含一个容器 , 这对于内部的网络设备其实没有太大的压力 , 但是在实际情况下 5000 节点的集群中都包含几万甚至几十万个容器 , 当某个容器向集群中发送 ARP 请求 , 集群中的全部容器都会收到 ARP 请求 , 这时会带来极高的网络负载 。
    在使用 VxLAN 搭建的 Overlay 网络中 , 网络会将虚拟机发送的数据重新封装成 IP 数据包 , 这样网络只需要知道不同 VTEP 的 MAC 地址 , 由此可以将 MAC 地址表项中的几十万条数据降低到几千条 , ARP 请求也只会在集群中的 VTEP 之间扩散 , 远端的 VTEP 将数据拆包后也仅会在本地广播 , 不会影响其他的 VTEP , 虽然这对于集群中的网络设备仍然有较高的要求 , 但是已经极大地降低了核心网络设备的压力 。
    为什么集群需要 Overlay 网络

    文章插图
     
    overlay-network-and-arp
    图 6 - Overlay 网络中的 ARP 请求
    Overlay 网络其实与软件定义网络(Software-defined networking、SDN)[^4]密切相关 , 而 SDN 引入了数据平面和控制平面 , 其中数据平面负责转发数据 , 而控制平面负责计算并分发转发表 。VxLAN 的 RFC7348 中只定义了数据平面的内容 , 由该技术组成的网络可以通过传统的自学习模式学习网络中的 MAC 与 ARP 表项[^5] , 但是在大规模的集群中 , 我们仍然需要引入控制平面分发路由转发表 。
    网络隔离大规模的数据中心往往都会对外提供云计算服务 , 同一个物理集群可能会被拆分成多个小块分配给不同的租户(Tenant) , 因为二层网络的数据帧可能会进行广播 , 所以出于安全的考虑这些不同的租户之间需要进行网络隔离 , 避免租户之间的流量互相影响甚至恶意攻击 。传统的网络隔离会使用虚拟局域网技术(Virtual LAN、VLAN) , VLAN 会使用 12 比特表示虚拟网络 ID , 虚拟网络的上限是 4096 个 。
    为什么集群需要 Overlay 网络

    文章插图
     
    vlan-header
    图 7 - VLAN 协议头


    推荐阅读