揭秘AWS数据中心VPC解决方案

子网内部通信:揭秘AWS数据中心VPC解决方案

前言

​ 本文介绍了 Amazon Web 服务虚拟私有云 (AWS VPC) 控制平面操作和数据平面封装的原则。此外,本文还介绍了如何使用标准协议实现同一种转发模型。亚马逊尚未公布其 VPC 网络解决方案的详细信息,本文档依赖于公开的信息和作者的研究。编写本文档的动机是,我想指出,无论云网络的外观和感觉多么简单和容易,这些网络仍然像任何其他大型网络一样复杂。

示例环境

​ 图 1-1 说明了在两个弹性云计算 (EC2) 实例 EC2-A 和 EC2-B 上的假想应用程序上运行的 AWS VPC 环境示例。实例 EC2-A 将在物理服务器主机-A 中启动,而实例 EC2-B 稍后将在物理服务器 Host-B 中启动。VPC vpc-1a2b3c4d 在斯德哥尔摩 (eu-North-1) 区域在可用性区 (AZ) eu-North-1c 创建。子网 172.16.31.0/20 可用于 AZ eu-North-1c。实例的子网为 172.31.10.0/24。具有 IP 地址 172.31.10.10 的弹性网络接口 1 (ENI1) 将连接到实例 EC2-A,IP 地址为 172.31.10.20 的 ENI2 将附加到实例 EC2-B。为简单起见,同一安全组 (SG) “sg-nwktimes”,允许 EC2-A 和 EC2-B 之间的所有数据流量)附加到两个实例。

​ 在两个物理服务器中,有一个软件路由器,路由器-1在主机-A和路由器-2在主机-B。服务器使用Offload NIC 连接到 AZ 底层网络,并且来自实例的数据流量直接从EC2发送到Offload NIC ,以绕过hypervisor。AZ 骨干包括三个路由器,路由器-3,路由器-4和路由器-5。此外,还有一个映射服务,表示集中控制平面。它持有一个实例到位置映射数据库,该数据库包含有关在给定 VPC 上运行的每个 EC2 实例的信息。路由器、服务器和映射服务使用 IPv6 寻址。

img

​ 图1-1:总体示例拓扑和 IP 寻址方案

控制平面:实例 EC2-A 主机注册过程

​ 映射服务获取实例到位置映射信息的过程不会由 Amazon 发布。但是,必须有某种注册过程,其中托管服务器将其实例注册到映射服务。映射服务至少需要了解以下特定于实例的信息:(A) 物理位置服务器、(B) IP 地址和 MAC 地址信息、(C) IP/MAC 地址绑定到的 ENI 以及实例所属的 VPC(租户信息)。图 1-2 说明了与映射服务数据库中实例 EC2-A 相关的假定映射条目信息。注册信息可以通过底嵌网络发送,或者可能有一些专用的控制平面通道用于注册消息。

img

图1-2: 实例EC2-A按主机-A注册过程。

控制平面:实例 EC2-B 注册过程(按主机-B)

​ 当实例 EC2-A 在主机 B 中启动时,也会发生相同的注册过程。映射服务现在知道两个 EC2 实例的位置。

img

图1-3: 实例EC2-B注册过程(按主机-B)。

控制平面:通过映射服务进行注册信息分发过程

​ 公共 AWS VPC 文档指出,实例到位置(AWS 可能不使用此术语)映射服务负责仅将信息发布到托管特定 VPC 的服务器。在我们的示例中,这意味着映射服务将发布实例 EC2-A 到主机-B 的可访问性信息和实例 EC2-B 到主机-A 的可访问性信息。图 1-4 说明了通过映射服务进行实例到位置的发布过程。没有关于如何这样做的公共文档。但是,我们可以假定该过程不是数据驱动的,这意味着只有当远程服务器托管到目标的数据,但映射服务在推送模型中发布(没有服务器请求)时,服务器才请求该信息。

img

图1-4: 按映射服务进行注册信息分发过程。

控制平面:与基于LISP的EID注册过程的相似之处

​ AWS VPC 中的 EC2 实例和基于定位器/ID 分离协议 (LISP) 网络中的 EID 到 RLOC 的注册过程(如思科的 SD 访问/校园交换矩阵)具有类似的操作模式。图 1-5 解释了 LISP 模型使用与 AWS VPC 示例相同的示例拓扑。当建筑-A中的 Edge Sw-1 了解主机-B MAC/IP 地址信息(从 GARP/ARP/入口数据)时,它会生成 LISP 映射寄存器消息并将其发送到映射服务器(映射系统中的组件)。在我们的示例中,消息包含映射记录,这些记录描述 (A) 主机附加到的 LISP 实例 ID(租户标识符),(B) 主机 IP 地址和 (C) 映射信息的有效时间。位置信息(最后一跳路由器)编码为附加到映射记录的定位器记录。在位置描述信息中,LISP 地图注册消息包含其他信息,但这些信息超出了本文档的范围。总之,在基于 AWS VPC 和 LISP 的网络中,最终主机的注册看起来相似。

img

图1-5: Edge Sw-2的注册过程。

控制平面:LISP中映射系统的注册信息分发过程

​ 尽管与LISP端点注册过程相比,AWS VPC中的端点注册过程具有相似之处,但如何将有关子网内主机的位置信息提供给边缘设备的过程却有所不同。LISP网络中的边缘设备(入口隧道路由器-iTR)使用LISP Map-Request消息(图1-6),其中iTR在AWS中的Mapping Service期间从Mapping Resolver(映射系统中的组件)询问EID到RLOC信息VPC分发该特定VPC中具有活动EC2实例的所有服务器的位置信息,并且无需请求机制即可运行。从这个意义上讲,AWS VPC解决方案与基于BGP EVPN的网络(主要用于数据中心)有一些相似之处,其中VTEP交换机将已连接主机的NLRI通告给BGP EVPN Route-Reflector(通常是Spine交换机),后者又将这些通告给Route-Reflector客户端(其他VTEP开关)。NLRI导入策略基于路由目标(BGP扩展社区路径属性)。但是,基于BGP EVPN的解决方案中没有使用映射系统/服务。映射请求过程如图1-6所示。主机B向主机A发送数据(为简化起见,忽略了ARP进程)。当Edge Sw-2接收到数据时,它将检查本地Mapping-Cache(MC),并且由于MC中还没有EID-to-RLOC信息,因此它将Map-Request消息发送给Map-Responder。Map-Responder从Map-Server EID-to-RLOC映射数据库中检查映射信息是否可用。选中“ Check”,并且Map-Resolver使用map-Reply消息响应Edge Sw-2,其中描述了Host-A的位置。Edge Sw-2将信息存储在其本地映射缓存中,现在它可以将数据发送到Host-A。

img

图 1-6: LISP Edge Sw-2的LISP映射请求过程。

​ 从理论上讲,可以使用 LISP 构建同一种分布机制,其中端点注册到映射服务,然后将映射信息分发到其他边缘交换机,而无需单独的请求过程。LISP 路由器可以通过映射服务器从 EID 到 RLOC 数据库重新分发到 BGP,并通告给所有 BGP 对等体。当通过代理隧道路由器 (PxTR) 将 EID 前缀从 LISP 站点通告到非 LISP 站点时,将使用此解决方案。图 1-7 说明了如何使用此解决方案将端点信息重新分发到边缘开关。此方法的问题在于,CP 将自己宣传为重新分配路由的下一跃点。这表示 CP 将位于不是首选模型的数据路径中。问题是,我们应该尽一切可能吗?我的观点是,即使LISP能够做到这一点,这是一个过于复杂的解决方案,并没有意义这样做。此外,它是否工作取决于供应商设备和运行在该设备上的代码。有些设备先进行 RIB 查找,然后进行 LISP 映射缓存查找,而某些设备的工作方式相反。如果通过 LISP 和 BGP 接收 EID 位置信息,首先检查哪个表确实很重要。如果首先验证 LISP 映射缓存,并且查找结果为负,则触发 LISP 映射请求过程。

img

图 1-7:*通过映射服务器将 LISP 重新分配到 BGP。*

控制平面:结论

​ 虽然 AWS VPC 和基于 LISP 的网络中使用的注册过程有相似之处,但将映射信息分发到边缘设备(交换机/服务器)的方法是不同的。在 AWS VPC 中,终结点位置注册到映射服务,从该服务分发到服务器。在基于 LISP 的模型中,EID 注册到映射服务器,然后由 iTR 根据需要请求。

数据平面:AWS VPC - VPC 隧道

​ 没有有关 AWS VPC 数据平面封装过程的详细公开信息。但是,AWS VPC 公共文档指出 VPC 标记在 VPC 标头中进行。此外,我们可以假设有关弹性网络接口 (ENI) 的信息也包含在 VPC 标头中。实例标识符可能在 VPC 隧道标头中携带,但此假设不基于任何文档。请注意,一些文档指出 AWS 可用区域上的底嵌网络使用 IPv6 寻址。图 1-8 说明了主机上实例 EC2-A 向主机 B 上运行的实例 EC2-B 发送 ICMP 请求消息的事件。在此阶段,所有实例注册信息分发和 ARP 进程由实例完成。当软交换机收到 ICMP 请求消息到非本地目标时,它会进行位置缓存查找以查找转发信息。它使用 Host-B 的 IP 地址 (2001:db8:0:100:2) 作为外部 IPv6 标头中的目标 IPv6 地址及其 IPv6 地址 (2001:db8:0:100:1) 作为源 IPv6 地址来构造隧道标头。然后,它将协议和端口信息添加到传输层标头中。此外,还有一个用于传输实例特定信息的 VPC 标头。VPC-Id/Tag 标识实例所属的租户,ENI 定义托管服务器内的位置。原始 ICMP 消息包装在隧道标头中,然后将消息发送到主干路由器。骨干路由器根据外部 IPv6 标头信息转发数据包。

img

图1-8:VPC*封装过程。*

数据平面:LISP 结构 - VXLAN 隧道

​ 图 1-9 说明了主机 A 向 Host-B 发送 ICMP 请求消息的过程。Edge Sw-1 接收消息,并基于从本地 LISP 映射缓存找到的信息封装该消息。它将最后一跳路由器 Sw-2 (192.168.10.2) 的 IP 地址设置为外部 IP 标头中的目标 IP 地址,并使用其 IP 地址 (192.168.10.1) 作为源地址。VXLAN 在传输层中使用 UDP,其中目标 UDP 端口 4789 指示下一个标头是 VXAN 标头。在此示例中,VXLAN 标头还具有基于组策略 (GBP) 扩展标头,该标头包含组策略 ID 字段中定义的可伸缩组标记 (SGT) 信息。原始 ICMP 请求包装在这些隧道标头中。封装过程后,Edge Sw-1 将封装的 ICMP 请求消息发送到主干路由器,从而根据外部 IP 标头中的目标 IP 地址转发决策。

img

图1-9: VPC封装过程。

端点安全性:安全组和可扩展组标签

​ 图 1-10 中的左侧表示 AWS VPC 可用区,右侧表示园区结构。

​ 在主机中启动 EC2 实例时,您可以将默认或修改的安全组 (SG) 附加到该实例。在我们的示例中,实例 EC2-B 有一个 SG sg-nwktimes,它只允许实例 EC2-B (172.31.10.2) 的入站 HTTP 连接。此外,还有一个出站规则,它允许将 HTTP 连接到属于安全组 sg-网站的目标。这些规则是有状态的,这意味着返回流量允许入站和出站连接。此解决方案支持宏分段和微分段(子网中的分段)。此信息不在 VPC 封装的数据包中传输。

​ 在园区结构中,您可以使用可扩展组标记 (SGT) 进行宏和微分段。园区结构示例显示 SG 矩阵,其中垂直 SGT 表示源 SGT,而水平 SGT 定义目标 SGT。 SGT 77 附加到主机 A,并且所有流量允许在具有相同 SGT 77 作为其标识符的主机之间所有流量。此外,允许来自 SGT 77 的主机 A 的 HTTP/HTTPS 连接连接到与 SGT 22 标识的主机。请注意,SGT 信息在组 Polic-Id 字段中的 VXLAN 标头中携带。基于 SGT 的分段模型本质上是无状态的,必须分别在两个方向允许流量。

img

图 1-10: AWS VPC SG 与 VXLAN SGT 相比。

引用

[RFC 6830]D. Farinacci等人,”定位器/身份证分离协议”,RFC 6830,2013年1月。

[RFC 6833]V. 富勒和D.法里纳奇,”定位器/ID分离协议(LISP)地图-服务器接口”,RFC 6833,2013年1月。

[LISP 控制平面]D. Farinacci等人,”定位器/ID分离协议(LISP)控制平面”,草案-ietf-lisp-rdc6833bis-25,2019年6月16日。

什么是亚马逊 Vpc?

https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html

AWS re: 发明 2015 |(NET403)又一天,又十亿包

https://www.youtube.com/watch?v=3qln2u1Vr2E

AWS re: 发明 2017: 又一天, 又一个十亿流量 (NET405)

https://www.youtube.com/watch?v=8gc2DgBqo9U