本章将帮助你回答以下问题
- 可以用哪些方式将 Clos 拓扑连接到外部网终?
- 边缘部署路由协议的最佳实践是什么?
- 企业应如何处理混合云中的连接?
连接模型
为什么要连接到外部世界?
数据中心连接到外部世界的原因很多。如果你要对外提供某种服务(例如搜索服务广告推荐系统或内容发布),那么只有连接到外部网络上,其他人才能访问你的应用另一个越来越常见的场景是数据中心的一部分部署在云中,因此需要外部连接来访问这部分内容。第三个原因是需要连接到外部以获取数据,例如运行 Web 爬虫程序抓取数据,然后由数据中心内运行的应用程序对其进行操作(例如,构建搜索索引或为机器学习模型提供训练数据)
外部连接的带宽要求
数据中心内部的带宽可能非常大。在一个采用二层 Clos 拓扑的数据中心中,假如包含四个spine 交换机和 16个leaf交换机,leaf和spine 之间采用 100GbE 连接,
则leaf之间的连接为 400GbE,而每个 spine 交换机需要处理的带宽为 1.6 Tbps(16x 100GbE)。在更大的网络中,例如有 32 个或者 64 个 leaf 交换机的网络中,spine 需要处理的带宽会更高 (3.2 或 6.4 Tbps) 。由于每个 leaf 都连接到四个或更多的 spine 上,因此数据中心网络的总带宽容最可以轻松超过 10 Tbps。高带宽容量是现代数据中心网络区别于传统数据中心的一个重要特征。
将Clos拓扑连接到外部世界
图 9-1 展示了将两层 Clos 拓扑连接到外部世界的最常见的方法。图中引入了一种新的 leaf 交换机,称为 border leaf交换机,有时也称为出口 leaf 交换机。该交换机与其他 leaf 交换机相似,唯一的不同之处在于,它并不连接内部的服务器,而是连接到面向 Internet 的路由器,然后再通过这些路由器连接到外部的世界。
Border Leaf 交换机的数量取决于网络内部流量带宽和外部流量带宽之间的收敛比。最少需要两个 Border Leaf 交换机,以避免单点故障。每个 Border Leaf 交换机都会连接到一个 Internet路由器上,不过更常见的是连接到一对 Internet 路由器上,这样单条链路故障不会导致一台 Border Leaf 交换机失效。
Border Leaf 交换机会连接到所有spine交换机。
二层Clos连接到外部世界
三层Clos连接到外部世界
使用spine交换机将Clos拓扑连接到外部世界
服务
Border Leaf 节点还可以用于放置各种网络服务(例如防火墙和负载均衡器),以对外部世界到数据中心的访问进行控制。防火墙通常部署在 Border Leaf 节点上,以保只有授权的流量才能在内部和外部网络之间通过。在图 9-4 中画出的砖墙就是防火墙。
图9-4 中的 Border Leaf交换机使用了两个 VRF,其中绿色的 VRF 用于内部网络,黑色的 VRF 用于外部网络。spine 交换机和非 Border Leaf 交换机不需要关注这种VRF 的用法,它们使用缺省的VRF 相互通信以及与 Border Leaf 交换机通信。Internet 路由器也不需要了解 Border Leaf 交换机是如何使用 VRF的。
Border Leaf交换机通过 BGP,OSPF 或者 IS-IS 学习路由,并将通过内部网络学习得到的路由放在绿色的VRF中,通过 Internet 路由器学习得到的路由 (通常是默认路由)则放在黑色的VRF中。
防火墙连接到 Border Leaf 交换机上。Border Leaf 交换机有两个或更多网络接口连接到防火墙。这些接口不必是物理链路,而可以是在一条物理链路上通过不同的 VLAN标签创建多个逻辑接口。在这种情况下,VLAN标签就是所谓的L3子接口。Border Leaf交换机将两个接口标记为属于不同的VRF。在我们的示例中,一个属于黑色的VRF,另一个属于绿色的VRF。防火墙有两个 BGP 会话:一个在绿色子接口上,另一个在黑色子接口上。
和spine 交换机以及常规的 leaf 交换机一样,防火墙也不知道 VRF。防火墙只是将通过绿色链接学习得到的路由重新发布到黑色链接上的BGP 会话,反之亦然。因此Border Leaf通过Internet路由器学习得到的默认路由会通过黑色链接发送到防火墙,防火墙通过绿色链接上的 BGP 会话重新发布该路由。从内部网络穿越到外部网络的流量的角度来看,流量现在自动流过了防火墙。
跟踪分析从服务器到 Internet 的流量:
1)连接到 L1 的服务器上发往外部世界的流量到达 L1,因为 L1 是这些服务器的缺省网关。
2)L1 看到路由与默认路由匹配,根据数据包头计算得到的哈希值选择一个 spine交换机进行发送。
3)和上一步骤一样,spine 根据哈希将数据包传递到其中一个 Border Leaf。
4)Border Leaf将数据包通过绿色的链接发送到防火墙,因为这是默认路由的出向接口。
5)数据包到达防火墙。如果该数据包未被授权转发到外部,则防火墙会丢弃该数据包。
6)如果防火墙认为该数据包是合法的,那么它将通过黑色链接路由该数据包 (从黑色链接学习得到的默认路由)
7)现在数据包被转发回 Border Leaf,但这一次是通过黑色 VRF 中的黑色链接传送的。
8)Border Leaf在黑色VRF中查找路由,这一次将数据包分发到了Internet路由器上
从互联网路由器到内部网络的数据包的处理与此过程相反。在这种情况下,黑色VRF 具有到内部网络的路由,该路由将数据包发向防火墙。只有防火墙允许了数据包,它才会通过绿色链接将数据包传送回 Border Leaf。
如果还有类似负载均衡器之类的其他服务,那么也可以通过类似的方式将它们连接起来,流量先从防火墙到负载均衡器,然后再进入内部或外部。
混合云连接
混合云的定义是由企业的本地服务器和云服务供应商的服务器一起组成的数据中心。这两组服务器彼此之间可以透明地通信,就像在一个本地数据中心中一样。
在公有云中运行服务的最常见模式是采用 VPC (Virtual Private Cloud,虚拟私有云)实例。一个 VPC 内包含多个通过 L3 网络连接的计算节点。如同目前为止我们讨论过的那些云原生数据中心网络一样,VPC 内的连接是纯粹的 L3。我没有听说有任何云服务供应商在 VPC 内提供L2 连接。此外也不能在 VPC 内使用多播或广播。VPC 内也不运行任何路由协议。
每个 VPC 中包含一个或多个子网。每个 VPC 都有一个虚拟的私有路由器 (在某些云解决方案中称为虚拟私有网关) ,该路由器提供子网之间的路由,并控制从外部对VPC的访问。VPC 可以通过 NAT 来访问Internet,或提供外部可以访问的IP地址。这些IP 地址通过网关路由到内部的终端上。每个 VPC 也可以通过同一网关与其他VPC 通信。一个 VPN 也可以通过这个网关和其他的 VPN 进行通信。
从外部连接到 VPC 有两种方法: 要么使用 VPN,要么直接通过路由连接到云服务提供商。
第二种方法有两种变体:
- 一种是客户网络直接挂接到云服务供应商的网络上
- 一种是云服务供应商提供一个连接到客户本地数据中心的 WAN 连接。
图 9-5展示了这些将本地数据中心连接到 VPC 的方法。
基于 VPN的连接
这是最常见的选择,但灵活性也最差。由于需要对流量进行加/解密,和经过Internet 的不稳定性,导致这种方式的容量和性能不高。通常选择它的理由是因为它比其他两者更便宜。
直接连接
如果你需要在本地站点和 VPC 之间传输大量数据,或者点对点的 VPN 连接不能满足复杂的网络需求,则建议使用此选项。不同的云服务提供商使用了不同的术语来描述这种服务。AWS 将其称为 DirectConnect,Microsoft Azure 将其称为 ExpressRoute,而Google 则称为 Cloud Inter-connect。云服务供应商要么直接与本地客户网络互连,要么通过运营商的 WAN 链路互连,例如采用点对点以太网 (例如 QinQ)或者 MPLS VPN 连接。
所有的这些选项,包括点对点以太网连接的方式,都只提供本地数据中心和 VPC之间的路由连接。因此无论是在 VPC 内还是 VPC 和本地数据中心之间的连接都是L3连接。
考虑图 9-6 所示的例子,一家企业在纽约和旧金山两地均设有办公室,这两处办公室分别在云服务供应商的东海岸和西海岸地区有对应的 VPC 实例。纽约和旧金山数据中心路由器的路由表中同时存在到这两个 VPC 的路由。当从纽约的办公室访问东海岸 VPC时,你会希望数据包不采用图中所示的经过西海岸 VPC的较长路径而是采用较短的直接到东海岸 VPC 的路径。在这种情况下,BGP 允许你通过 route-map 进行各种策略决策。
所有云服务供应商都允许采用 BGP 来通告私有和公网IP 地址。BGP 使用了私有ASN来建立对等会话,并且这是一个外部 BGP 多跳会话。如果在 VPC 和本地数据中心中同时运行了IPv4和IPv6,则需要为IPv4和IPv6分别创建单独的BGP会话。目前所有云服务供应商都是这样处理的。当从云服务供应商的网络直接连接到客户的本地数据中心时,会在面向 Internet 的路由器上建立 BGP 对等会话。
他们还会阻止将VPC网关作为到Internet的中转站点。换句话说,通过这些对等会话,VPC网关可以通过本地数据中心访问 Internet,特别是在本地路由器通告了默认路由的情况下。但是本地数据中心无法使用云作为访问 Internet 的中转站。
为了能够快速检测故障,云服务供应商还建议在互连链路运行 BFD