内容提要
本文介绍在AWS VPC中基于Transit Gateway Connect、FRR与Linux TC构建主备式QoS VNF,对VPC出口流量集中分级限速。VNF部署于独立net-vpc,通过GRE隧道和BGP引流,并用两张TGW路由表避免环路。TC采用HTB加fq_codel,按端口分类:高优先级保证80Mbit/s,尽力而为保证20Mbit/s,空闲带宽可互借。实验显示竞争时约为79.5/19.9Mbit/s,主备切换约25秒,并给出排空维护方法。
延伸解读
为什么必须用两张 TGW 路由表
文章把避免环路的关键放在按入口区分路由表:业务 VPC 进入 TGW 的流量走 spoke 表,匹配 VNF 发布的默认路由;VNF 解封装后送回 TGW 的流量走 vnf 表,直接去目的 VPC。若只有一张表,回送的包会再次匹配指向 VNF 的路由,形成环路。同时 vnf 表不能传播 net-vpc 网段,否则 VNF 访问本 VPC 的流量也会被引入隧道。
主备切换的实测代价与排空方法
实验显示,VNF1 数据面静默故障后,TGW 依赖 BGP hold time 发现故障,从故障到 VNF2 接管约 25 秒,其中多出的部分是 TGW 侧路由收敛,无法通过 VNF 配置继续缩短。计划内维护时,直接关闭 BGP 会话会造成约 25 秒中断;文章推荐临时加长默认路由 AS 路径来排空流量,保持会话和路由不变,实测排空、重启、回切全程无中断。
吞吐上限与实例选型提醒
文章指出每个 TGW Connect 对端最高支持 5 Gbps 和 300,000 pps,且不可调整;本方案同一时刻只有一条 GRE 隧道承载流量,因此整体吞吐上限约 5 Gbps,小报文时 pps 限制会更早成为瓶颈。VNF 实例自身网络带宽也是上限,文中 c6g.large 基线带宽仅 0.75 Gbps,生产环境应按持续带宽选择实例规格,而不能只看突发能力。
分类位置可以前移到终端节点
文章在 VNF 上按端口分类,但也讨论了另一种做法:由应用或主机为报文打 DSCP 标记,VNF 上的 TC 改为按 DSCP 匹配,HTB 整形和调度仍集中在 VNF。好处是业务识别规则由最了解业务的一方维护,新增业务不必改 VNF 配置;代价是 VNF 需要信任终端标记,必要时对不可信来源重新标记,并确认 DSCP 在整条路径上不被修改。
Q&A
如何在AWS VPC中实现基于业务优先级的带宽限速?
可以部署主备式QoS VNF(EC2实例),通过Transit Gateway Connect挂载将VPC间流量经GRE隧道引流到VNF,VNF使用Linux TC的HTB qdisc按端口分类:高优先级流量(如端口8080)保证80Mbit/s,尽力而为流量保证20Mbit/s,空闲带宽可互借,总带宽100Mbit/s。
为什么需要两张TGW路由表来避免流量环路?
因为VNF调度后需将解封装的数据包送回TGW,若只有一张路由表,包会再次匹配指向VNF的路由造成环路。方案中spoke表关联业务VPC并传播VNF发布的默认路由,使流量进入VNF;vnf表关联Connect挂载和net-vpc,并传播业务VPC网段,使VNF回来的流量直接送往目的VPC。
VNF主备切换需要多长时间,如何加快?
实验中主备切换约25秒(BGP hold time设为9秒时)。加快切换可缩短BGP hold time(如timers 3 9),但TGW侧路由收敛约20秒无法通过VNF配置缩短。计划内维护可通过AS路径加长排空流量实现零中断。
如何对VNF进行计划内维护而不中断业务?
推荐保持BGP会话不变,在VNF1的route-map TGW-DEFAULT中临时加长AS路径(如set as-path prepend 65001 65001 65001 65001),并执行clear bgp * soft out,使TGW将流量切到VNF2,而VNF1继续转发切换期间流量。维护后执行no set as-path prepend恢复,重启FRR或实例后VNF1自动恢复为主用。
这个方案与Gateway Load Balancer(GWLB)有何区别?
GWLB适用于旁路或串接的安全设备(如防火墙、检测),提供自动健康检查和扩展,但不依赖BGP路由引流。本方案适用于需要通过BGP路由将流量引到设备、且需要全局统一带宽调度的场景,使用TGW Connect和FRR实现。
VNF的吞吐上限是多少?受哪些因素限制?
每个TGW Connect对端(GRE隧道)最高支持5Gbps带宽和300,000 pps,且不可调整。本方案同一时刻只有一台VNF承载流量,因此整体吞吐上限约5Gbps;小报文时pps限制更早成为瓶颈(如1500字节报文约3.6Gbps)。VNF实例自身网络带宽也是上限,如c6g.large基线0.75Gbps(突发10Gbps)。