5. Routing Protocol Design (路由协议设计)
5. Routing Protocol Design (路由协议设计)
本节讨论为大规模数据中心选择合适路由协议的原因, 并提供使用 EBGP 与 Clos 拓扑的详细配置指南。
5.1 Choosing EBGP as the Routing Protocol (选择 EBGP 作为路由协议)
在为大规模数据中心选择路由协议时, 几个候选协议都被考虑过, 包括 OSPF, IS-IS, EIGRP 和 BGP。本节解释了为什么选择 EBGP 作为最适合满足第 2.5 节中概述的需求的协议。
考虑的协议
OSPF 和 IS-IS 是常用的链路状态内部网关协议 (IGP)。它们的主要优势是:
- 广泛的实现和运营经验
- 快速收敛
- 支持 ECMP
然而, 对于大规模数据中心, 这些协议存在一些挑战:
- 全网状态同步: 所有路由器必须维护相同的链路状态数据库, 这可能导致大规模部署中的扩展性问题。
- 洪泛行为: 链路状态更新被洪泛到整个区域, 这可能会在大型网络中造成大量开销。
- 复杂的区域设计: 虽然可以使用区域来限制洪泛域, 但这会增加设计和运营的复杂性。
- 有限的流量工程: IGP 不提供对前缀下一跳的细粒度控制。
EIGRP 是一种距离矢量协议, 主要由 Cisco 使用。虽然它具有一些有吸引力的特性 (例如, 快速收敛, Diffusing Update Algorithm), 但它的供应商特定性质违反了 REQ2 (多供应商支持)。
BGP 特别是外部 BGP (EBGP) 最初是为互联网设计的, 用于在不同自治系统 (AS) 之间交换路由。虽然它传统上不用于数据中心, 但它具有几个使其非常适合大规模数据中心环境的特性。
为什么选择 EBGP
选择 EBGP 作为大规模数据中心路由协议的理由基于它如何满足第 2.5 节中定义的需求:
REQ1 (水平可扩展性): EBGP 自然适合 Clos 拓扑, 其中每个连接使用不同的 AS 号。这种设计允许通过简单地添加更多相同类型的设备来轻松扩展。
REQ2 (多供应商支持): BGP 是一个开放标准 (RFC 4271), 几乎所有网络设备供应商都支持。数据中心部署所需的 BGP 功能子集相对较小, 这使得在不同供应商的设备之间实现互操作性变得容易。
REQ3 (简单实现): 虽然 BGP 是一个功能丰富的协议, 但数据中心部署可以使用非常简化的配置。关键的简化包括:
- 无 BGP 策略复杂性: 在数据中心内部, 不需要复杂的策略, 这些策略在互联网路由中很常见。
- 简单的前缀通告: 每个设备只通告其本地前缀。
- 直接的对等关系: 仅在直接连接的邻居之间建立 EBGP 会话。
REQ4 (最小化故障域): EBGP 提供了出色的故障隔离:
- 增量更新: BGP 仅发送增量更新, 而不是完整的路由表, 这减少了控制平面开销。
- 点对点会话: EBGP 会话仅在直接连接的邻居之间, 因此链路故障仅影响该会话。
- 无洪泛: 与链路状态协议不同, BGP 不会洪泛路由信息到整个网络。
- AS 边界: 不同的 AS 号提供了自然的隔离边界。
REQ5 (流量工程): BGP 为流量工程提供了出色的工具:
- 下一跳控制: BGP 允许明确控制前缀的下一跳, 这对于实现任播等技术至关重要。
- AS 路径操作: 虽然在简化的数据中心设计中不常用, 但 AS 路径可以在需要时用于影响路由选择。
- 社区: BGP 社区可用于标记和过滤路由。
额外的 EBGP 优势
除了满足明确的需求外, EBGP 还提供了其他几个优势:
运营简单性: EBGP 配置可以高度模板化和自动化。对于给定的 Clos 层级, 每个设备的配置几乎相同, 只有 AS 号和 IP 地址不同。
调试简单性: BGP 具有出色的运营工具和可见性。标准命令如 show ip bgp 和 show ip bgp summary 提供了丰富的信息来排除问题。
稳定性: BGP 在互联网规模的部署中久经考验。虽然数据中心环境不同, 但 BGP 的稳定性和成熟度是有价值的。
灵活性: 如果需要, BGP 可以轻松扩展以支持其他功能, 例如使用 MP-BGP 的 IPv6 或 MPLS L3VPN。
EBGP 与 IBGP
值得注意的是, 虽然本文档重点关注 EBGP, 但也可以使用内部 BGP (IBGP)。然而, EBGP 由于以下原因而更受青睐:
- 无需路由反射器: IBGP 需要全网格或路由反射器来分发路由。在 Clos 拓扑中, EBGP 的自然对等结构消除了这种需求。
- 简化的配置: EBGP 不需要 IBGP 所需的
next-hop-self或其他配置。 - 自动环路预防: EBGP 使用 AS 路径来防止环路, 这在 Clos 拓扑中自然有效。
综上所述, EBGP 为大规模数据中心提供了一个简单, 可扩展且运营友好的路由解决方案, 它有效地满足了本文档中定义的所有需求。
5.2 EBGP Configuration for Clos Topology (Clos 拓扑的 EBGP 配置)
本节提供了在 Clos 拓扑中配置 EBGP 的详细指南。
5.2.1 EBGP Configuration Guidelines and Example ASN Scheme (EBGP 配置指南和示例 ASN 方案)
在 Clos 拓扑中部署 EBGP 的关键设计决策是如何分配自治系统号 (ASN)。有几种方法, 每种都有其权衡。
方案 1: 每个设备唯一的 ASN
在此方案中, 每个路由器都被分配一个唯一的 ASN。这是最灵活的方案, 并提供最大的控制和可见性。
优点:
- 完全控制和可见性: 可以根据 AS 路径轻松识别和跟踪路由。
- 简化的故障排除: 可以立即识别路由来自哪个设备。
- 灵活的流量工程: 可以基于特定设备操作路由。
缺点:
- AS 号消耗: 需要大量的 AS 号。
方案 2: 每层级唯一的 ASN
在此方案中, 同一层级 (例如, 所有 Tier 1 设备) 的所有设备共享相同的 ASN。
优点:
- 减少 AS 号消耗: 只需要每层级一个 AS 号。
- 简化的配置: 同一层级的所有设备具有相同的 AS 号。
缺点:
- 需要
allowas-in: 由于同一层级的设备共享 AS 号, 因此需要allowas-in配置来接受具有自己 AS 号的路由。 - 降低的可见性: 无法仅根据 AS 路径识别特定设备。
方案 3: 混合方案
可以使用混合方案, 其中一些层级使用唯一的 ASN (例如 Tier 1), 而其他层级共享 ASN (例如 Tier 2 和 Tier 3)。
推荐方案
对于大多数部署, 方案 1 (每个设备唯一的 ASN) 是推荐的, 因为它提供了最大的灵活性和可见性。使用 4 字节 ASN [RFC6793], 有足够的私有 AS 号可用 (参见下一节)。
示例 ASN 分配
对于 3 阶段 Clos 拓扑:
- Tier 1 设备: AS 64601 - 64699
- Tier 2 设备: AS 64701 - 64999
- 服务器 / Tier 3 设备 (如果适用): AS 65000 - 65534
对于 5 阶段 Clos 拓扑:
- Tier 1 设备: AS 64501 - 64599
- Tier 2 设备 (上层): AS 64601 - 64699
- Tier 2 设备 (下层) / Tier 3 设备: AS 64701 - 64999
- 服务器 / Tier 4 设备: AS 65000 - 65534
基本 EBGP 配置示例
以下是 Tier 2 设备的典型 EBGP 配置示例:
router bgp 64701
router-id 10.0.1.1
maximum-paths 64
neighbor 10.1.1.1 remote-as 64601
neighbor 10.1.1.1 description Tier1-Device-1
neighbor 10.1.2.1 remote-as 64602
neighbor 10.1.2.1 description Tier1-Device-2
neighbor 10.2.1.1 remote-as 65001
neighbor 10.2.1.1 description Server-1
network 10.0.1.0 mask 255.255.255.0
关键配置点:
maximum-paths: 设置为支持所需的 ECMP 扇出。- 每个邻居都明确配置了远程 AS 号。
- 使用
network命令通告本地前缀。
5.2.2 Private Use ASNs (私有 ASN)
BGP 支持私有使用的 ASN, 类似于私有 IP 地址空间 (RFC 1918)。这些 ASN 不应在全球互联网上通告, 但非常适合数据中心内部使用。
2 字节私有 ASN: 64512 - 65534 (RFC 6996)
- 总共 1023 个 ASN
- 对于较小的部署已足够
4 字节私有 ASN: 4200000000 - 4294967294 (RFC 6996)
- 大量可用的 ASN
- 对于大规模部署是推荐的
对于大规模数据中心, 使用 4 字节私有 ASN 提供了充足的空间, 并允许有意义的 ASN 分配方案, 例如:
- 将 ASN 空间划分为不同的数据中心或集群
- 在 ASN 中编码拓扑信息 (例如, 机架号, 行号)
重要注意事项: 当数据中心需要与外部网络 (例如 WAN 或互联网) 对等时, 必须注意不要泄漏私有 ASN。这通常通过在边缘使用 AS 路径过滤或 remove-private-as 功能来处理 (参见第 5.2.4 节)。
5.2.3 Prefix Advertisement (前缀通告)
在数据中心 EBGP 设计中, 前缀通告应该简单明了。一般原则是:
服务器 / Tier 3 前缀: 连接到服务器的每个 Tier 2 设备 (或 Tier 3 设备, 在 5 阶段 Clos 中) 应该通告与这些服务器关联的前缀。这些前缀通常是:
- 服务器 IP 地址的 /32 主机路由 (用于最大灵活性)
- 小的 /24 或更大的子网 (如果服务器以小组进行管理)
基础设施前缀: 用于设备管理 (例如, 环回地址) 的前缀也应该通告。通常, 每个设备通告其自己的环回作为 /32。
不通告传输前缀: 设备之间的点对点链路使用的 IP 地址通常不需要通告, 因为它们仅用于直接连接的邻居之间的传输。
示例配置
Tier 2 设备通告服务器前缀和自己的环回:
router bgp 64701
network 10.100.1.1 mask 255.255.255.255 ! Loopback
network 10.200.0.0 mask 255.255.255.0 ! Server subnet
动态前缀通告: 在某些情况下, 可能希望动态通告前缀, 例如用于任播服务。这可以通过以下方式实现:
- 使用
redistribute connected通告连接的接口 - 使用路由映射来过滤和控制通告的内容
- 与应用程序集成以动态注入路由
5.2.4 External Connectivity (外部连接)
数据中心通常需要连接到外部网络, 例如:
- WAN 连接到其他数据中心
- 互联网连接
- 企业网络连接
本节讨论如何处理数据中心 EBGP 设计与外部网络之间的边界。
边缘设备: 通常, 一组专用的边缘路由器处理外部连接。这些设备:
- 在内部使用 EBGP 与数据中心 Clos 拓扑对等
- 在外部使用 EBGP (或其他协议) 与外部网络对等
AS 路径处理: 当路由通过边缘传播时, 必须注意 AS 路径:
出站 (数据中心到外部网络):
- 移除私有 AS: 使用
remove-private-as功能从通告到外部对等体的路由中剥离私有 ASN。 - AS 路径前置: 如果需要, 可以使用 AS 路径前置来影响入站流量模式。
- 通告聚合: 通常, 边缘路由器将聚合数据中心前缀并仅通告聚合到外部 (参见第 5.2.5 节)。
入站 (外部网络到数据中心):
- 默认路由: 边缘路由器通常将默认路由 (0.0.0.0/0) 注入数据中心, 以便内部设备可以访问外部目的地。
- 特定前缀: 如果需要更细粒度的路由, 边缘路由器可以通告特定的外部前缀。
示例边缘配置
边缘路由器的配置可能如下所示:
router bgp 64500
! Internal peering
neighbor 10.1.1.1 remote-as 64601
neighbor 10.1.1.1 route-map SET-DEFAULT-ROUTE out
! External peering
neighbor 198.51.100.1 remote-as 65000
neighbor 198.51.100.1 route-map REMOVE-PRIVATE out
neighbor 198.51.100.1 route-map AGGREGATE-ONLY out
route-map SET-DEFAULT-ROUTE permit 10
match ip address DEFAULT-ROUTE
route-map REMOVE-PRIVATE permit 10
set as-path exclude 64512-65534
set as-path exclude 4200000000-4294967294
route-map AGGREGATE-ONLY permit 10
match ip address AGGREGATE-PREFIXES
防火墙和安全: 边缘通常也是实施安全策略的地方, 包括:
- 防火墙规则
- DDoS 防护
- 入站和出站流量过滤
5.2.5 Route Summarization at the Edge (边缘路由汇总)
在数据中心边缘汇总路由是一种最佳实践, 原因如下:
减少通告的前缀数: 向外部网络通告数千或数万个单独的主机路由是不切实际的。汇总将这些减少为少量的聚合前缀。
稳定性: 汇总减少了通告给外部对等体的路由变化次数。数据中心内的单个服务器上线/下线不会影响外部路由。
隐私和安全: 汇总隐藏了数据中心内部拓扑和地址分配的详细信息。
实现汇总
边缘路由器可以通过以下方式实现汇总:
静态聚合: 使用 aggregate-address 命令手动配置聚合:
router bgp 64500
aggregate-address 10.200.0.0 255.255.0.0 summary-only
summary-only 关键字确保只通告聚合, 而不通告更具体的前缀。
基于存在的聚合: 聚合仅在存在至少一个更具体的前缀时才通告:
router bgp 64500
aggregate-address 10.200.0.0 255.255.0.0 summary-only as-set
as-set 选项在聚合的 AS 路径中包含所有组成前缀的 AS 号, 这有助于环路预防。
重要警告: 虽然边缘汇总是推荐的, 但数据中心内部的汇总应该谨慎使用或完全避免。这是因为 Clos 拓扑的属性, Tier 1 设备到每个服务器只有一条路径。内部汇总可能导致黑洞和次优路由 (参见第 8.2 节了解更多详细信息)。