4. 多租户EVPN控制平面设计

多租户EVPN的控制平面设计,核心不是“把BGP跑起来”,而是让不同租户的二层/三层可达性在共享的Underlay与BGP基础设施上保持严格隔离,同时让同一租户跨站点的EVI能够正确互通。要做到这一点,必须先把三个概念钉死:EVI(EVPN Instance,租户在一个EVPN域内的实例)、RD(Route Distinguisher,路由区分符)和RT(Route Target,路由目标)。它们分别解决“我是谁”“这条路由属于谁”“这条路由该被谁导入”三个问题。

一、租户到EVI的映射:先定边界,再定标识

EVI是租户在EVPN控制平面上的逻辑实例。一个租户可以只有一个EVI(例如单VLAN或单桥域),也可以有多个EVI(例如多VLAN、多网段、多业务)。设计的第一步是建立“租户—EVI—VLAN/网段”的映射表。常见做法是:每个租户的每个二层广播域对应一个EVI,EVI ID在PE设备上本地唯一即可,但为了运维清晰,建议全网统一规划,例如用“租户编号×100+业务编号”作为EVI ID。

在华为/华三/思科等主流实现中,EVI通常通过evpn vpn-instance或l2vpn evpn实例来承载,并与bridge-domain或vlan绑定。例如租户A有两个VLAN:VLAN 10(办公)和VLAN 20(生产),则规划EVI 1001和EVI 1002,分别绑定BD 10和BD 20。这样做的目的是让控制平面上的每条EVPN路由都能明确归属到某个租户的某个业务域,避免后续RD/RT规划时出现“一锅粥”。

二、RD规划:让相同前缀不再冲突

RD的作用是让不同PE上相同的MAC/IP前缀在BGP表中成为不同路由。EVPN中,Type-2(MAC/IP Advertisement)和Type-3(Inclusive Multicast Ethernet Tag)等路由都携带RD。如果两个租户都使用相同的MAC地址或IP地址,没有RD就会在BGP表中冲突。因此,RD必须全网唯一,且最好与租户/EVI有可读的对应关系。

推荐两种RD格式:

  • ASN:NN:例如65000:1001,其中65000是本地AS,1001是EVI编号。适合单AS或联盟场景。
  • IP:NN:例如10.0.0.1:1001,其中10.0.0.1是PE的Loopback0地址,1001是EVI编号。适合多AS或需要按PE区分RD的场景。

实际工程中,如果租户数量多、EVI数量大,建议采用“PE Loopback: EVI ID”格式,这样每个PE上同一EVI的RD天然不同,且能通过RD反查是哪个PE发布的哪条EVI路由。例如PE1(Loopback 10.0.0.1)上EVI 1001的RD为10.0.0.1:1001,PE2(Loopback 10.0.0.2)上同一EVI的RD为10.0.0.2:1001。这样即使两个PE发布了相同的MAC地址,BGP也会视为两条不同路由,由RT决定是否导入。

三、RT规划:控制路由的导入与导出

RT是BGP扩展团体属性,分为Export RT和Import RT。Export RT决定“我发布的路由带什么标签”,Import RT决定“我接收哪些标签的路由”。EVPN中,RT是租户隔离的关键:只有Export RT与对端Import RT匹配的路由才会被导入到对应的EVI中。

RT规划通常有两种模式:

  • 对称模式:同一EVI的Export RT和Import RT相同,例如EVI 1001的RT为65000:1001。这是最简单、最常用的方式,适合大多数单租户单EVI场景。
  • 非对称模式:Export RT和Import RT不同,用于Hub-Spoke、中心站点需要导入所有分支路由但分支只导入中心路由的场景。例如中心站点Export RT为65000:1001,Import RT为65000:1001和65000:2001;分支站点Export RT为65000:2001,Import RT为65000:1001。

对于多租户场景,建议采用“租户ID:EVI ID”作为RT,例如租户A的EVI 1001对应RT 100:1001,租户B的EVI 2001对应RT 200:2001。这样即使两个租户使用相同的EVI ID,RT也能区分开。如果租户数量超过AS号范围,可以使用4字节AS号或IP格式RT。

四、BGP对等体与路由反射器部署

EVPN控制平面依赖BGP传递EVPN路由。在中小规模网络中,PE之间可以建立全互联的IBGP对等体;但在多租户、多PE场景下,全互联会导致N²条会话,扩展性差。因此,通常部署路由反射器(RR)来集中反射EVPN路由。

RR部署要点:

  • RR与所有PE建立IBGP对等体,PE之间不需要直接建立对等体。
  • RR上需要配置address-family l2vpn evpn,并允许客户端。
  • RR本身不修改EVPN路由的下一跳,除非配置了next-hop-self。在EVPN中,通常保持下一跳为发布该路由的PE,以便流量正确转发。
  • 如果跨AS,需要在AS边界部署ASBR,并配置ebgp对等体,同时使用next-hop-unchanged或next-hop-self根据实际转发需求决定。

以下是一个典型的EVPN控制平面设计示例,展示了租户A和租户B在PE1、PE2、PE3上的EVI映射、RD/RT规划以及RR的反射关系:

多租户EVPN控制平面:EVI映射、RD/RT规划与RR反射 路由反射器 RR AS 65000 | Loopback 10.0.0.254 PE1 Loopback 10.0.0.1 租户A EVI 1001 RD: 10.0.0.1:1001 RT: 100:1001 PE2 Loopback 10.0.0.2 租户A EVI 1001 RD: 10.0.0.2:1001 RT: 100:1001 PE3 Loopback 10.0.0.3 租户B EVI 2001 RD: 10.0.0.3:2001 RT: 200:2001 IBGP EVPN IBGP EVPN IBGP EVPN 租户A EVPN路由反射 PE1发布Type-2 (MAC/IP) → RR反射 → PE2导入 (RT 100:1001匹配) PE2发布Type-2 → RR反射 → PE1导入 (RT 100:1001匹配) 租户B EVPN路由 PE3发布Type-2 → RR反射 RT 200:2001 仅租户B导入 租户隔离关键: 租户A的RT 100:1001与租户B的RT 200:2001不匹配,RR反射后PE不会交叉导入,实现控制平面隔离。 租户A 租户A(另一PE) 租户B IBGP EVPN对等体

在上图示例中,PE1和PE2属于租户A,PE3属于租户B。RR与三台PE分别建立IBGP EVPN对等体。PE1发布租户A的Type-2路由时携带RD 10.0.0.1:1001和Export RT 100:1001;RR反射给PE2和PE3。PE2的Import RT包含100:1001,因此导入该路由;PE3的Import RT为200:2001,不匹配,因此丢弃。同理,PE3发布的租户B路由也不会被PE1/PE2导入。这样就在共享RR和Underlay的情况下,实现了租户A与租户B的控制平面隔离。

五、设计检查与常见问题

完成规划后,建议按以下清单检查:

  • 每个租户的EVI是否与VLAN/BD正确绑定?
  • 同一EVI在不同PE上的RD是否唯一?
  • Export RT与对端Import RT是否匹配?是否存在误导入?
  • RR是否已激活l2vpn evpn地址族?PE是否只与RR建立对等体?
  • 跨AS场景下,ASBR是否配置了正确的next-hop-unchanged或next-hop-self?

常见问题包括:RD冲突导致相同MAC无法区分;RT配置错误导致租户间路由泄露;RR未开启EVPN地址族导致路由无法反射;以及下一跳未正确保留导致流量黑洞。排查时,可在PE上使用display bgp evpn all routing-table查看EVPN路由的RD、RT和下一跳,确认路由是否按预期导入和导出。

工程建议:在多租户环境中,建议为每个租户分配独立的RT空间,并在RR上使用peer group简化配置。如果租户数量超过1000,可考虑使用4字节AS号或IP格式RT,并启用BGP Add-Path或RT约束路由反射(RT-Constrain)来减少RR上的路由数量。

总结来说,多租户EVPN控制平面设计的本质是:用EVI划分租户业务边界,用RD保证路由唯一性,用RT控制路由导入导出,用RR提升BGP扩展性。四者配合,才能在共享网络基础设施上实现租户间的真正隔离与按需互通。