Disaggregated Routing with SONiC and VPP: Lab Demo and Performance Insights – Part Two
在本系列的第一部分中,我们探讨了SONiC控制平面和VPP数据平面如何通过交换机抽象接口(Switch Abstraction Interface)形成一个紧密集成的软件定义路由堆栈。 我们概述了SONiC基于Redis的编排和VPP用户空间数据包引擎如何协同工作,以创建一个高性能、开放的路由器架构。 在这第二部分中,我们将把理论付诸实践。您将看到该架构如何通过一个连接了两个SONiC-VPP路由器和Linux主机的容器化实验环境,转化为一个可运行的工作环境。
重建L3路由演示
理解架构是基础,但这种集成的真正威力需要通过一个实用的、基于容器的实验场景才能显现。 该演示使用两个SONiC-VPP虚拟路由器和两个Linux主机构建了一个完整的L3路由环境,展示了如何配置接口、建立动态路由以及验证端到端连通性。
实验环境与拓扑
演示是使用容器化的实验环境构建的,由Containerlab等工具编排。这种方法允许通过简单的声明性文件快速部署和配置多节点网络拓扑。拓扑包含四个节点:
- router1:一个SONiC-VPP虚拟机,作为第一个LAN网段的网关。
- router2:第二个SONiC-VPP虚拟机,作为第二个LAN网段的网关。
- PC1:一个标准的Linux容器,代表第一个LAN网段中的主机。
- PC2:另一个Linux容器,代表第二个LAN网段中的主机。
这些节点按以下方式互联:
- 一条路由器间链路将router1:eth1连接到router2:eth1。
- PC1通过PC1:eth2和router1:eth2连接到router1。
- PC2通过PC2:eth2和router2:eth2连接到router2。
初始网络配置
实验环境部署完成后,一个启动脚本会为所有节点应用初始的L3配置。
- 主机配置:Linux主机PC1和PC2配置了静态IP地址和路由。
- PC1被分配IP地址10.20.1.1/24,并配置了到10.20.2.0/24网络的静态路由,其下一跳为网关router1(10.20.1.254)。
- PC2被分配IP地址10.20.2.1/24,并配置了到10.20.1.0/24网络的静态路由,其下一跳为网关router2(10.20.2.254)。
- 路由器接口配置:使用标准的SONiC CLI配置SONiC-VPP路由器。
- router1:
- 路由器间接口Ethernet0配置IP为10.0.1.1/30。
- 面向LAN的接口Ethernet4配置IP为10.20.1.254/24。
- router2:
- 路由器间接口Ethernet0配置IP为10.0.1.2/30。
- 面向LAN的接口Ethernet4配置IP为10.20.2.254/24。
- 分配IP后,使用
sudo config interface startup命令启动每个接口。
- router1:
使用BGP进行动态路由
接口配置完成后,使用SONiC内集成的FRRouting套件在两个路由器之间建立动态路由。配置通过vtysh shell应用。
- iBGP对等:在router1和router2之间建立一个内部BGP(iBGP)会话,因为它们都属于同一个自治系统(AS)65100。
- router1(路由器ID 10.0.1.1)配置为与地址10.0.1.2的router2对等。
- router2(路由器ID 10.0.1.2)配置为与地址10.0.1.1的router1对等。
- 路由通告:每个路由器通过BGP会话通告其直连的LAN网段。
- router1通告网络10.20.1.0/24。
- router2通告网络10.20.2.0/24。
此BGP配置确保router1学习到如何通过router2到达PC2的网络,router2学习到如何通过router1到达PC1的网络。
验证与数据路径分析
最后阶段是验证堆栈每一层的配置是否正常工作。
- 控制平面验证:可以在任一路由器上的
vtysh中检查BGP会话状态和学习到的路由。在router1上,命令show ip bgp summary将确认与router2已建立对等会话。命令show ip route将显示从10.0.1.2通过BGP学习到的到10.20.2.0/24的路由。 - 数据平面验证:为了确认路由已编程到VPP数据平面,操作员需要进入
syncd容器内的VPP命令行界面(vppctl)。命令show ip fib将显示转发表,其中应包含通过BGP学习到的到10.20.2.0/24的路由,从而确认状态已成功从控制平面同步。 - 端到端测试:最终测试是在主机之间生成流量。从PC1执行简单的
ping 10.20.2.1命令应该成功。这证实了整个数据路径是功能正常的:PC1将数据包发送到其网关(router1),router1在其VPP FIB中执行查找并将数据包转发给router2,然后router2将其转发给PC2。返回流量遵循相反的路径,验证了完整、集成的解决方案。
这个使用标准容器工具和声明性配置的实践演示,有力地说明了SONiC-VPP架构在构建高性能、软件定义的L3网络方面的操作简易性和健壮性。
性能影响与未来方向
SONiC-VPP集成的优雅之处与其卓越的性能及其对广泛现代网络挑战的适用性相匹配。 通过将数据平面从内核卸载到高度优化的用户空间框架,该解决方案解锁了传统基于软件的路由根本无法实现的能力。
性能提升是显著的。 VPP的基准测试持续显示其比基于内核的转发快得多,有资料称其数据包处理吞吐量提高了10倍到100倍。 这使得在多核商用服务器上实现“太比特级IPSec”等用例成为可能,这在几年前是难以想象的。实际部署已验证了这一潜力。 在ONE Summit 2024上的一个演示展示了SONiC-VPP虚拟网关在AWS和Azure之间提供多云连接。性能测试显示,应用工作负载与云提供商接入点(AWS Direct Connect和Azure ExpressRoute)之间的往返时间小于1毫秒,突显了其对于高性能、低延迟应用的适用性。
这种性能水平为多种苛刻的用例打开了大门:
- 高性能边缘路由:作为虚拟路由器或网关,SONiC-VPP可以在网络边缘处理海量流量,作为专有硬件路由器的强大且经济高效的替代方案。
- 多云和混合云连接:该解决方案非常适合创建安全、高吞吐量的虚拟网关,用于互连本地数据中心与多个公有云,正如ONE Summit演示中所展示的那样。
- 集成安全服务:VPP的性能使其成为计算密集型安全功能的绝佳平台。基于此架构的商业产品,如AsterNOS-VPP,将该解决方案打包为一个集路由、安全(防火墙、IPsec VPN、IDS/IPS)和运维于一体的平台。
虽然原始吞吐量数据引人注目,但更微妙的好处在于性能本身的性质。 Linux内核尽管功能强大,但是一个通用操作系统。其网络堆栈受到系统中断、进程调度和上下文切换导致的非确定性延迟的影响。这引入了不可预测的延迟,可能对敏感应用有害。 VPP通过在专用核心上以用户空间运行并使用轮询模式驱动程序,避开了这些不可预测性的来源。这不仅提供了高吞吐量,还提供了一致、低延迟的性能。对于边缘的新兴工作负载,如实时物联网数据处理、AI/ML推理和5G网络功能,这种可预测的性能通常比原始总带宽更为关键。因此,关键的价值主张不仅仅是“快”,而且是“可预测地快”。
SONiC-VPP项目并非静态的;它是开源社区内一个活跃的开发领域。 未来的一个关键重点是通过扩展SAI API向SONiC控制平面暴露更多VPP的丰富功能集,以深化集成。目前,SAI主要涵盖核心的L2/L3转发基础功能。 然而,VPP拥有一个庞大的高级功能库。正在进行的开发工作旨在为网络地址转换(NAT)和高级VxLAN多租户功能等特性创建SAI扩展,这将允许通过标准SONiC接口直接配置和管理这些功能。 对sonic-platform-vpp GitHub仓库的拉取请求(pull request)的审查显示,正在进行的开发工作旨在增加对VxLAN BGP EVPN等复杂功能的支持,并改进ACL测试,这表明了健康且前瞻性的开发轨迹。
未来是软件定义且开放的
SONiC控制平面与VPP数据平面的集成远不止是一个聪明的工程实践。 它是解耦网络模型成熟度和可行性的有力证明。该架构成功结合了两个最重要的开源网络项目的优势,创建了一个灵活、高性能且不受专有硬件限制的平台。 它证明了控制平面和数据平面的分离不再是一个理论概念,而是一个实用的、可部署的现实,提供了无与伦比的架构自由度。
SONiC与FD.io VPP(两者都是Linux基金会的旗舰项目)之间的协同作用,突显了协作、社区驱动开发的巨大创新力量。 这种联合努力产生了一个从根本上重新定义路由器的解决方案,将其从一个单一的硬件设备转变为可以部署在商用服务器上的动态、高性能软件应用。
也许最重要的是,该架构提供了使用管理现代软件开发的原则来管理网络基础设施的工具。 正如L3路由演示的生命周期所展示的——从代码构建、使用声明性文件配置,以及作为版本化工件部署,SONiC-VPP堆栈为真正的NetDevOps铺平了道路。它使网络工程师和运营商能够拥抱自动化、版本控制和CI/CD管道,最终将网络基础设施视为代码。
通过这样做,它实现了软件定义网络的最终承诺——一个与所支持的应用程序一样敏捷、可扩展和创新的网络。