F5 路由域与 MPLS VRF:梳理租户交接
两个租户、一个地址、两个路由域。用 %ID 固定每个对象,使用提供方的 VRF 和路由目标,并逐个租户验证。
两个租户都在 10.50.0.10 上运行同一个应用。提供方用不同的 MPLS VPN 将他们隔开,BIG-IP 则把各自的本地流量放在不同的路由域中。这套安排在交接处之前一直有效:只要后缀缺失或路由目标被复制,一个租户的报文就会悄无声息地落进另一个租户的上下文。本手册把两种模型对应起来,并以逐租户的测试收尾。
工作表:每个租户一行
在动手改动之前先填好这张表。后续每一步都会引用表中的某个单元格,而空白的单元格就意味着这个决定还没有人做。
| Tenant | BIG-IP side | Provider side |
|---|---|---|
| A | VLAN or tunnel, route domain, self address, virtual server | VRF, attachment, route targets for import and export |
| B | Separate VLAN or tunnel, separate route domain, separate self address | Separate VRF, separate route targets |
第 1 步:把每个对象固定到它的路由域
F5 的路由域文档介绍了隔离的流量上下文、重复地址以及配置对象的 address%ID 表示法。写成 10.50.0.10%2 的地址指的是本地路由域上下文,这个后缀并不是承载在客户 IP 报文里的 MPLS 标签。
在文档所述的模型中,VLAN 或受支持的隧道只属于一个路由域,因此接口和地址必须一致。还要检查管理分区的默认路由域,因为省略后缀并不意味着没有上下文,而是指该分区默认使用的那一个上下文。正是这同一个默认值,解释了大多数“新对象悄悄应答了错误租户”的故障。添加自有地址之前先把它查清楚。
tmsh list net route-domain
tmsh list net vlan | grep -i domain
tmsh list ltm virtual one_vs
第 2 步:使用提供方的 VRF 和路由目标
在 MPLS 边缘,租户由提供方的 VRF 和双方约定的客户路由服务来标识。路由目标决定提供方在 VRF 之间导入和导出哪些路由,而选一个看起来相似的 BIG-IP 路由域编号并不会建立这种关系。
这两个标识符存在于不同的系统中,含义也不同。路由域 ID 是设备上的本地上下文。路由目标是提供方侧决定路由分发的策略属性,而路由区分符又是第三样东西,用来把本来相同的路由前缀区分开。
第 3 步:决定上下文之间是否可以共享可达性
要有意识地复核父域查找和严格隔离的设置,因为它们会改变上下文能够到达的范围。F5 的指南允许通过这类关系进行受控转发,也正因如此,不应把路由域单独当作一套完整的租户安全策略。
如果两个租户都需要某项共享服务,就应指明经批准的路径和权限,而不是随手把一个租户指向另一个租户的路由上下文。要连同网络目的地一起保留应用标识和任何有意的源地址转换,否则共享服务会把一个租户看成另一个租户。
普通的受路由交接只是把 BIG-IP 连接到提供方的边缘路由器,并不会让 BIG-IP 变成 MPLS PE。如果确实需要 MPLS 或 VPN 路由族的直接集成,请针对确切的平台和版本取得明确支持,因为本地的路由域隔离并不能建立这种能力。
第 4 步:一次验证一个租户
从 A 上下文中的端点测试到 A 的应用地址,然后对 B 重复一遍。在诊断中使用 %ID 形式,才能证明是哪一个上下文作出了应答;并确认来自错误上下文的请求会失败,而不是落到某个看似合理的地方。
同一轮里还要检查提供方一侧:前缀出现在正确的 VRF 中,路由目标与工作表一致,返回路径使用的是预期的那条接入。从设备本身能 ping 通,只能证明设备的上下文,不能证明租户的上下文。
把最终的对应关系记录到工作表里,包括每个分区的默认路由域以及你启用的任何父域关系。这个环境的下一次变更,会由读那张表的人来做,而不是读这篇文章的人。