为什么集群需要 Overlay 网络

以下文章来源于真没什么逻辑  , 作者Draveness
为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章 , 我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响 。如果你有想要了解的问题 , 可以在文章下面留言 。
对计算机网络或者 Kubernetes 网络稍有了解的工程师都应该听说过延展网络(Overlay Network) , Overlay 网络其实并不是一门新技术 , 它是指构建在另一个网络上的计算机网络[^1] , 这是一种网络虚拟化技术的形式 , 近年来云计算虚拟化技术的演进促进了网络虚拟化技术的应用[^2] 。
为什么集群需要 Overlay 网络

文章插图
 
overlay-network
【为什么集群需要 Overlay 网络】图 1 - 延展网络
因为 Overlay 网络是建立在另一个计算机网络之上的虚拟网络 , 所以它不能独立出现 , Overlay 底层依赖的网络就是 Underlay 网络 , 这两个概念也经常成对出现 。
Underlay 网络是专门用来承载用户 IP 流量的基础架构层 , 它与 Overlay 网络之间的关系有点类似物理机和虚拟机 。Underlay 网络和物理机都是真正存在的实体 , 它们分别对应着真实存在的网络设备和计算设备 , 而 Overlay 网络和虚拟机都是依托在下层实体使用软件虚拟出来的层级 。
为什么集群需要 Overlay 网络

文章插图
 
network-and-compute
图 2 - 网络与计算
在分析 Overlay 网络的作用之前 , 我们需要对它的常见实现有大概的了解 , 在实践中我们一般会使用虚拟局域网扩展技术(Virtual Extensible LAN , VxLAN)组建 Overlay 网络 。在下图中 , 两个物理机可以通过三层的 IP 网络互相访问:
为什么集群需要 Overlay 网络

文章插图
 
VxLAN-overlay-network
图 3 - VxLAN 组成的 Overlay 网络
VxLAN 使用虚拟隧道端点(Virtual Tunnel End Point、VTEP)设备对服务器发出和收到的数据包进行二次封装和解封 。
上图中两个 VTEP 会相互连接并获得网络中的 mac 地址、IP 地址等信息 , 例如 , 服务器 1 中的 VTEP 需要知道想要访问绿色网络中的 10.0.0.2 虚拟机需要先访问 IP 地址为 204.79.197.200 的服务器 2 。这些配置可以被网络管理员手动配置、自动学习、也可以通过上层的管理器设置 。当绿色的 10.0.0.1 虚拟机想要向绿色的 10.0.0.2 发送数据时 , 会经过以下几个步骤:
为什么集群需要 Overlay 网络

文章插图
 
overlay-network-packet
图 4 - Overlay 网络中的数据包
  1. 绿色的 10.0.0.1 会将 IP 数据包发送给 VTEP;
  2. 服务器 1 的 VTEP 收到 10.0.0.1 发送的数据包后;
    1. 从收到的 IP 数据包中获取目的虚拟机的 MAC 地址;
    2. 在本地的转发表中查找该 MAC 地址所在服务器的 IP 地址 , 即 204.79.197.200;
    3. 将绿色虚拟机所在的虚拟网络标识符(VxLAN Network Identifier、VNI)以及原始的 IP 数据包作为负载 , 构建新的 UDP 数据包;
    4. 将新的 UDP 数据包发送到网络中;
  3. 服务器 2 的 VTEP 收到 UDP 数据包后;
    1. 去掉 UDP 数据包中的协议头;
    2. 查看数据包中 VNI;
    3. 将 IP 数据包转发给目标的绿色服务器 10.0.0.2;
  4. 绿色的 10.0.0.2 会收到绿色服务器 10.0.0.1 发送的数据包;
在数据包的传输过程中 , 通信的双方都不知道底层网络做的这些转换 , 它们认为两者可以通过二层的网络互相访问 , 但是实际上经过了三层 IP 网络的中转 , 通过 VTEP 之间建立的隧道实现了连通 。除了 VxLAN 之外 , Overlay 网络还有很多实现方案 , 不过也都大同小异 。Overlay 网络虽然能够利用底层网络在多数据中心之间组成二层网络 , 但是它的封包和拆包过程也会带来额外开销 , 所以为什么我们的集群需要 Overlay 网络呢 , 本文将介绍 Overlay 网络解决的三个问题: