两个租户都在 10.50.0.10 上运行同一个应用。提供方用不同的 MPLS VPN 将他们隔开,BIG-IP 则把各自的本地流量放在不同的路由域中。这套安排在交接处之前一直有效:只要后缀缺失或路由目标被复制,一个租户的报文就会悄无声息地落进另一个租户的上下文。本手册把两种模型对应起来,并以逐租户的测试收尾。

工作表:每个租户一行

在动手改动之前先填好这张表。后续每一步都会引用表中的某个单元格,而空白的单元格就意味着这个决定还没有人做。

TenantBIG-IP sideProvider side
AVLAN or tunnel, route domain, self address, virtual serverVRF, attachment, route targets for import and export
BSeparate VLAN or tunnel, separate route domain, separate self addressSeparate 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 通,只能证明设备的上下文,不能证明租户的上下文。

把最终的对应关系记录到工作表里,包括每个分区的默认路由域以及你启用的任何父域关系。这个环境的下一次变更,会由读那张表的人来做,而不是读这篇文章的人。

相关文章