4. 路由协议选型

在Leaf-Spine架构中,路由协议的选择直接决定了网络的收敛速度、可扩展性和运维复杂度。传统三层数据中心常使用OSPF,但在Leaf-Spine这种高度对称、横向扩展的Clos拓扑中,BGP逐渐成为事实标准。理解BGP为何胜出、eBGP与iBGP如何取舍、AS号如何规划,是设计一张可平滑扩容的数据中心网络的关键。

一、为什么Leaf-Spine更倾向BGP而非OSPF

Leaf-Spine的本质是“每个Leaf都连接到所有Spine”,形成全互联的等价多路径(ECMP)结构。OSPF作为链路状态协议,每台设备都要维护整个区域的链路状态数据库(LSDB),当Leaf数量从几十台增长到几百台时,LSDB规模、SPF计算开销和泛洪流量都会显著上升。BGP是路径矢量协议,设备只维护到达目的前缀的路径属性,不感知全网拓扑,天然具备更好的横向扩展能力。

更关键的是策略控制能力。BGP通过Local Preference、MED、AS-Path、Community等属性,可以精细控制流量从哪个Spine上行、在哪个Leaf下行。例如,在双平面Spine设计中,可以用Community标记让特定业务流量优先走平面A,故障时再切到平面B。OSPF只能基于Cost做简单选路,难以实现这种业务级流量工程。

此外,BGP的收敛行为更可控。OSPF在拓扑变化时会触发全网SPF重算,而BGP只更新受影响的前缀路径,配合BFD(Bidirectional Forwarding Detection)可以实现毫秒级故障检测与快速切换。在Leaf-Spine中,Spine通常不承载终端子网,只做转发,Leaf才是网关和子网所在,因此路由条目集中在Leaf侧,BGP的按前缀更新机制非常契合这种“边缘丰富、核心简洁”的模型。

二、eBGP与iBGP的对比与选择

在Leaf-Spine中,eBGP和iBGP的核心区别在于AS号边界和路由传播规则。eBGP用于不同AS之间,默认只向eBGP邻居通告自己及自己客户的路由,AS-Path用于防环;iBGP用于同一AS内部,要求全互联或使用路由反射器,且从iBGP学到的路由不会默认转发给其他iBGP邻居,必须依赖RR或联邦。

实际部署中,主流方案是“Leaf和Spine分属不同AS,全部使用eBGP”。例如,每台Leaf使用独立的私有AS号(如65001、65002……),所有Spine使用同一个AS号(如65100)。这样Leaf与Spine之间全部是eBGP邻居,路由传播规则简单,不需要RR,也不存在iBGP全互联的N²问题。每台Leaf只把自己的子网通告给Spine,Spine再反射给其他Leaf,AS-Path天然防止环路。

另一种方案是“整个数据中心使用一个AS,Leaf与Spine之间跑iBGP,Spine作为路由反射器”。这种方案适合需要统一AS号对外呈现的场景,但配置更复杂:Spine要配置RR,Leaf要配置RR客户端,且iBGP的下一跳处理、路由反射簇ID都需要仔细规划。相比之下,eBGP方案在Leaf-Spine中更简洁、更易排障,因此被广泛采用。

Leaf-Spine eBGP 路由传播示意 Spine-1 AS 65100 Spine-2 AS 65100 Leaf-1 AS 65001 Leaf-2 AS 65002 Leaf-3 AS 65003 10.1.1.0/24 10.1.2.0/24 10.1.3.0/24 eBGP 邻居(Leaf 独立 AS,Spine 统一 AS) Leaf 本地子网通告 AS-Path 防环:Leaf-1 收到来自 Spine 的路由 若 AS-Path 含 65001 则丢弃

三、AS号规划:从私有AS到可扩展编号

AS号规划是eBGP方案落地时最容易埋坑的环节。推荐使用私有AS号范围(64512–65534)或4字节私有AS号(4200000000–4294967294),避免与公网AS冲突。常见规划方式有两种:

  • Spine统一AS + Leaf独立AS:所有Spine使用同一个AS(如65100),每台Leaf使用唯一AS(如65001、65002……)。优点是Spine之间不需要iBGP,Leaf之间通过Spine反射路由,AS-Path天然防环。缺点是Leaf数量多时AS号消耗快,但私有AS空间足够大,通常不是问题。
  • 按Pod或机架分配AS块:例如Pod1的Leaf使用65001–65010,Pod2使用65011–65020,Spine统一65100。这种方式便于运维人员通过AS号快速定位设备位置,适合大型多Pod数据中心。

规划时需注意:同一台Spine上,不同Leaf邻居的AS号必须不同,否则eBGP会认为收到自己发出的路由而丢弃。另外,如果Leaf需要与外部网络(如WAN边缘)建立eBGP,应确保内部AS号与外部AS号不冲突,必要时使用allowas-in或as-override,但需谨慎评估环路风险。

四、路由反射器替代方案:为什么eBGP更简洁

在iBGP方案中,路由反射器(RR)是解决全互联问题的标准手段。Spine作为RR,Leaf作为RR客户端,Leaf之间通过Spine反射路由。但RR引入了簇ID、Originator ID、反射规则等额外概念,配置和排障复杂度明显上升。例如,当Spine-1和Spine-2同时作为RR时,需要确保它们属于同一簇或不同簇,否则可能产生路由环路或次优路径。

eBGP方案天然不需要RR。每台Leaf与所有Spine建立eBGP邻居,Leaf把自己的子网通告给Spine,Spine再通告给其他Leaf。由于eBGP的AS-Path防环机制,Leaf不会接受包含自己AS号的路由,因此不会形成环路。Spine在这里扮演的是“路由转发者”而非“反射器”,逻辑更清晰。

当然,eBGP方案也有需要注意的地方:Spine需要关闭“只向eBGP邻居通告自己及客户路由”的默认行为,通常使用neighbor <ip> next-hop-self或neighbor <ip> send-community等命令确保路由正确传播。此外,Leaf与Spine之间的互联地址建议使用/31或/30,减少地址浪费。

实践建议:在中小规模Leaf-Spine(Leaf数量≤50)中,优先选择“Spine统一AS + Leaf独立AS”的eBGP方案,无需RR,配置简单,收敛快。当Leaf数量超过100台时,可考虑引入BGP Confederation或分区域RR,但eBGP方案通过合理的AS号规划仍可支撑数百台Leaf。

五、配置示例与结果观察

以下为Leaf-1(AS 65001)与Spine-1(AS 65100)建立eBGP邻居的示例配置(以通用语法示意):

! Leaf-1 配置
router bgp 65001
  neighbor 10.0.0.1 remote-as 65100
  neighbor 10.0.0.1 description Spine-1
  network 10.1.1.0/24
!
! Spine-1 配置
router bgp 65100
  neighbor 10.0.0.2 remote-as 65001
  neighbor 10.0.0.2 description Leaf-1
  neighbor 10.0.0.2 next-hop-self

配置完成后,在Leaf-1上执行show ip bgp summary,应看到邻居状态为Established,且show ip bgp中能看到来自Spine-1的10.1.2.0/24和10.1.3.0/24路由,AS-Path分别为65002和65003。在Spine-1上执行show ip bgp,应看到来自Leaf-1的10.1.1.0/24,AS-Path为65001。若某条路由缺失,优先检查network命令是否精确匹配、next-hop-self是否配置、以及ACL是否放行TCP 179端口。

通过BFD与BGP联动,可将故障检测时间从默认的Hold Time(通常180秒)缩短到毫秒级。在Leaf与Spine的eBGP邻居下配置neighbor <ip> fall-over bfd,当链路故障时,BFD在50ms内检测到并通知BGP,BGP立即撤销该邻居的路由,流量切换到其他Spine。这是Leaf-Spine高可用设计中的关键一环。

总结来看,BGP在Leaf-Spine中的优势并非偶然:路径矢量特性适配Clos拓扑,策略属性支持流量工程,eBGP方案避免RR复杂度,合理的AS号规划保证可扩展性。掌握这些选型逻辑,才能在面对不同规模的数据中心时做出正确决策。