ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

IB网络多租户隔离方案详解:PKey、SR-IOV与QoS实战

IB网络多租户隔离方案详解:PKey、SR-IOV与QoS实战 1. 前言为什么IB网络下租户隔离这么难搞做高性能计算和AI训练平台的朋友应该都有切肤之痛——业务服务器之间用InfiniBand简称IB网络互连时带宽和延迟都漂亮得让人舍不得换但一旦牵扯到多租户共享隔离就成了老大难。以太网上做隔离VLAN、VXLAN、防火墙一抓一大把方案多得能挑花眼可到了IB网络里传统那套思路基本失灵大家熟悉的工具也没几个能直接用。这个问题的本质在于IB网络设计的初衷是极致性能和极低延迟它从一开始就不是按“多租户共享”的思路来设计的。IB的转发机制、地址分配、广播域划分全部围绕高性能传输展开。结果就是当多个团队、多个业务线、多个客户需要共用同一套IB基础设施时怎么保证A租户的流量不会干扰B租户怎么保证C租户看不到D租户的数据就成了平台团队绕不开的硬骨头。我这里说的“租户”可以是一台物理机上的不同容器组也可以是一组GPU节点上的不同训练任务甚至可能是云平台上真正意义上分属不同客户的资源集群。无论哪种形态隔离的核心诉求都是一样的网络层不可见、安全上不可越权、性能上不可抢占。这篇文章就从我在实际项目中踩过的坑和验证过的方案出发把IB网络下租户业务隔离的几种主流路径、选型思路和实操细节掰开揉碎讲清楚。适合要建设多租户HPC/AI平台的技术负责人、网络工程师和运维同学参考。2. 隔离之前先搞懂IB网络的几个关键概念很多人在IB网络规划时容易陷进“以太网思维”里出不来一上来就问“IB的VLAN怎么配”。实际上IB的隔离机制和以太网差别很大先搞清楚基础概念后面方案才不会跑偏。2.1 IB网络的组网模型和寻址方式IB网络是一个独立的互联体系它有自己的一套寻址和转发机制。在IB网络里每个端口有一个LIDLocal Identifier本地标识符这是二层转发的主要依据由子网管理器Subnet Manager简称SM统一分配。GIDGlobal Identifier全局标识符则是三层寻址用的格式类似于IPv6由LID或GUID加子网前缀组合生成。打个比方LID是楼内的房间号SM是物业管理员负责分配房间号GID则是快递员用的完整地址。整个IB子网内的设备要互相通信都得通过SM的统一管理和协调。每个IB子网有一个子网管理器它负责发现网络拓扑、分配LID、配置路由表、处理端口状态变化。生产环境里通常建议部署两个冗余SM一台为主一台备用避免单点故障导致全网瘫痪。我在实际部署中见过SM挂了整个集群网络直接“断片”的案例原因是一些网卡驱动对SM的重新选举过程处理得不够好但这是后话后面问题排查部分会详细说。2.2 IB的包交换和分区机制简介IB网络中的数据包转发基于LID和Guid交换机的转发表由SM下发和管理。在这样一个体系里实现租户隔离主要从三个层面切入分区Partition隔离通过PKeyPartition Key限制谁和谁能通信是IB本身提供的逻辑隔离手段类似以太网里的VLAN但实现原理完全不同。物理隔离把不同租户分配到不同的IB交换机、不同物理网段互不干扰隔离最彻底但成本也最高。基于端口的虚拟化隔离利用SR-IOV等虚拟化技术把一个物理端口虚拟成多个独立端口再配合PKey实现隔离。2.3 租户隔离要解决的三个核心问题不管用什么方案最终都要回答这三个问题隔离维度要解决的问题对应技术手段网络边界隔离租户间不能互相访问广播域不能互相影响PKey、独立子网安全权限隔离租户不能越权感知或访问他人资源分区配置、SM策略、ACL性能保障隔离一个租户的流量不能干扰另一个租户的服务质量QoS、SL映射、限速策略这三个层面缺一不可。网络不通不代表安全安全了也不代表性能有保障。实操中很多团队做完PKey觉得万事大吉结果一个租户的通信风暴直接把另一个租户的训练任务打到超时——这就是性能隔离没做到位。3. 方案一物理隔离物理隔离是思路最简单、效果最彻底的方式但也是成本和资源利用率的矛盾集合体。3.1 适用场景和组网方式物理隔离的做法是每个租户分配独立的IB交换机和独立的子网租户的节点只接入自己的那一套IB设备中。这种方案特别适合租户数量少、单租户流量极大、安全合规要求极高的场景。比如同时跑多个客户的模型训练任务客户明确要求数据不能混在同一个二层域内那物理隔离就是最直接的答案。具体组网可以做成两级结构核心层部署一台或多台大型IB交换机每个租户独享一组leaf交换机。租户的服务器通过自己的leaf接入网络互不相通。核心层交换机是否共享取决于流量模型和安全要求如果连核心层都要求隔离那就得部署完全独立的IB网络连光纤链路都彻底分开。3.2 成本和运维代价物理隔离最大的痛点不是技术是钱和空间。IB交换机动辄几十万甚至上百万一套万兆甚至400G IB网络的投资对很多团队来说是笔不小的开支。如果每个租户都要单独一套规模小的租户也得为整套网络买单资源利用率会很难看。运维上也麻烦。IB网络本身有SM、有子网规划多套物理隔离网络意味着要分别维护SM、分别升级固件、分别排查链路问题。我有一次碰到的故障场景是A租户的某根光模块光功率衰减但因为是独立物理网络巡检工具没法统一纳管只能靠人工插拔排查效率很低。3.3 什么时候值得选物理隔离我的判断标准是三条租户间需要绝对的网络和数据隔离任何逻辑层面不可达都不满足合规要求租户数量少一般不超过3-4个预算充足且对运维成本的敏感度不高如果三条都满足物理隔离没有错。但凡有一条卡住就得在这个方案上多犹豫一下。4. 方案二基于PKey的分区隔离这是目前IB租户隔离方案里性价比最高、最灵活也最常用的手段也是我建议多数团队优先尝试的方向。4.1 PKey是什么它和VLAN有什么本质区别PKey的全称是Partition Key也叫分区键。IB规范里定义了分区的概念每个端口可以加入一个或多个分区属于同一分区的端口之间才能互相通信。每个分区有一个16位的PKey值其中最高位bit 15有专门含义用来区分完全成员Full Member和受限成员Limited Member。以太网VLAN会在数据包里打上VLAN Tag交换机根据Tag决定转发行为。而IB的PKey机制有所不同它主要在端到端的链路层和传输层构成“通联许可”。也就是说PKey不仅仅是交换机转发时的一个标记它更像是一张“通信执照”——两个端口要想建立QPQueue Pair队列对双方都必须有合法的PKey分区信息缺一不可。4.2 一个租户一个分区的落地配置假设我们现在有三个租户Tenant A、Tenant B、Tenant C要求他们之间互不可见。第一步是规划PKey编号。IB管理工具里PKey是可配置的很多环境中保留了默认的PKey比如0xFFFF是管理分区这个保留分区具有特殊权限。自定义分区建议从0x0001开始规划且避免使用0x7FFF和0x8000这种容易混淆的边界值。第二步是使用opensm、ibswtroubleshooting工具或厂家自带的管理软件创建分区。以常见的Mellanox/NVIDIA硬件环境为例通过opensm的part_config文件或者在运行中动态修改分区表都能实现。配置完成后需要重启SM让配置生效或者执行动态重配置。第三步是把相应端口的GID加入分区。这一步可以通过ibportstate命令或OpenSM的配置界面来完成关键是要确保每个租户的节点只加入属于自己的分区同时保留管理分区的成员资格否则SM可能无法正常管理这些节点。4.3 配置PKey时的几个坑第一个坑是忘记保留管理分区。生产环境里出现过这样的情况管理员想把一个租户彻底隔离结果把所有分区都删了连默认的管理分区也干掉了导致节点的SMAgent工作异常节点在子网里一会儿在线一会儿掉线排查了很久。第二个坑是PKey冲突。不同租户误配了相同的PKey值而且又用了相同的子网前缀结果A租户的节点能探测到B租户的节点。这属于低级但容易发生的错误尤其是当分区数量多、靠人工录值来维护时出错的概率很高。建议用脚本统一生成PKey规划表并做一个映射文件入库管理不要手动写。第三个坑是PKey的编号范围。IB规范中PKey的最高位是成员属性标志这意味着真正可用的数值空间只有15位。实际配置时full member和limited member的PKey值不能乱配否则端口会在交换机上形成“意外通信”或“黑洞隔离”。这一点很容易被新手忽略。4.4 性能影响和优化空间PKey隔离本身对转发性能几乎没有任何影响因为它只是在QP建立阶段做准入检查进入数据面后IB交换机的转发依然是线速的。但如果租户间的隔离建立在同一个物理子网上那么广播流量、组播流量仍然可能共享带宽。比如一个租户内的集体通信操作AllReduce会产生大量组播流量这些流量虽然不会穿透到另一个分区去但它会在交换机的物理链路上和另一个租户的流量争抢带宽。要彻底解决这个问题还得靠QoS和SL规划。5. 方案三SR-IOV虚拟化隔离如果你的租户本身就跑在云平台的虚拟机里SR-IOV这条路是绕不开的。5.1 SR-IOV在IB网络中的工作原理SR-IOVSingle Root I/O Virtualization最早是PCIe的虚拟化标准它把一块物理网卡虚拟出多个VFVirtual Function虚拟功能每个VF可以被单独分配给一个虚拟机或容器使用从而绕过Hypervisor的软件交换开销实现接近物理机的性能。在IB场景下使用SR-IOV方案时支持的硬件设备通过虚拟化出多个VF口让一个物理IB端口同时暴露给多个租户使用。每个租户的虚拟机看到的是一块“完整”的IB网卡但底层硬件已经做了隔离和调度。配合PKey机制每个VF可以分配不同的PKey分区从而在物理端口共享的前提下实现租户间的逻辑隔离。5.2 云平台中的实战配置思路在OpenStack环境下给租户的虚拟机挂IB网络时步骤大致是物理机上把IB HCAHost Channel Adapter主机通道适配器的SR-IOV功能打开创建合适数量的VF。在Neutron里配置支持SR-IOV的物理网络并把对应的VF网卡映射为可用的端口资源。创建租户网络时绑定相应的PKey分区确保这个租户的虚拟机只能访问自己所属的分区。在nova-scheduler中开启PCI直通调度让虚拟机实例能绑定到指定的VF上。这套流程走下来租户虚拟机之间的网络隔离由PKey保证性能则由SR-IOV直通接近物理机。5.3 SR-IOV方案的雷达图评估维度效果说明性能高数据面直通硬件接近物理机性能隔离强度中高依赖PKey配置仍共享物理端口灵活性高VF的粒度可以动态调整适合云场景运维复杂度中高需要管理PCI直通、调度器、PKey等多层配置成本较低不需要额外独占硬件共享率高选择SR-IOV方案时有一个容易忽略的问题虚拟机的VF数量太多会导致物理机的PCI带宽成为瓶颈尤其是GPU直通加IB直通同时存在时PCIe通道资源要提前规划好。6. 可选增强项QoS和SL/SVL规划很多团队做完PKey隔离后就觉得大功告成实际上在共享物理链路的场景下性能隔离没做到位后面的投诉会源源不断。6.1 SL在IB QoS中的角色IB的QoS基于SLService Level服务等级机制。SL是数据包中的一个字段类似以太网里的802.1p优先级。交换机根据SL来确定使用哪个VLVirtual Lane虚拟通道进行转发而VL的数量和优先级仲裁则由交换机的VL Arbitration机制控制。这样做的效果是你可以把租户A的流量映射到高优先级SL上把租户B的流量映射到低优先级SL上当两个租户的流量在同一物理链路上交织时交换机会优先保证高优先级SL的带宽和低延迟。6.2 实操中的SL映射配置首先需要规划SL和PKey的映射关系。一个常见做法是每个租户分配独立的SL编号如租户A使用SL0租户B使用SL1。然后通过OpenSM或者厂商管理工具把租户的端口属性配置到对应的SL上。这样在子网层面不同租户的流量即便走上同一条物理链路也能通过不同的VL被交换机区分处理。接下来的VL仲裁配置是重点。IB交换机在端口上支持多个VL每个VL可以配置不同的带宽权重。比如你可以给前4个VL分配各10Gbps的保证带宽剩下的带宽由其他VL竞争。在实际配置中VL仲裁是根据port的SL2VL映射表和VLArbitration表联动的需要细心逐一核对。6.3 别忘了监控流量的统计配置完成后不能就撒手不管一定要用ibstat、perftest、ibdiagnet等工具持续监控流量分布。我曾经遇到过一个场景租户A跑的是传统的频繁小包通信租户B跑的是大块数据传输QoS策略把小包通信的优先级调高了结果大块传输的吞吐率受到了挤压。后面通过实时流量统计才发现问题重新调整了SL的权重分配才达到平衡。另外要注意QoS配置不是单点配置它依赖SM、交换机、HCA端到端一致。如果交换机上配置了SL2VL映射而HCA端没有设置对应的SL值数据包到了交换机后可能落入默认VLQoS的效果就打了折扣。7. 三种主流方案怎么选把前面几种方案放在一起做个综合对比选型时更容易做决策。对比维度物理隔离PKey分区隔离SR-IOV PKey隔离强度最高高中高成本最高低中性能最高高接近最高灵活性低中高高部署复杂度低中高适用场景绝对隔离需求、租户少大多数多租户HPC/AI平台云化平台、虚拟化场景基于我的经验给出几条实用建议平台刚起步、租户数量有限5个以内、硬件资源预算充足优先考虑PKey分区而不是一上来就物理隔离。PKey可以满足90%以上的隔离需求后期真的遇到合规上的硬性要求再考虑把最核心的租户迁移到独立物理网络。云化平台、租户动态创建和销毁频繁SR-IOV PKey几乎是必选。它能让租户在分钟级内获得隔离的网络资源而且在调度上非常灵活。租户安全等级差异极大存在“高危”租户高危租户建议用物理隔离。哪怕PKey隔离在技术上是可行的面对安全审计和合规要求时物理隔离最能“说得清”。8. 落地全过程实录一个三租户隔离案例为了让读者更直观地理解整个落地过程我用一个实际案例来完整走一遍。8.1 需求背景和资源规划某AI平台需要为三个业务部门提供计算集群服务共享一批IB网络连接GPU服务器要求三个部门之间不能直接互访同一部门内部节点可以自由通信关键业务部门的流量优先保障整体架构需要保留后续扩容的余地物理资源是一台Mellanox/MSB7800系列IB交换机下面是三组GPU服务器每组10台全部配备HDR200GbpsHCA卡。8.2 执行步骤总览步骤一规划PKey部门PKeySL说明部门A0x00011关键业务高优先级部门B0x00022普通业务部门C0x00033普通业务低优先级管理0xFFFF0管理分区所有端口保留步骤二配置子网管理器分区使用OpenSM作为子网管理器在part_config文件中定义上述分区并将每个节点的GID添加进对应的分区。这里要注意每个节点同时加入管理分区0xFFFF保证SM能正常管理。步骤三配置QoS策略在OpenSM的QoS配置文件中将分区到SL的映射关系定义好同时配置VL仲裁权重SL1权重60%SL2权重25%SL3权重15%步骤四验证连通性使用ibping测试不同部门之间节点能否互通预期结果是同部门互通、不同部门不通。这一步踏实点了就可以放心交给业务了。步骤五压测和调优部署完成后用ib_write_bw和ib_read_lat分别跑吞吐和延迟测试确认QoS策略是否达到预期。实测中部门A跑满带宽时部门B的带宽从200Gbps降到约50Gbps完全符合预期策略。8.3 实测效果和结论整个方案上线的效果是部门A的业务照常跑满带宽部门B和部门C的流量被明显压低但不至于中断。因为PKey隔离足够干净部门间的通信包根本到不了对方节点安全审计也比较顺利。后续扩容时新增部门只需要在配置里加一个PKey不需要动现有的网络架构运维负担很轻。9. 常见问题与排查技巧实录这一部分整理我在多个项目中遇到的高频问题和对应的排查方法实用性很强。9.1 端口虽配置了PKey但节点之间还是能互相访问这类问题十有八九出在SM的重载或配置缓存上。PKey配置不是改完就立刻生效的很多情况下需要重启SM或者对端口做disable/enable操作。实际操作中可以先用sminfo查看当前SM的分区状态再做opensm重启。另一种常见原因是节点上的驱动启用了ipoib并且配置了静态IP而这些IP恰好属于同一段子网。这时候即便PKey隔离生效业务通过IP地址仍然可能绕过限制访问。所以在设计时要确认IP分配也遵循租户隔离的原则不能只靠PKey。9.2 配置了PKey后整个网络出现“掉线”现象这种情况通常是因为管理分区没有正确保留。PKey机制中管理分区0xFFFF是所有支持管理的端口都应该保留的分区。如果某个端口所在子网的SM失去了对该端口的管控它会将该端口视为状态异常而将其拉黑。排查方法是运行ibnetdiscover查看端口状态用ibportstate检查端口的PKey表和正常的节点对比配置文件重点检查GID是否被误加入limited members而非full members9.3 两个租户流量互相影响QoS没有生效有次排查发现HCA上的SL值根本设置为0而交换机侧的SL2VL映射表根据租户区分SL值。结果数据包到交换机后就进了默认VLQoS策略形同虚设。解决这个问题的关键是端到端都要配置一致HCA侧通过ibv_devinfo或驱动参数检查SL值交换机侧通过sm的QoS配置文件来核对SL2VL映射还有一点是OS里是否有其他服务把SL值覆盖了。三层都对齐了QoS才真正生效。9.4 一台物理机上跑了多个租户的容器PKey怎么配这是容器场景里的经典问题。物理机上如果跑着多个租户的容器而容器用的是同一个IB HCA逻辑上每个容器要对应不同的PKey。解决办法是使用SR-IOV把物理HCA虚拟成多个VF然后每个容器独占一个VF并分配对应的PKey。也就是说容器级别的隔离和物理机级别的隔离在实施路径上是一样的只是粒度更细。10. 方案落地后的日常运维小技巧租户隔离方案上线之后日常运维最好养成几个习惯。第一定期做PKey配置的备份和审计。用脚本把当前SM的分区配置导出来和上一次的备份做比对能及时发现配置漂移。尤其是多人协作运维时有人改了配置忘记了比对看门道几秒钟就能定位。第二做链路质量监控。针对不同的租户持续监控各自物理端口上的丢包率、重传率、带宽利用率。介质上的问题虽然不会因为租户而区分但不同的租户业务对链路质量的敏感度差别很大提前发现问题就能避免业务投诉。第三提前准备“一键回滚”。每次变更PKey或QoS配置前把当前配置完整备份好变更后验证通过前不要清理备份。我见过几次现场一个配置变更把整个租户网络搞挂最后都是靠备份配置快速恢复的。这一点看起来基础紧要关头就是救命稻草。这几条看着不起眼但长期坚持下来整个平台的稳定性会有肉眼可见的提升。11. 写在最后一个过来人的体会从最开始只知道物理隔离到后来熟练运用PKey和QoS组合中间踩过的坑不算少。我个人最大的体会是IB网络的租户隔离不是“配一下PKey”就完事它是网络边界、安全策略、性能保障三件事的系统工程。每一种方案都有它适合的土壤关键是在动手之前想清楚自己的核心约束——是要绝对安全还是要资源利用率还是要部署灵活性。这三个维度没办法同时拉满总要有一个取舍。如果你所在的团队正好在规划IB网络的租户隔离我的建议是先搭一套PKey方案的小规模验证环境把分区规划、SL映射、QoS策略跑通再根据实际业务反馈调整。不要一上来就追求“大而全”很多事情是跑起来之后才知道哪里才是真正的痛点。这套方法在我维护过的多个集群里都经受住了生产环境的考验希望这篇文章能帮你少走一段弯路。
返回列表