CN117255019A - 用于虚拟化计算基础设施的系统、方法及存储介质 - Google Patents

用于虚拟化计算基础设施的系统、方法及存储介质 Download PDF

Info

Publication number
CN117255019A
CN117255019A CN202211734227.XA CN202211734227A CN117255019A CN 117255019 A CN117255019 A CN 117255019A CN 202211734227 A CN202211734227 A CN 202211734227A CN 117255019 A CN117255019 A CN 117255019A
Authority
CN
China
Prior art keywords
network
virtual
dpdk
virtual router
interface
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202211734227.XA
Other languages
English (en)
Inventor
维纳伊·K·纳拉莫图
维诺德·奈尔
基兰·K·N
雪兰德·夏尔马
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Juniper Networks Inc
Original Assignee
Juniper Networks Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US17/813,027 external-priority patent/US20230412526A1/en
Application filed by Juniper Networks Inc filed Critical Juniper Networks Inc
Publication of CN117255019A publication Critical patent/CN117255019A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/28Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
    • H04L12/46Interconnection of networks
    • H04L12/4641Virtual LANs, VLANs, e.g. virtual private networks [VPN]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/08Configuration management of networks or network elements
    • H04L41/0803Configuration setting
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/08Configuration management of networks or network elements
    • H04L41/0893Assignment of logical groups to network elements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/02Topology update or discovery
    • H04L45/04Interdomain routing, e.g. hierarchical routing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/14Routing performance; Theoretical aspects
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/50Routing or path finding of packets in data switching networks using label swapping, e.g. multi-protocol label switch [MPLS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/58Association of routers
    • H04L45/586Association of routers of virtual routers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances

Abstract

本公开涉及用于虚拟化计算基础设施的系统、方法及存储介质。通常,本公开描述了用于提供混合数据平面的技术,该混合数据平面可以包括基于内核的数据平面和基于数据平面开发工具包(DPDK)的数据平面。示例性系统包括基于DPDK的虚拟路由器和内核网络栈,该基于DPDK的虚拟路由器被配置为经由物理网络接口发送和接收数据包,并且该内核网络栈被配置为对去往容器化应用并且由基于DPDK的虚拟路由器经由物理接口接收的数据包执行隧道传送处理。

Description

用于虚拟化计算基础设施的系统、方法及存储介质
相关申请的交叉引用
本申请要求于2022年7月15日提交的美国专利申请第17/813,027号的权益,并要求于2022年6月17日提交的美国临时专利申请第63/366,619号的权益,每个申请通过引用整体并入本文作为参考。
技术领域
本公开涉及虚拟化计算基础设施,并且更具体地涉及用于容器化平台的混合数据平面。
背景技术
在典型的云数据中心环境中,存在提供计算和/或存储容量以运行各种应用的互连服务器的大集合。例如,数据中心可以包括为订户(即数据中心的客户)托管应用和服务的设施。数据中心可以例如托管所有基础设施装备,诸如联网和存储系统、冗余电源和环境控制。在典型的数据中心中,存储系统和应用服务器的集群经由一层或多层物理网络交换机和路由器提供的高速交换结构互连。更复杂的数据中心利用位于各种物理主机设施中的订户支持设备提供遍布全世界的基础设施。
虚拟化数据中心正成为现代信息技术(IT)基础设施的核心基础。具体地,现代数据中心已经广泛地利用了虚拟化环境,其中虚拟主机,在本文也被称为虚拟执行元件,诸如虚拟机或容器,被部署在物理计算设备的下层计算平台上并在其上执行。
数据中心或包括一个或多个服务器的任何环境内的虚拟化可以提供若干优点。一个优点是虚拟化可以提供对效率的显著改进。随着每个物理CPU具有大量内核的多核微处理器架构的出现,下层物理计算设备(即,服务器)已经变得越来越强大,虚拟化变得更容易和更有效。第二个优点是虚拟化提供了对计算基础设施的显著控制。随着物理计算资源变成可替代资源,诸如在基于云的计算环境中,计算基础设施的供应和管理变得更容易。因此,企业IT人员通常更喜欢数据中心中的虚拟化的计算集群,因为除了虚拟化提供的效率和增加的投资回报(ROI)之外,它们的管理具备优势。
容器化是基于操作系统级虚拟化的虚拟化方案。容器是用于彼此隔离并且与主机隔离的应用的重量轻且便携的执行元件。此类隔离系统表示容器,诸如由开源DOCKER容器应用程序或由CoreOS Rkt(“Rocket”)提供的那些容器。与虚拟机一样,每个容器被虚拟化并且可以保持与主机和其他容器隔离。然而,与虚拟机不同,每个容器可以省略单独的操作系统,而是提供应用套件和应用专用库。通常,容器由作为隔离的用户空间实例的主机来执行,并且可以与主机上执行的其他容器共享操作系统和公共库。因此,容器可能比虚拟机需要更少的处理能力、存储和网络资源。一个或多个容器的组可以被配置为共享一个或多个虚拟网络接口,以便在对应的虚拟网络上通信。
因为容器没有紧密耦合到主机硬件计算环境,所以应用可以被绑定到容器图像并且作为单个轻量包在支持下层容器架构的任何主机或虚拟主机上执行。这样,容器解决了如何使软件在不同的计算环境中工作的问题。容器提供了从一个计算环境到另一个虚拟或物理环境一致运行的承诺。
利用容器的固有轻量级性质,单个主机通常可以支持比传统虚拟机(VM)更多的容器实例。通常,可以比VM更有效地创建和移动短期容器,并且还可以将它们作为逻辑相关的元件组来管理(例如,容器化的工作负载,对于一些编排平台,例如Kubernetes,有时称为“pod”)。这些容器特性影响容器联网解决方案的要求:网络应当是灵活的和可扩展的。VM、容器和裸金属服务器可能需要在同一计算环境中共存,其中在应用的不同部署之间启用通信。容器网络还应当不知道与用于部署容器化应用的多种类型的编排平台一起工作。
管理部署和应用执行的基础设施的计算基础设施可以涉及两个主要角色:(1)编排—用于跨主机集群自动化应用的部署、缩放和操作,并且提供计算基础设施,其可以包括以容器为中心的计算基础设施;和(2)网络管理-用于在网络基础设施中创建虚拟网络以使得能够在诸如容器或VM的虚拟执行环境上运行的应用之间以及在传统(例如,物理)环境上运行的应用之间进行数据包化通信。软件定义网络有助于网络管理。
发明内容
一般而言,本公开描述了用于为计算节点提供混合数据平面的技术,该混合数据平面包括两个不同的数据平面,每个数据平面可以支持不同的通信协议。现有系统通常提供单个数据平面,或者如果提供多个数据平面,则它们是不相交的数据平面。单个数据平面可能不能满足服务器上容器化应用的变化的需要。例如,一些容器化应用—可以使用pod来部署—可能需要由数据平面开发工具包(DPDK)数据平面可以提供的高吞吐量和低延迟,而其他pod可能需要DPDK数据平面不支持的封装、服务和/或路由。在不相交模型中,一组结构(面向核心)接口由内核数据平面管理,而另一组由DPDK数据平面管理。在这个模型中,来自内核pod接口的业务旨在通过内核核心接口转发,并且来自DPDK pod的业务旨在通过DPDK结构接口转发。然而,对于相应的控制平面和路由协议来实现此类分离即使不是不可能的,也是非常复杂的。此外,不能保证入站或出站数据包将采用对应于预期数据平面的接口。这可能导致低效的数据包处理或者甚至导致数据平面中的崩溃。作为示例,实现不相交数据平面的计算节点可以具有由内核数据平面拥有的第一端口和由DPDK数据平面拥有的第二端口。因为计算节点通常不能通知外部节点使用哪个端口与计算节点上的pod通信,所以应当由DPDK平面数据平面处理的数据包可能到达内核所拥有的接口(例如,第一端口)。当此类情况发生时,内核必须将数据包转发到DPDK数据平面,从而导致数据包的开销和低效率的处理。此外,DPDK数据平面通常以比内核数据平面高得多的速率处理网络流量。结果,内核可以以高速率接收打算送给DPDK数据平面的数据包。这会导致显著的CPU利用率问题或资源存储器问题,这会进一步导致整体系统性能的降低。
鉴于上述内容,由现有系统提供的单个数据平面或不相交的数据平面可能不满足在服务器上执行的不同工作负载的变化的需要。此外,不相交的数据平面可能导致对到达内核数据平面的、针对DPDK数据平面的网络流量的低效处理。
本文描述的混合数据平面可以以提供优于现有系统的技术优点的方式支持云本地路由器。例如,本文描述的混合数据平面模型的技术优点是,混合数据平面可以通过在计算节点中配置DPDK数据平面以拥有所有结构接口来避免故障或低效的操作。Pod或其他工作负载可以被配置为利用作为混合数据平面的一部分提供的内核数据平面和DPDK数据平面中的一者或两者。该pod可以被配置为使用最适合于pod的通信需求(即,在该pod中部署的容器化应用的pod的通信需求)的数据平面。例如,需要高吞吐量和/或低延迟的pod可以被配置为利用DPDK数据平面,而需要DPDK数据平面不支持的更复杂封装的pod可以利用基于内核的数据平面。内核数据平面可以执行封装,并且将封装的数据包转发到DPDK数据平面,以便通过转发出DPDK数据平面所拥有的接口来传递。因为DPDK数据平面被分配由云本地路由器管理的所有物理接口,所以传入数据包被DPDK数据平面接收。DPDK数据平面可以包括用于确定传入数据包是要由DPDK数据平面处理还是要被传输到内核数据平面以用于解封装或DPDK数据平面不支持的其他处理的逻辑。
根据本文公开的技术的混合数据平面可以包括内核数据平面和DPDK数据平面。Pod或其他容器化工作负载可以被配置为利用混合数据平面中最好地满足其要求的任何一个数据平面。作为示例,需要高数据传输速率和低延迟的pod可以被配置为使用DPDK数据平面。然而,DPDK数据平面通常不支持内核数据平面可以支持的所有不同类型的封装和上层,诸如IPsec支持、SRv6、IP-IP、EVPN-VxLAN、L3VPN over SRv6等。因此,需要此类能力的pod或其他容器单元可以被配置为使用内核数据平面。然而,对于控制平面而言,可能难以有效地控制在同一计算节点上的内核数据平面和DPDK数据平面两者。
在一些方面,由云本地路由器管理的计算节点的所有物理接口被分配给DPDK虚拟路由器。被配置为使用DPDK的pod可以直接使用由启用DPDK的虚拟路由器提供的接口。需要不被启用DPDK的虚拟路由器支持的能力的pod,可以被配置为使用内核数据平面接口。在至少一些方面,该技术可以涉及将服务器的所有网络接口分配给服务器上的一个或多个基于DPDK的虚拟路由器。启用DPDK的虚拟路由器可以为被配置为使用例如DPDK的pod提供数据通信和路由功能,并且pod可以受益于提供高速、低延迟通信的混合数据平面的这个方面。该技术可以进一步涉及配置有网络栈的内核,以提供在启用DPDK的虚拟路由器中可能缺乏的能力。例如,内核(或被配置为内核的模块的虚拟路由器)可以提供支持IPsec、SRv6、IP-IP、EVPN-VxLAN、L3VPN over SRv6等的数据平面。需要这种支持的pod可以配置具有内核的虚拟网络接口,以使pod将数据发送到内核以供内核网络栈处理。内核被配置为将所有流量路由到启用DPDK的路由器,启用DPDK的路由器充当从内核接收的流量的通路。即,启用DPDK的虚拟路由器对数据包执行很少的处理或不执行处理,并且通过分配给基于DPDK的虚拟路由器的物理接口中的一者来发送数据包。因此,内核数据平面和启用DPDK的数据平面被组合以形成混合数据平面。
如上所述,混合数据平面可以被实现为使用容器编排平台来支持云本地路由器。容器联网接口(CNI)是用于应用容器的联网解决方案,并且是运行时可执行文件,其辅助配置容器与托管容器的计算设备(“主机”)的其他组件之间的接口,该计算设备可以是pod的成员。计算设备可以替代地被称为“计算节点”或“服务器”。CNI通常将网络地址(例如,IP地址)分配给网络接口,并且还可以添加与接口相关的路由,诸如用于默认网关和一个或多个名称服务器的路由。
虚拟路由器是在计算节点上提供数据包路由和转发数据平面功能的软件实体。计算节点可以是集中编排和供应的VM或容器的主机。虚拟路由器可以与SDN控制器一起工作,以通过交换路由、配置和其他数据来创建上层网络。虚拟路由器可以作为Linux内核模块或基于DPDK的进程运行。DPDK允许虚拟路由器每秒处理比作为内核模块运行时可能的更多的数据包。该虚拟路由器数据平面可以被容器化。组合起来,容器化的cRPD和容器化的基于DPDK的虚拟路由器可以因此是全功能的容器化路由器。
计算节点可以用于使用云本地开放无线电接入网(“O-RAN”或“开放RAN”)架构来实现(第5代)蜂窝网络的部分。云可以用容器和Kubernetes来构建。小区站点路由器功能可以在托管分布式单元(DU)5G功能作为容器化应用的计算节点上实现。也就是说,DU功能可以实现为这些计算节点上的Kubernetes pod。在非常高的级别,DU功能将消耗RAN业务,对其进行处理,并通过隧道技术将它发送到托管在数据中心中的控制单元功能(CU)。
为了满足可能涉及5G网络使用情况的路由功能和转发性能要求,计算节点可以被配置为使用具有混合数据平面的云本地路由器,其中在计算节点上运行的cRPD作为控制平面操作,并且将云本地路由器配置为包括基于内核的路由和基于DPDK的虚拟路由器两者。基于内核的路由可以处理基于DPDK的虚拟路由器不能处理的路由和封装,并且DPDK虚拟路由器为不需要更复杂封装的pod提供快速路径数据平面。
在示例中,描述了一种系统,其包括处理电路;容器化应用;物理网络接口;基于数据平面开发工具包(DPDK)的虚拟路由器,其被配置为在该处理电路上执行以经由该物理网络接口发送和接收数据包;和内核网络栈,其被配置为在该处理电路上执行,以对去往该容器化应用并且由该基于DPDK的虚拟路由器经由该物理接口接收的数据包执行隧道技术处理。
在另一示例中,描述了一种方法,该方法包括:由处理电路执行的基于数据平面开发工具包(DPDK)的虚拟路由器从物理接口接收去往容器化应用的第一数据包;由该基于DPDK的虚拟路由器确定由该处理电路执行的内核网络栈是否要针对该第一数据包执行隧道技术处理;以及响应于确定内核网络栈要针对第一数据包执行隧道技术处理,由基于DPDK的虚拟路由器将第一数据包转发至内核网络栈。
在另一示例中,描述了一种包括计算机可执行指令的计算机可读存储介质,该计算机可执行指令在被执行时使得执行基于DPDK的虚拟路由器的一个或多个处理器执行包括以下的操作:接收去往容器化应用的第一数据包;确定由该一个或多个处理器执行的内核网络栈是否要执行针对该第一数据包的隧道技术处理;以及响应于确定内核网络栈要针对第一数据包执行隧道技术处理,将第一数据包转发到内核网络栈。
在附图和以下描述中阐述本发明的一个或多个示例的细节。从说明书和附图以及从权利要求书中,其他特征、目的和优点将是显而易见的。
附图说明
图1A是根据本公开中描述的技术图示了示例移动网络系统的框图。
图1B是图示了可实现本文所描述的技术的示例计算基础设施的框图。
图2是根据本公开的技术更详细地图示图1A和图1B的网络系统的一部分的示例实现的框图。
图3是图示了根据本公开的技术的示例服务器的框图。
图4是图示了根据本公开的技术的具有该服务器内的示例控制和数据业务流的示例服务器的框图。
图5是描绘根据本公开的示例性方面的在虚拟路由器中对导致路由规划的端口添加的操作序列的概念图。
图6A是根据本公开中描述的技术的示例计算设备(例如,主机)的框图。
图6B是图6A的示例计算设备作为虚拟化计算基础设施的群集的编排器主节点的示例来操作的框图。
图7是根据本公开中描述的技术的包括混合数据平面的示例计算设备(例如,服务器)的框图。
图8A和图8B是图示了根据本公开的技术的对出站和入站数据包的示例处理的序列图。
图9是根据本公开的技术的pod的示例部署规范。
图10是图示了基于DPDK的虚拟路由器的操作的流程图。
在整个说明书和附图中,相同的附图标记表示相同的元件。
具体实施方式
“基于容器”或“操作系统”虚拟化是指操作系统在单个机器(虚拟或物理)上运行多个隔离系统的虚拟化。此类隔离的系统表示容器,诸如由Kubernetes容器运行时接口-开放容器倡议(CRI-O)、容器化、开放源Docker容器应用或由CoreOS Rkt(“Rocket”)提供的那些容器。与虚拟机一样,每个容器被虚拟化并且可以保持与主机和其他容器隔离。然而,与虚拟机不同,每个容器可以省略单独的操作系统,并且仅提供应用套件和应用特定库。通常,容器由主机(例如,网络设备107中的一者)作为隔离的用户空间实例来执行,并且可以与在主机上执行的其他容器共享操作系统和公共库。因此,容器可能比虚拟机需要更少的处理能力、存储和网络资源。一个或多个容器的组可以被配置为共享一个或多个虚拟网络接口,以便在对应的虚拟网络上通信。
在一些示例中,容器由它们的主机内核管理以允许资源(CPU、存储器、块I/O、网络等)的限制和优先化,而不需要启动任何虚拟机。在一些示例中,可以根据Linux容器(LXC)部署容器,Linux容器是用于使用单个Linux内核在控制主机上运行多个隔离的Linux系统(容器)的操作系统级虚拟化方法。
5G使用云本地方法,其中功能块被分解成微服务。微服务被部署为Kubernetes(缩写为“K8s”)编排的x86平台上的容器。这包括5G核心控制平面功能,诸如接入和移动性管理功能(AMF)和会话管理功能(SMF),RAN控制平面功能,诸如CU-CP、服务管理和编排(SMO)、近实时和非实时无线电智能控制器(RIC),甚至一些数据平面功能,诸如CU-DP和DU。
Pod之间的Kubernetes联网经由称为容器联网接口(CNI)的插件(也称为容器网络接口插件)。然而,当CNI所服务的容器化网络功能在电信网络中起关键作用时,典型CNI的联网能力相当基本并且不适合。如本文所述,云本地路由器(CNR)提供了对这些情况的更好的适应。云本地路由器是一种容器化路由器,其允许基于x86或ARM的主机成为网络路由系统的第一类成员,涉及诸如中间系统到中间系统(IS-IS)和边界网关协议(BGP)之类的协议,并且提供基于多协议标签交换/分段路由(MPLS/SR)的传输和多租户。换句话说,平台不是网络的附属设备(如客户边缘(CE)路由器),而是可以作为提供商边缘(PE)路由器操作。
云本地路由器可以具有优于常规路由器的一个或多个优点。路由器具有控制平面和转发平面。控制平面参与动态路由协议,并与网络中的其他路由器交换路由信息。它以前缀、下一跳和相关联的SR/MPLS标签的形式将结果下载到转发平面中。在控制平面不知道如何实现转发平面的确切细节的意义上,本文描述的实现是模块化的。在硬件路由器中,转发平面可以基于定制ASIC。相反,云本地路由器是虚拟化路由器。然而,路由协议软件在两种情况下功能上类似。这意味着云本地路由器受益于与支持世界上最大网络中的一些的基于硬件的路由器相同的高度综合且鲁棒的协议实现。
云本地路由器使用容器化路由协议守护进程(cRPD)控制平面和虚拟路由器(虚拟路由器)转发平面来以小覆盖区、功能上类似于非虚拟路由器的软件包、物理网络功能(PNF)传递高性能联网。转发平面可以经由选择DPDK、Linux内核或智能NIC来实现。完整的集成提供了符合K8s CNI的包,其可部署在K8s环境中(例如,启用Multus)。
服务器可以是K8s工作器/计算节点(或“minion”)。可以将pod垂直接入云本地路由器。Pod可能需要多个网络接口,在一些情况下由Multus meta-CNI来促进。这些接口中的每一者可以被映射到云本地路由器上的不同的第3层VPN中以支持多个网络切片。当由K8spod事件触发时,CNI可以动态地添加或删除pod与虚拟路由器之间的接口。CNI还可以以路由区分符和路由目标的形式,利用用于每个pod接口的主机路由和相应的层3VPN映射,动态地更新cRPD控制平面容器。可以使用虚拟路由和转发实例(VRF)来实现层3VPN。依次地,cRPD控制平面相应地经由gRPC接口对虚拟路由器转发平面进行编程。这样,云本地路由器被引入数据路径,支持到在边缘或区域DC站点中运行的CU的F1接口。虽然主要关于诸如分布式单元的O-RAN应用进行描述,但是云本地路由器技术可应用于配置用于其他容器化应用的基于主机的虚拟路由器。
由于CNR本身是云本机应用,因此它支持使用K8s清单或Helm图的安装。这些包括路由器的初始配置,包括路由协议和第3层VPN用于支持切片。CNR可以在几秒内被编排和配置,其中所有路由协议与网络的其余部分邻接并运行。在CNR的寿命期间中进行的配置改变(诸如添加或移除网络切片)可以经由CLI、K8s清单、NetConf或Terraform选择。
通过采用K8s CNI框架,云本地路由器可以减轻当使用容器化设备而不是其物理相似物时招致的传统操作开销。通过暴露适当的设备接口,云本地路由器可以针对物理设备规范化虚拟设备的操作模型,从而消除在运营商的网络操作环境内采用的障碍。云本地路由器可以向任何经训练的操作团队呈现熟悉的路由器具外观和感觉。云本地路由器具有与基于硬件的平台类似的特征和能力以及类似的操作模型。同样,域控制器可以使用它与任何其他Junos路由器一起使用的协议,来与云本地路由器通信并控制云本地路由器,例如Netconf/OpenConfig、gRPC、路径计算单元协议(PCEP)和可编程路由守护进程(pRPD)应用程序接口(API)。
图1A是根据本公开中描述的技术图示了示例移动网络系统的框图。移动网络系统100可以是实现由例如第3代合作伙伴计划(3GPP)、开放无线接入网(“O-RAN”或“ORAN”)联盟、欧洲电信标准协会(ETSI)、互联网工程任务组(IETF)和国际电信联盟(ITU)公布的5G标准的5G网络。
5G网络通过围绕云本地原理构建而允许移动前传和中传网络的分解。结果,服务提供商可以避免被锁定到特定的电器厂商,并且可以组合来自不同厂商的不同层和位置的有效解决方案,以构建和提供移动网络系统。这可以改进无线接入网络(RAN),特别是通过使它们更开放、更有弹性和更可伸缩。
基于O-RAN的网络将在传统电信网络中发现的基带单元(BBU)分解为三个功能单元:无线电单元(RU)、分布式单元(DU)和集中式单元(CU)。RU、DU和CU的不同功能可以由基于x86或基于ARM的主机服务器执行的软件来实现。CU可以还被分离成不同的控制平面(CU-CP)和用户平面(CU-UP)功能,以进一步控制和用户平面分离(CUPS)。该解耦有助于给部署带来灵活性-RU、DU和CU的不同组合可以部署在相同位置或不同位置。例如,在延迟关键的情况下,RU、DU和CU可一起放置在边缘处。符合O-RAN的DU和CU通常分别被称为O-DU和O-CU。被称为用户平面功能(UPF)的附加数据平面元件在移动核心网络7中操作,以在CU和数据网络15之间转发业务。附加的控制平面元件在移动核心网络7中操作。这些控制平面元件包括网络切片选择功能(NSSF)、策略控制功能(PCF)、认证服务器功能(ASUF)、接入和移动性管理功能(AMF)、网络暴露功能(NEF)、网络功能库功能(NRF)、应用功能(AF)、统一数据管理(UDM)以及会话管理功能(SMF)。
移动网络系统100包括无线电接入网络9和移动核心网络7。无线电接入网络9包括位于各种蜂窝网络站点(“小区站点”)的RU 14。每个RU 14由LO PHY和RF发送器组成。LOPHY组件可使用用于高性能数据包处理的专用硬件来实现。
RU 14经由前传网络连接到DU 22A-22X(统称为“DU 22”)。前传网络连接LO PHY和HI PHY,并且由RU 14和DU 22使用以实现5G的F2接口。DU 22管理RU 14的无线电数据包传输。在一些情况下,此类数据包传输符合通用数据包无线电接口(CPRI)和/或增强型CPRI(ePRI)标准,或IEEE 1914.3。DU 22可以实现无线链路控制(RLC)、媒体访问控制(MAC)和HIPHY层。DU 22至少部分地由CU 13A-13B(统称为“CU 13”)控制。
DU 22经由中程网络连接到CU 13,中程网络可以由DU 22和CU 13用来实现5G的F1接口。CU 13可以实现无线电资源控制(RRC)和数据包数据会聚协议(PDCP)层。CU 13经由回程网络连接到移动核心网络7。中程网络和回程网络可以各自是广域网(WAN)。
在移动网络系统100的无线电接入网络9中,gNodeB包括CU 13中的一者和DU 22中的一者。CU可支持多个DU以实现多个gNodeB。并且一个或多个RU可以由单个DU支持。因此,例如关于图1A,CU 13A和DU 22A以及RU 14中的一者可以形成一个eNodeB,而CU 13A和DU22B(服务器12B的)以及RU 14中的另一者可以形成另一个eNodeB。
如图1A所示,DU 22中的任何DU可以位于或可以不位于包括由DU支持的RU 14的小区站点处。DU 22X位于小区站点处,而DU 22A-22N位于本地数据中心处,并且共同地支持多个RU 14。移动网络系统100可以具有包括数千个小区站点的无线电接入网络9,每个小区站点具有一个或多个RU 14以及可选地一个或多个DU 22。无论是位于小区站点还是位于站外,DU通常在所支持RU的20km内。CU 13在图1A中被示为位于区域数据中心,通常在所支持的DU 22的40km内。
无线电接入网络9连接到移动核心网络7,以与数据网络15交换数据包。移动核心网络7可以是5G核心网络,并且数据网络(DN)15可以表示例如一个或多个服务提供商网络和服务、互联网、第3方服务、IP多媒体子系统或其他网络。
移动网络系统100包括多个服务器12A-12X以执行DU 22。每个服务器12可以是托管/执行实现DU 22的软件的真实或虚拟服务器。此类软件可以包括一个或多个应用,其被部署为例如虚拟机或容器到服务器12。虽然在图1A中未示出,但是CU 13也可以由服务器执行。
DU 22、中程网络、CU 13和回程网络的组合有效地实现了无线电单元14和移动核心网络7之间的基于IP的传输网络。
云本地路由器20A-20X(“CNR 20A-20X”以及统称为“CNR 20”)提供DU 22和CU 13之间的层3路由功能。这些CNR 20可以在与一个或多个DU 22相同的服务器12上执行,以向此类DU 22提供商边缘路由器功能。在一些示例中,CNR 20中的任何CNR可以与CNR为其提供IP服务的一个或多个DU 22一起部署到本地数据中心,如关于CNR 20A-20N所示,即,其中本地数据中心包括执行用于一个或多个小区站点的DU 22的服务器12。在一些示例中,CNR可以部署在如图1A所示的小区站点处。部署在小区站点处的CNR可以被称为“虚拟化小区站点路由器”。
使用容器化路由协议守护进程24A-24X(“cRPD 24A-24X”以及统称为“cRPD 24”)中的一者来实现每个CNR 20。更具体地,每个CNR 20使用cRPD 24中的对应cRPD作为用于实现层3路由器的控制平面。cRPD提供控制平面路由功能。例如,cRPD可以执行IP(IPv4/IPv6)下层路由协议,诸如中间系统-中间系统(IS-IS)和边界网关协议(BGP);例如,向CU 13通告DU 22在集群内部和外部的可达性;实现网络命名空间(使用L3VPN和EVPN类型-5通告来支持);实现用于安全、网络隔离和服务质量(QoS)的访问控制列表(ACL)和网络策略;支持隧道和遂穿协议(例如,MPLS、SR-MPLS、SRv6、SR-MPLSoIPv6、SR-MPLSoIPv4、VxLAN、IP-in-IP、GRE);支持使用BGP发信号的动态隧道技术;支持IPSec隧道的加密;以及利用学习到的和/或配置的路由信息对服务器的CNR的转发平面进行编程,以提供DU 22中的一者或多者与CU13中的一者之间的层3数据包转发、封装、数据包过滤和/或QoS。
例如,由服务器12A执行的CNR 20A包括cRPD 24A和服务器12A的转发平面(例如,SmartNIC、基于内核的转发平面或基于数据平面开发工具包(DPDK)的转发平面)。cRPD 24A提供一个或多个上述路由功能以编程CNR 20A的转发平面,以便在其它任务中,为集群外的DU 22A通告层3路由-包括穿过中程网络到CU 13A-并转发DU 22A和CU 13A之间的层3数据包。这样,该技术实现了云本地的、容器化小区站点路由器20,其在与容器化DU 22相同的服务器12上执行,因此显著地减少了DU22和CU 13之间的中程上的延迟。
作为容器化路由器的CNR 20允许基于x86或基于ARM的主机成为网络路由系统的第一类成员,参与诸如IS-IS和BGP的协议,并提供基于MPLS/SR的传输和多租用。因此,CNR20可以作为在DU 22、CU 13和移动核心网络7之间传输层3数据包的网络的提供商边缘(PE)路由器来操作,而不是作为网络的附属设备(类似于客户边缘(CE)路由器)。
此外,在一些示例中,cRPD 24和基于主机的转发平面的集成还可以递送可部署在Kubernetes环境中的Kubernetes CNI兼容包。由DU 22和CNR 20的单个服务器一起执行可以避免具有单独DU和路由器的双盒解决方案,潜在地降低了成本、功率和空间要求,这对于小区站点特别有吸引力。应用工作负载可以是容器化网络功能(CNF),诸如DU。
编排器50表示容器编排平台。在虚拟化计算基础设施的上下文中的“编排”一般是指向编排平台可用的主机服务器供应、调度和管理虚拟执行元件和/或在此类虚拟执行元件上执行的应用和服务。容器编排具体地允许容器编排,并且涉及例如由容器编排平台将容器部署、管理、缩放和配置到主机服务器。编排平台的示例性实例包括Kubernetes、Docker swarm、Mesos/Marathon、OpenShift、OpenStack、VMware和Amazon ECS。编排器50编排DU 22和CNR 20的至少容器化的RPD 24。在一些示例中,CNR20的数据平面也由编排器50容器化和编排。数据平面可以是基于DPDK的数据平面、基于内核的数据平面或混合数据平面,如下面进一步描述的。
包括实现容器化路由协议守护进程24的容器可以被部署到使用基于集群的框架的虚拟化环境,在该基于集群的框架中,集群的集群主节点管理容器到集群的一个或多个集群工作节点的部署和操作。本文使用的术语“主节点”和“工作节点”包含用于类似装置的不同编排平台术语,其在集群的主要管理元件和托管集群的装置的主要虚拟执行元件之间进行区分。例如,Kubernetes平台使用术语“集群主节点”和“工作节点”,而Docker Swarm平台是指集群管理器和集群节点。服务器12或其上的虚拟机可以表示集群节点。
编排器50和软件定义网络(SDN)控制器70可以在单独的计算设备上执行或在相同的计算设备上执行。编排器50和SDN控制器70中的每一者可以是在一个或多个计算设备上执行的分布式应用。编排器50和SDN控制器70可以实现用于一个或多个集群的相应主节点,每个集群具有由相应服务器12实现的一个或多个工作节点。通常,SDN控制器70控制无线电接入网络9的网络配置,以促进DU 22、CU 13和移动核心网络7之间的数据包化通信。SDN控制器70可以将路由和配置信息分发到无线电接入网络9的控制平面元件,具体地,分发到cRPD 24。SDN控制器70可以例如对分段路由报头进行编程、配置L3VPN、配置无线电接入网络9的路由器(包括云本地路由器20)中的VRF。SDN控制器70可以实现一个或多个南向协议,用于配置中程和回程网络的路由器、交换机和其他网络设备,以及用于配置CNR 20。示例性南向协议可以包括路径计算元件协议(PCEP)、BGP、Netconf、OpenConfig、用于配置cRPD 24的另一协议等。关于L3VPN的附加信息可以在以下中找到:“BGP/MPLS IP Virtual PrivateNetworks(VPNs)”,Request for Comments 4364,Network Working Group of InternetEngineering Task Force,2006年2月,其通过引用整体并入本文作为参考。
SDN控制器70可以提供逻辑上并且在一些情况下物理上集中的控制器。在一些示例中,SDN控制器70可以响应于从编排器50和/或管理员/操作者接收的配置输入而操作。SDN控制器70可以对诸如服务器12、网络交换机/路由器和/或其他网络基础设施的NFV基础设施(NFVI)进行编程。在NFVI编程的情况下,SDN控制器70可以配置操作系统内核的方面以配置L3 IP路由、Linux桥接件、iptable、网络命名空间和/或虚拟交换机。
示例SDN控制器70、虚拟路由器和虚拟路由器代理的附加信息可以在以下中找到:2013年6月5日提交的名称为“PHYSICAL PATH DETERMINATION FOR VIRTUAL NETWORKPACKET FLOWS”的国际申请号PCT/US2013/044378;2014年3月26日提交的名称为“TUNNELEDPACKET AGGREGATION FOR VIRTUAL NETWORKS”的美国专利申请第14/226,509号;和在2021年6月30日提交的名称为“NETWORK CONTROLLER HORIZONTAL SCALING FOR NETWORKDEVICE CONFIGURATIONS SESSION MANAGEMENT”;其每一者通过引用并入本文作为参考,如同在本文完全阐述一样。
通常,编排器50控制跨服务器12的集群的容器的部署、缩放和操作以及计算基础设施的提供,该计算基础设施可以包括以容器为中心的计算基础设施。编排器50以及在一些情况下,网络控制器70可以实现用于一个或多个Kubernetes集群的相应集群主机。作为示例,Kubernetes是提供跨公共和私有云的可移植性的容器管理平台,公共和私有云中的每一者都可以向容器管理平台提供虚拟化基础设施。
图1B是图示可实现本文所描述的技术的示例计算基础设施108的框图。通常,数据中心110为客户站点111(图示为“客户111”)的应用和服务提供操作环境,该客户站点具有通过服务提供商网络107耦合到数据中心的一个或多个客户网络。数据中心110可以是图1A所示的本地数据中心和/或区域数据中心的实现。数据中心110可以例如托管基础设施设备,诸如联网和存储系统、冗余电源和环境控制。服务提供商网络107耦合到公共网络115,其可以表示由其他提供商管理的一个或多个网络,并且因此可以形成大规模公共网络基础设施的一部分,诸如互联网。公共网络115可以表示例如局域网(LAN)、广域网(WAN)、互联网、虚拟LAN(VLAN)、企业LAN、层3虚拟专用网(VPN)、由操作服务提供商网络107的服务提供商操作的互联网协议(IP)内联网、企业IP网络或其某种组合。公共网络115可以是图1A的数据网络15或者是经由数据网络15可访问的网络。
虽然客户站点111和公共网络115被图示并主要描述为服务提供商网络107的边缘网络,但是在一些示例中,客户站点111和公共网络115中的一者或多者可以是数据中心110或另一数据中心内的租户网络。例如,数据中心110可以托管多个租户(客户),每个租户与一个或多个虚拟专用网络(VPN)相关联,每个VPN可以实现客户站点111中的一者。
服务提供商网络107提供到附接的客户站点111、数据中心110和公共网络115的基于数据包的连接。服务提供商网络107可以表示由服务提供商拥有和运营以互连多个网络的网络。服务提供商网络107可以实现多协议标签交换(MPLS)转发,并且在此类实例中可以被称为MPLS网络或MPLS骨干。在一些实例中,服务提供商网络107表示提供来自一个或多个服务提供商的服务的多个互连的自治系统,诸如互联网。在一些方面,服务提供商网络107可以是图1A的移动核心网络7的实现。
在一些示例中,数据中心110可以表示许多地理上分布的网络数据中心中的一者。如图1B的示例中所示,数据中心110可以是为客户提供网络服务的设施。服务提供商的客户可以是集体实体,诸如企业和政府或个人。例如,网络数据中心可以为若干企业和终端用户托管web服务。其他示例性服务可包括数据存储、虚拟专用网络、流量工程、文件服务、数据挖掘、科学或超级计算等。虽然被图示为服务提供商网络107的单独边缘网络,但是数据中心110的元件,诸如一个或多个物理网络功能(PNF)或虚拟化网络功能(VNF)可以被包括在服务提供商网络107核心内。
在该示例中,数据中心110包括经由由一层或多层物理网络交换机和路由器提供的交换机结构114互连的存储和/或计算服务器(或“节点”),其中服务器12被描绘为耦合到架顶交换机116A-116N。虽然在图1B中仅详细示出了耦合到TOR交换机116A的服务器12A,但是其他服务器12可以耦合到数据中心110的其他TOR交换机116。
所示示例中的交换结构114包括互连的架顶(TOR)(或其他“叶”)交换机116A-116N(统称为“TOR交换机116”),其耦合到机箱(或“主干”或“核心”)交换机118A-118M(统称为“机箱交换机118”)的分布层。尽管未示出,但是数据中心110还可以包括例如一个或多个非边缘交换机、路由器、集线器、网关、诸如防火墙的安全设备、入侵检测和/或入侵防御设备、服务器、计算机终端、膝上型计算机、打印机、数据库、诸如蜂窝电话或个人数字助理的无线移动设备、无线接入点、桥接件、电缆调制解调器、应用加速器或其他网络设备。数据中心110还可以包括一个或多个物理网络功能(PNF),诸如物理防火墙、负载均衡器、路由器、路由反射器、宽带网络网关(BNG)、移动核心网络元件和其他PNF。
在该示例中,TOR交换机116和机箱交换机118向服务器12提供到IP结构120和服务提供商网络107的冗余(多宿主)连接。机箱交换机118聚集业务流并提供TOR交换机116之间的连接。TOR交换机116可以是提供层2(MAC)和/或层3(例如,IP)路由和/或交换功能的网络设备。TOR交换机116和机箱交换机118可以各自包括一个或多个处理器和存储器,并且可以执行一个或多个软件过程。机箱交换机118耦合到IP结构120,其可以执行层3路由以通过服务提供商网络107在数据中心110和客户站点111之间路由网络流量。数据中心110的交换架构仅是示例。例如,其他交换架构可以具有更多或更少的交换层。IP结构120可以包括一个或多个网关路由器。
术语“数据包流”、“业务流”或简单地“流”是指源自特定源设备或端点并被发送到特定目的地设备或端点的一组数据包。单个数据包流可以由5元组来标识:<源网络地址、目的网络地址、源端口、目的端口、协议>。该5元组通常标识接收到的数据包所对应的数据包流。n元组是指从5元组提取的任何n个项。例如,数据包的2元组可以指数据包的<源网络地址、目的网络地址>或<源网络地址、源端口>的组合。
服务器12可以各自表示计算服务器或存储服务器。例如,每个服务器12可以表示被配置为根据本文描述的技术操作的计算设备,诸如基于X86处理器的服务器。服务器12可为网络功能虚拟化基础设施(NFVI)提供NFVI架构。
服务器12可以配置有内核380。内核380可以管理服务器12的操作,包括调度进程、线程或其他可执行单元以及服务器12的管理设备、文件系统和存储器。内核380可以表示Linux内核、其他Unix变体内核、或者包括网络栈并且能够进行数据包转发的其他操作系统内核。
服务器12中的任何服务器都可以通过虚拟化服务器的资源来配置有虚拟执行元件,以提供在服务器上执行的一个或多个进程(应用)之间的隔离。“基于管理程序的”或“硬件级”或“平台”虚拟化是指创建虚拟机,每个虚拟机包括用于执行一个或多个进程的客户操作系统。通常,虚拟机提供用于在隔离的虚拟环境中执行应用的虚拟化/客操作系统。因为虚拟机从主机服务器的物理硬件虚拟化,所以执行的应用与主机和其他虚拟机的硬件隔离。每个虚拟机可以配置有一个或多个虚拟网络接口,用于在对应的虚拟网络上通信。
虚拟网络是在物理网络之上实现的逻辑构造。虚拟网络可用于替代基于VLAN的隔离,并在虚拟化数据中心,诸如数据中心110中提供多租用。每个租户或应用可以具有一个或多个虚拟网络。除非安全策略明确允许,否则每个虚拟网络可以与所有其他虚拟网络隔离。
虚拟网络可以使用数据中心110网关路由器(图1B中未示出)连接到物理多协议标签交换(MPLS)第3层虚拟专用网络(L3 VPN)和以太网虚拟专用网络(EVPN)网络并在其上扩展。虚拟网络也可用于实现网络功能虚拟化(NFV)和服务链接。
虚拟网络可以使用各种机制来实现。例如,每个虚拟网络可以被实现为虚拟局域网(VLAN)、虚拟专用网(VPN)等。虚拟网络也可以使用两个网络来实现,这两个网络是由IP结构120和交换结构114组成的物理下层网络以及虚拟上层网络。物理下层网络的作用是提供“IP结构”,其提供从任何物理设备(服务器、存储设备、路由器或交换机)到任何其他物理设备的单播IP连接。下层网络可以提供从网络中的任何点到网络中的任何其他点的统一的低延迟、非阻塞、高带宽连接性。
如下面关于虚拟路由器121A进一步描述的,在服务器12中运行的虚拟路由器使用它们之间的动态“隧道”的网格在物理下层网络之上创建虚拟上层网络。这些上层隧道可以是例如通过GRE/UDP隧道的MPLS,或者VXLAN隧道,或者NVGRE隧道。下层物理路由器和交换机可以不存储虚拟机或其他虚拟执行元件的任何每租户状态,诸如任何媒体访问控制(MAC)地址、IP地址或策略。下层物理路由器和交换机的转发表例如可以仅包含物理服务器12的IP前缀或MAC地址。(将虚拟网络连接到物理网络的网关路由器或交换机是例外,并且可以包含租户MAC或IP地址)
服务器12的虚拟路由器121通常包含每个租户的状态。例如,它们可以包含每个虚拟网络的单独的转发表(路由实例)。该转发表包含虚拟机或其他虚拟执行元件(例如容器的pod)的IP前缀(在层3上层的情况下)或MAC地址(在层2上层的情况下)。没有单个虚拟路由器121需要包含整个数据中心中的所有虚拟机的所有IP前缀或所有MAC地址。给定的虚拟路由器121仅需要包含本地存在于服务器12上的那些路由实例(即,其具有至少一个存在于服务器12上的虚拟执行元件)。
SDN控制器70或物理网关路由器(或交换机)的控制平面节点之间的控制平面协议可以是BGP(并且可以是用于管理的Netconf)。这是相同的控制平面协议,也可以用于MPLSL3VPN和MPLS EVPN。SDN控制器70和虚拟路由器121之间的协议可以基于例如XMPP。
服务器12托管在本文由IP结构120和交换结构114表示的物理网络上操作的一个或多个虚拟网络的虚拟网络端点。尽管主要关于基于数据中心的交换网络进行描述,但是诸如服务提供商网络107的其他物理网络可以承载一个或多个虚拟网络。
每个服务器12可以托管一个或多个虚拟执行元件,每个虚拟执行元件具有用于在物理网络中配置的一个或多个虚拟网络的至少一个虚拟网络端点。虚拟网络的虚拟网络端点可表示共享该虚拟网络的虚拟网络接口的一个或多个虚拟执行元件。例如,虚拟网络端点可以是虚拟机、一个或多个容器(例如,pod)的集合、或另一其他虚拟执行元件,诸如虚拟网络的层3端点。术语“虚拟执行元件”涵盖虚拟机、容器和为应用提供至少部分独立的执行环境的其他虚拟化计算资源。术语“虚拟执行元件”也可以包含一个或多个容器的pod。如图1B所示,服务器12A以pod 122A和122B的形式托管虚拟网络端点,每个虚拟网络端点具有一个或多个容器。然而,给定服务器12的硬件资源限制,服务器12可执行与实际情况一样多的虚拟执行元件。每个虚拟网络端点可以使用一个或多个虚拟网络接口来执行数据包I/O或以其他方式处理数据包。例如,虚拟网络端点可以使用由NIC 113A启用的一个虚拟硬件组件(例如,SR-IOV虚拟功能)来在与TOR交换机116A的一个或多个通信链路上执行数据包I/O和接收/发送数据包。下面描述虚拟网络接口的其他示例。
服务器12各自包括至少一个网络接口卡(NIC)113,其各自包括至少一个接口以通过通信链路与TOR交换机116交换数据包。例如,服务器12A包括NIC 113A。NIC 113中的任一者可提供用于虚拟化输入/输出(I/O)的一个或多个虚拟硬件组件121。用于I/O的虚拟硬件组件可以是物理NIC的虚拟化(“物理功能”)。例如,在单根I/O虚拟化(SR-IOV)中,其在外围设备接口特殊兴趣组SR-IOV规范中描述,网络接口卡(或“网络适配器”)的PCIe物理功能被虚拟化以将一个或多个虚拟网络接口呈现为“虚拟功能”,以供在服务器12上执行的相应端点使用。这样,虚拟网络端点可以共享相同的PCIe物理硬件资源,并且虚拟功能是虚拟硬件组件121的示例。作为另一示例,一个或多个服务器12可以实现虚拟化,即例如对于Linux操作系统可用的超虚拟化框架,其提供仿真的NIC功能作为一种类型的虚拟硬件组件以向虚拟网络端点提供虚拟网络接口。作为另一示例,一个或多个服务器12可实现开放vSwitch以在所托管的虚拟机的一个或多个虚拟NIC(vNIC)之间执行分布式虚拟多层交换,其中此类vNIC还可表示向虚拟网络端点提供虚拟网络接口的一种类型的虚拟硬件组件。在一些实例中,虚拟硬件组件是虚拟I/O(例如,NIC)组件。在一些实例中,虚拟硬件组件是SR-IOV虚拟功能。在一些示例中,服务器12中的任何服务器可以实现Linux桥接件,该Linux桥接件仿真硬件桥接件并且在服务器的虚拟网络接口之间或在服务器的虚拟网络接口与服务器的物理网络接口之间转发数据包。对于由服务器、Linux桥接件或在服务器上执行的其他操作系统桥接件托管的容器的Docker实现,在容器之间交换数据包可以被称为“Docker桥接件”。本文使用的术语“虚拟路由器”可以包括控制或钨结构虚拟路由器、开放式vSwitch(OVS)、OVS桥接件、Linux桥接件、Docker桥接件或位于主机设备上并且在一个或多个虚拟网络的虚拟网络端点之间执行交换、桥接或路由数据包的其他设备和/或软件,其中虚拟网络端点由一个或多个服务器12托管。
NIC 113中的任一者可包括内部设备交换机以在与NIC相关联的虚拟硬件组件之间交换数据。例如,对于支持SR-IOV的NIC,内部设备交换机可以是虚拟以太网桥接件(VEB),以在SR-IOV虚拟功能之间进行交换,并且相应地,在被配置为使用SR-IOV虚拟功能的端点之间进行交换,其中每个端点可以包括客户操作系统。内部设备交换机可以可替代地称为NIC交换机,或者对于SR-IOV实现,称为SR-IOV NIC交换机。与NIC 113A相关联的虚拟硬件组件可以与第2层目的地地址相关联,该目的地地址可以由NIC 113A或负责配置NIC113A的软件进程分配。物理硬件组件(或SR-IOV实现的“物理功能”)也与第2层目的地地址相关联。
一个或多个服务器12中的每一者可以包括虚拟路由器121,其执行用于数据中心110内的对应虚拟网络的一个或多个路由实例,以提供虚拟网络接口并在虚拟网络端点之间路由数据包。在一些方面,虚拟路由器121可以被并入作为CNR 20的一部分。在一些方面,虚拟路由器可以是在服务器12的内核空间存储器中实现的虚拟路由器,并且可以被称为“基于内核的”虚拟路由器。在一些方面,虚拟路由器121可以在服务器12的用户存储空间中实现,并且支持DPDK接口。此类虚拟路由器可以被称为“DPDK”虚拟路由器。
虚拟路由器121的每个路由实例可以与网络转发表相关联。每个路由实例可以表示用于互联网协议-虚拟专用网(IP-VPN)的虚拟路由和转发实例(VRF)。由服务器12A的虚拟路由器121A例如从数据中心110的下层物理网络结构(即,IP结构120和交换结构114)接收的数据包可以包括外部报头,以允许物理网络结构将有效载荷或“内部数据包”隧道传输到执行虚拟路由器的服务器12A的网络接口卡113A的物理网络地址。外部报头不仅可以包括服务器的网络接口卡113A的物理网络地址,还可以包括虚拟网络标识符,诸如VxLAN标签或多协议标签交换(MPLS)标签,其识别虚拟网络中的一者以及由虚拟路由器121A执行的相应路由实例。内部数据包包括具有目的网络地址的内部报头,该目的网络地址符合由虚拟网络标识符所识别的虚拟网络寻址空间。
虚拟路由器121终止虚拟网络上层隧道,并基于数据包的隧道封装报头来确定所接收数据包的虚拟网络,并将数据包转发到数据包的适当目的地虚拟网络端点。对于服务器12A,例如,对于从由服务器12A托管并且耦合到虚拟路由器121A的虚拟网络端点(例如,pod 122A)出站的每个数据包,虚拟路由器121A附加指示数据包的虚拟网络的隧道封装报头,以生成封装的或“隧道”数据包,并且虚拟路由器121A经由虚拟网络的上层隧道将封装的数据包输出到物理目的地计算设备,诸如服务器12中的另一者。如本文所使用的,虚拟路由器121可以执行隧道端点的操作,以封装由虚拟网络端点发起的内部数据包,以生成隧道数据包,并且解封装隧道数据包,以获得用于路由到其他虚拟网络端点的内部数据包。
在图1B的示例中,虚拟路由器121A是启用数据平面开发工具包(DPDK)的虚拟路由器。即,虚拟路由器121A使用DPDK作为数据平面。在该模式下,虚拟路由器121A作为链接到DPDK库(未示出)的用户空间应用而运行。这是虚拟路由器的性能版本,并且通常由电信公司使用,其中VNF通常是基于DPDK的应用。虚拟路由器121A作为DPDK虚拟路由器的性能可以实现比作为基于内核的虚拟路由器操作的虚拟路由器高得多的吞吐量。物理接口由DPDK的轮询模式驱动程序(PMD)使用而不是Linux内核的基于中断的驱动程序使用,从而消除了许多与基于中断的驱动程序相关联的上下文切换开销。
诸如vfio或uio_pci_generic的用户I/O(UIO)内核模块可用于将物理网络接口的寄存器在用户空间中暴露,以使得它们可由DPDK PMD访问。当NIC 113A被绑定到UIO驱动器时,它从Linux内核空间移动到用户空间,并且因此不再由Linux OS管理或可见。因此,是DPDK应用(即,在该示例中为虚拟路由器121A)完全管理NIC 113。这包括数据包轮询、数据包处理和数据包转发。用户数据包处理步骤可以由虚拟路由器121ADPDK数据平面执行,其中由内核(图1B中未示出的内核)限制或内核不参与。该“轮询模式”的性质使得虚拟路由器121A DPDK数据平面数据包处理/转发与中断模式相比高效得多,尤其是在数据包速率高时。在数据包I/O期间存在有限中断和上下文切换或不存在中断和上下文切换。
DPDK虚拟路由器的示例的附加细节可以在“DAY ONE:CONTRAIL DPDK VROUTER,”2021,Kiran KN等人,Juniper Networks公司,其通过引用整体并入本文作为参考。
计算基础设施108实现用于跨服务器12自动化虚拟执行元件的部署、缩放和操作的自动化平台,以提供用于执行应用工作负载和服务的虚拟化基础设施。在一些示例中,平台可以是容器编排平台,其提供以容器为中心的基础设施,用于使容器的部署、缩放和操作自动化以提供以容器为中心的基础设施。在虚拟化计算基础设施的上下文中的“编排”一般是指向编排平台可用的主机服务器供应、调度和管理虚拟执行元件和/或在此类虚拟执行元件上执行的应用和服务。容器编排具体地允许容器编排,并且涉及例如由容器编排平台将容器部署、管理、缩放和配置到主机服务器。编排平台的示例性实例包括Kubernetes、Docker swarm、Mesos/Marathon、OpenShift、OpenStack、VMware和Amazon ECS。
计算基础设施108的自动化平台的元件至少包括服务器12、编排器50和SDN控制器70。可以使用基于集群的框架将容器部署到虚拟化环境,其中集群的集群主节点管理将容器部署到集群的一个或多个集群工作节点和对集群工作节点的操作。本文使用的术语“主节点”和“工作节点”包含用于类似装置的不同编排平台术语,术语在集群的主要管理元件和集群的主要容器托管装置之间进行区分。例如,Kubernetes平台使用术语“集群主机”和“工作节点”,而Docker群平台是指集群管理器和集群节点。
编排器50和SDN控制器70可以在单独的计算设备上执行,在相同的计算设备上执行。编排器50和SDN控制器70中的每一者可以是在一个或多个计算设备上执行的分布式应用。编排器50和SDN控制器70可以实现用于一个或多个集群的相应主节点,每个集群具有由相应服务器12实现的一个或多个工作节点(也称为“计算节点”)。
通常,SDN控制器70控制数据中心110架构的网络配置,以例如建立一个或多个虚拟网络,用于虚拟网络端点之间的数据包化通信。SDN控制器70提供逻辑上和在一些情况下物理上集中式的控制器,以便于数据中心110内的一个或多个虚拟网络的操作。在一些示例中,SDN控制器70可以响应于从编排器50和/或管理员/操作者接收的配置输入而操作。在2013年6月5日提交的名称为“PHYSICAL PATH DETERMINATION FOR VIRTUAL NETWORKPACKET FLOWS”的国际申请号PCT/US2013/044378和2014年3月26日提交的名称为“TUNNELED PACKET AGGREGATION FOR VIRTUAL NETWORKS”的美国专利申请第14/226,509号中找到关于结合数据中心110的其他设备或其他软件定义网络操作的SDN控制器70的附加信息,其每一者通过引用并入本文作为参考,如同在本文完全阐述一样。
通常,编排器50控制跨服务器12的集群的容器的部署、缩放和操作以及计算基础设施的提供,该计算基础设施可以包括以容器为中心的计算基础设施。编排器50以及在一些情况下SDN控制器70可以实现用于一个或多个Kubernetes集群的相应集群主机。作为示例,Kubernetes是提供跨公有云和私有云的可移植性的容器管理平台,公有云和私有云中的每一者都可以向容器管理平台提供虚拟化基础设施。Kubernetes指挥编排系统的示例组件在下面参考图6B描述。
在一个示例中,pod 122A和122B是Kubernetes pod,并且是虚拟网络端点的示例。pod是一个或多个逻辑上相关的容器(图1B中未示出)、容器的共享存储以及如何运行容器的选项的组。在被实例化以便执行时,pod可以可替代地被称为“pod副本”。Pod 122A和122B的每个容器是虚拟执行元件的示例。Pod的容器总是共同位于单个服务器上、共同调度、以及在共享的上下文中运行。Pod的共享上下文可以是一组Linux名字空间、cgroups和隔离的其他方面。在pod的上下文中,各个应用可以具有应用的进一步的子隔离。通常,pod内的容器具有公共IP地址和端口空间,并且能够经由本地主机来检测彼此。因为它们具有共享的上下文,所以pod内的容器也使用进程间通信(IPC)彼此通信。IPC的示例包括SystemV信号量或POSIX共享存储器。通常,作为不同pod的成员的容器具有不同的IP地址,并且在缺少用于实现该特征的配置的情况下不能通过IPC进行通信。作为不同pod的成员的容器通常改为经由pod IP地址相互通信。
服务器12A包括用于运行容器化应用的容器平台119A,诸如Pod122A和122B的那些容器化应用。容器平台119A从编排器50接收请求以在服务器12A中获得和托管容器。容器平台119A获得并执行容器。
容器平台119A包括容器网络接口(CNI)117A,该接口被配置用于虚拟网络端点的虚拟网络接口。编排器50和容器平台119A使用CNI 117A来管理包括pod 122A和122B的pod的联网。例如,CNI 117A创建虚拟网络接口以将Pod 122A连接到虚拟路由器121A,并且创建虚拟网络接口以将Pod 122B连接到内核380。CNI 117A由此使得此类pod的容器能够经由它们相应的虚拟网络接口通过虚拟网络与其他虚拟网络端点通信。CNI 117A可以例如将用于虚拟网络的虚拟网络接口插入到用于Pod 122A中的容器的网络命名空间中,并且在虚拟路由器121A中配置(或请求配置)用于虚拟网络的虚拟网络接口,使得虚拟路由器121A被配置为经由虚拟网络接口将从虚拟网络接收的数据包发送到Pod 122A的容器,并且在虚拟网络上发送经由虚拟网络接口从Pod 122A的容器接收的数据包。CNI 117A可以分配网络地址(例如,用于虚拟网络的虚拟IP地址)并且可以为虚拟网络接口建立路由。在Kubernetes中,默认地,所有的pod可以与所有其他pod通信,而不使用网络地址转换(NAT)。在一些情况下,编排器50和SDN控制器70创建由所有命名空间共享的服务虚拟网络和pod虚拟网络,从其分别分配服务和pod网络地址。在一些情况下,在Kubernetes集群中产生的所有命名空间中的所有pod可能能够彼此通信,并且所有pod的网络地址可从编排器50指定的pod子网分配。当用户为pod创建隔离的名字空间时,编排器50和SDN控制器70可以为新的隔离的命名空间创建新的pod虚拟网络和新的共享服务虚拟网络。在Kubernetes集群中产生的隔离命名空间中的pod从新的pod虚拟网络中提取网络地址,并且用于此类pod的对应服务从新的服务虚拟网络中提取网络地址
CNI 117A可以表示库、插件、模块、运行时或用于服务器12A的其他可执行代码。CNI 117A可至少部分地符合容器网络接口(CNI)规范或rkt联网提议。CNI 117A可表示Contrail、OpenContrail、Multus、Calico、cRPD或其他CNI。CNI 117A可以替代地被称为网络插件或CNI插件或CNI实例。例如,可以由Multus CNI调用单独的CNI,以便为pod 122A建立不同的虚拟网络接口。
CNI 117A由编排器50调用。为了CNI规范的目的,容器可以被认为与Linux网络命名空间同义。这对应于什么单元取决于特定的容器运行时实现:例如,在诸如rkt的应用容器规范的实现中,每个pod在唯一的网络命名空间中运行。然而,在Docker中,网络命名空间通常对于每个单独的Docker容器而存在。为了CNI规范的目的,网络是指可唯一寻址并且可以彼此通信的一组实体。这可以是单独的容器、机器/服务器(真实的或虚拟的)或一些其他网络设备(例如,路由器)。容器可以在概念上添加到一个或多个网络或从一个或多个网络移除。CNI规范指定了用于符合插件(“CNI插件”)的多个考虑。
在图1B的示例中,Pod 122A包括被容器化的DPDK工作负载,DPDK工作负载被设计为使用DPDK来加速数据包处理,诸如通过使用DPDK库与其他组件交换数据。Pod 122B被配置为利用由内核380提供的网络服务和栈。
CNI 117A可以结合图1B中所示的一个或多个其他组件为pod 122A和122B配置数据接口126和127。这些接口可以是不同类型的接口。数据接口126和数据接口127在本文可以被称为虚拟网络接口。下面描述虚拟网络接口的其他示例类型。Pod 122A和122B的任何容器可以利用,即共享它们各自的pod的任何虚拟网络接口。
Pod 122A被配置有数据接口127,数据接口127被用于高吞吐量数据包处理,更具体地说,用于利用虚拟路由器121A发送和接收数据包以用于高吞吐量应用。Pod 122A和虚拟路由器121A使用数据接口127交换数据包。数据接口127可以是DPDK接口。Pod 122A和虚拟路由器121A可以使用vhost来建立数据接口127。pod 122A可以根据聚合模型来操作。pod122A可以使用诸如具有vhost-user适配器的Virtio设备之类的虚拟设备,以用于数据接口127的用户空间容器进程间通信。这样,pod 122A的工作负载建立在DPDK上,并且使用DPDK操作数据接口127。pod 122A和虚拟路由器121A可以使用vhost来建立DPDK接口。在一些示例中,pod 122A可以作为vhost服务器来操作,其中虚拟路由器121A作为vhost客户端,以便建立DPDK接口。在一些示例中,虚拟路由器121A可以作为vhost服务器来操作,其中pod 122作为vhost客户端,以用于建立DPDK接口。
pod 122B被配置为具有用于与内核380发送和接收数据包的数据接口126。pod122B的工作负载可能不是为高吞吐量数据通信配置的,并且可能需要vrouter 121A不能提供的封装或其他网络服务。
由pod 122A和122B发送和接收的网络数据包可以采用去往NIC113A和来自NIC113A的不同路径。例如,pod 122A经由数据接口127与虚拟路由器121A交换网络数据包。虚拟路由器121A发送或接收来自NIC 113A的网络数据包。虚拟路由器121A和NIC 113A形成用于pod 122A的DPDK数据平面。
pod 122B与内核380交换网络数据包。内核380处理由pod 122B发送和接收的网络数据包,包括在必要时封装或解封装数据包。在一些方面,内核380使用数据接口125经由虚拟路由器121A发送和接收数据包。在该情况下,虚拟路由器121A相对于内核380充当“直通”,并且不执行对从内核380接收的用于经由NIC 113传输的数据包或者从NIC 113A接收的具有作为目的地的pod 122B的数据包的任何网络处理。内核380、虚拟路由器121A和NIC113A形成内核数据平面。
虚拟路由器121A和内核380被配置为如下面进一步描述的那样进行互操作,以提供混合数据平面150。混合数据平面150允许诸如pod 122A和122B的pod被配置为使用混合数据平面150的DPDK数据平面或混合数据平面150的内核数据平面。
关于pod 122B,虚拟网络接口可以表示虚拟以太网(“veth”)对,其中该对的每端是单独的设备(例如Linux/Unix设备),该对的一端被分配给Pod 122B,该对的一端被分配给内核380。veth对或veth对的端部有时被称为“端口”。虚拟网络接口可以表示具有分配给pod 122B和内核380的媒体访问控制(MAC)地址的macvlan网络,用于pod 122B的容器和内核380的网络栈之间的通信。虚拟网络接口可以替代地被称为例如虚拟机接口(VMI)、pod接口、容器网络接口、tap接口、veth接口或简单地称为网络接口(在特定上下文中)。
在图1B的示例服务器12A中,pod 122A和122B是一个或多个虚拟网络中的虚拟网络端点。编排器50可以存储或以其他方式管理用于应用部署的配置数据,该配置数据指定虚拟网络并且指定pod(或其中的一个或多个容器)是虚拟网络的虚拟网络端点。编排器50可从例如用户、操作员/管理员或其他机器系统接收配置数据。
作为创建pod 122A或122B的过程的一部分,编排器50请求SDN控制器70创建用于虚拟网络的相应虚拟网络接口(在配置数据中指示)。Pod可以具有用于其所属的每个虚拟网络的不同虚拟网络接口。例如,数据接口126和数据接口127中的每一者可以是用于特定虚拟网络的虚拟网络接口。可以为其他虚拟网络配置附加的数据接口。SDN控制器70处理该请求以生成用于pod 122A和122B的虚拟网络接口的接口配置数据。接口配置数据可以包括容器或pod唯一标识符和为每个虚拟网络接口指定用于配置虚拟网络接口的网络配置数据的列表或其他数据结构。虚拟网络接口的网络配置数据可以包括网络名称、分配的虚拟网络地址、MAC地址和/或域名服务器值。下面是JavaScript Object Notation(JSON)格式的接口配置数据的示例。
SDN控制器70向服务器12A发送接口配置数据,并且更具体地在一些情况下向虚拟路由器121A发送接口配置数据。为了配置用于pod(例如,pod 122A或pod 122B)的虚拟网络接口,编排器50可以调用CNI 117A。CNI 117A从虚拟路由器121A获得接口配置数据并处理它。CNI 117A创建接口配置数据中指定的每个虚拟网络接口。
常规CNI插件由容器平台/运行时调用,从容器平台接收添加命令以将容器添加到单个虚拟网络,并且此类插件随后可以被调用以从容器/运行时接收Del(ete)命令并且从虚拟网络移除容器。术语“调用”可以指将存储器中的软件组件或模块实例化为可执行代码以供处理电路执行。
图2是根据本公开的技术更详细地图示图1A和图1B的网络系统的一部分的示例实现的框图。系统200包括CU 213A-213K,其中的每一者可以代表图1A的CU 13中的任何一者。在该示例中,使用L3VPN和隧道231A-231K来实现多个网络切片(例如,5G网络切片),以将DU22A连接到用于相应网络切片的不同CU 213A-213K。
网络切片提供了一种对移动网络进行分段以支持特定类型的服务或业务或者甚至托管不拥有物理网络的服务提供商(多租用)的方式。此外,可以根据容量、覆盖、连接性、安全性和性能特性来优化每个切片。由于切片可以彼此隔离,就像它们在控制和用户平面中都是物理分离的,所以网络切片的用户体验将是相同的,就像它是分离的网络一样。网络切片可以跨越网络的所有域,包括在网络节点上运行的软件应用(存储器和处理两者)、内核传输网络的特定配置、接入网络配置以及终端设备。网络切片使得多个运营商能够安全地共享移动网络,但是通过将他们自己的用户与其他用户分开,并且用户的不同应用使用提供广泛不同的性能特性的不同网络切片。
云本地路由器20A包括虚拟路由器转发平面(虚拟路由器)121A,其被配置有用于以相应L3VPN实现的相应网络切片的VRF 212A-212K(统称为“VRF 212”),CNR 20A和路由器204A-204B使用将VRF 212连接到路由器204A-204B上的VRF 210A-210K的隧道231A-231K来实现该虚拟路由器转发平面。每个隧道231A-231K可表示SR-MPLSoIPv6或上述其他类型的隧道。路由器204A-204K中的每一者可以是用于具有一个或多个服务器以执行CU 213A-213K中的任何一者或多者的数据中心(例如,图1A的数据中心100)的网关路由器。数据中心可包括数据中心结构,以在路由器和CU之间交换移动数据流量。在一些情况下,数据中心的一个或多个服务器还可以执行用于移动网络的UPF,在该情况下,数据中心结构还可以在CU和UPF之间交换移动数据流量。
VRF 212A-212K中的每一者具有到DU 22A的对应虚拟网络接口。DU 22A的虚拟网络接口中的每一者因此可以被映射到CNR 20A中的不同L3VPN中,以便例如支持多个网络切片中的不同一个。如下面进一步详细描述的,当由来自编排器50的pod事件触发时,服务器12A的CNI117A(图1B)动态地添加或删除pod(本文部署有DU 22A)和虚拟路由器121A之间的虚拟网络接口,在一些示例中,其也可以被部署为容器。CNI 117A还以路由区分符和路由目标的形式,利用用于每个DU 22A/pod虚拟网络接口的主机路由和对应的层3VPN映射,来动态地更新cRPD 24A(CNR 20A的控制平面)。相应地,cRPD 24A可选地使用gRPC接口相应地对虚拟路由器121A(CNR 20A的数据平面)进行编程。这样,CNR 20A作为云本地路由器被引入数据路径中,以例如支持到例如可以在边缘或区域数据中心站点中执行的CU 213A-213K的F1接口。在各种示例中,虚拟路由器121A可以表示基于SmartNIC的虚拟路由器、基于内核的虚拟路由器或基于DPDK的虚拟路由器。
图3是图示了根据本公开的技术的示例服务器的框图。服务器300可以表示图1A和图1B的服务器12中的任何一者。在一些情况下,服务器300被配置为实现云本地路由器和分布式单元两者,以用于图1A的DU22A和图1A的云本地路由器20A的数据平面之间的移动数据流量的相同盒转发。服务器300可以是裸金属服务器或虚拟机。图6A和图6B中描述了服务器300的示例硬件架构。
内核380可以管理服务器300的操作,包括调度进程、线程或其他可执行单元以及管理服务器300的设备、文件系统和存储器。内核380可以表示Linux内核、其他Unix变体内核、或者包括网络栈并且能够进行数据包转发的其他操作系统内核。
服务器300包括一个或多个网络接口卡(NIC)321A-321B(统称为“NIC 321”),每个分别具有一个或多个硬件接口320和322。在5G无线电接入网络部署中,NIC 321A的接口320可以经由物理电缆连接到RU。接口320可实现F2接口。NIC 321B的接口322可以经由物理线缆耦合到中程网络,用于向/从CU发送/接收移动数据流量。接口322可实现F1接口。在一些示例中,服务器300可以具有单个NIC,该单个NIC具有一个或多个接口322。
服务器300可以托管pod 328A-328L(统称为“pod 328”)。在一些情况下,pod 328可以是DU。pod 328可以是图1B的pod 122A和122B的实现。pod 328A-328L是从虚拟路由器206A的角度来看的端点,并且特别地可以表示已经被编程到虚拟路由器206A中的一个或多个虚拟网络的上层端点。
在高层,基于DPDK的虚拟路由器数据或转发平面(“虚拟路由器”)206A由虚拟路由器代理314利用转发信息来编程,以实现数据包快速路径。虚拟路由器代理314可以是用户空间进程。虚拟路由器代理314可以具有用于从诸如cRPD 324之类的控制平面进程接收配置和路由信息的北向接口340。cRPD 324可以是图1A和图1B的cRPD 24A的示例。虚拟路由器代理314具有用于对虚拟路由器206A编程的南向接口341。本文对“虚拟路由器”的引用可以具体地指虚拟路由器转发平面,或者指虚拟路由器转发平面(例如,虚拟路由器206A)和相应的虚拟路由器代理(例如,虚拟路由器代理314)的组合。
cRPD 324可以具有北向接口,用于与SDN控制器70交换配置和路由信息。容器化联网接口312可以是CNI插件,其通过基于DPDK的虚拟路由器206A配置容器工作负载(在该示例中为pod 328A至328L)的接口。编排器50可以经由发送到服务器300的编排代理310的请求来编排服务器300上的基于DPDK的虚拟路由器206A、cRPD 324和/或pod 328的工作负载。在一些情况下,工作负载可以具有多个接口和多种类型的接口(例如,一些具有虚拟路由器206A,一些具有NIC 321A)。因此,CNI312可表示能够用多种类型的接口配置工作负载的CNI或统一CNI的组合。多个CNI可以由诸如Multus的主CNI控制。在编排器50是Kubernetes主机的情况下,自定义资源限定(CRD)可被实现用于编排器50以支持多租用和网络隔离。
编排器50经由编排代理310编排包括容器工作负载的pod(例如,pod328A-328L)。CNI 312配置在pod与数据平面之间的虚拟接口,其可以是基于DPDK的虚拟路由器、基于内核的虚拟路由器或基于SmartNIC的虚拟路由器。在图3所示的示例中,虚拟路由器206A是基于DPDK的虚拟路由器。在诸如图3所示的一些示例中,CNI 312将每个pod的虚拟接口配置为基于DPDK的虚拟路由器206A的vhost用户接口。在一些示例中,CNI 312将每个pod的veth对配置到虚拟路由器206A。在一些示例中,虚拟路由器206A具有到NIC 321B的绑定接口,该接口可以是支持DPDK的基于英特尔的NIC。绑定接口促进结构接口之间的数据包负载平衡。配置虚拟接口的附加描述可以在2020年7月28日发布的美国专利10,728,145中找到,该专利通过引用整体并入本文。
在Kubernetes部署中,CNI 312为应用工作负载提供联网。这包括例如设置接口、IP地址管理和访问控制列表;通告包括图1A和图1B的服务器300和服务器12中的任何一者的Kubernetes集群(例如,工作节点)内的工作负载的可达性;建立网络命名空间。
cRPD 324可以包括网络服务网格架构(NSM)、服务发现、外部端点和隧道的元件。cRPD 324可以使用诸如边界网关协议(BGP)之类的外部路由协议来通告Kubernetes集群内部和外部的pod可达性。cRPD 324可以使用内部网关和其他路由协议,诸如IS-IS、OSPF、标签分发协议(LDP)等,来参与下层联网。cRPD 324还可以使用诸如MPLS、MPLSoUDP或MPLSoGRE、VxLAN;SR-MPLS、SRv6、SRv4和/或IPSec隧道技术的协议/技术来提供对高级L3VPN上层的支持。
虚拟路由器206A向内核380暴露物理接口322的相应接口382A。也就是说,对于每个物理接口,虚拟路由器206A向内核380暴露接口。每个接口382A可以是vhost接口,并且可以在默认VRF 381A处终止。内核380因此可以经由接口382与虚拟路由器206A发送和接收网络数据包。
在一些示例中,cRPD 324运行路由协议,并且可以与服务器300外部的路由器交换路由协议消息。此外,cRPD 324可以利用内核380网络栈来获得下层网络的网络拓扑信息。cRPD 324可以使用该拓扑信息来建立与外部路由器的路由协议邻接。接口382A为cRPD 324提供经由内核380和虚拟路由器206A到物理接口322的接入,并因此到经由物理接口322可访问的下层网络的接入。作为示例,此类下层网络可以包括中程网络、用于服务器300所在的本地数据中心的交换结构等。虚拟路由器206A可以被配置有此类路由,该路由使得虚拟路由器206A将在物理接口322中的一者处接收到的并且目的地为接口382中的相应一者的IP地址的网络数据包经由接口382A中的该相应一者转发到内核380。
内核380经由接口384将网络数据包输出到cRPD 324。接口384可以表示由内核380、文件系统、线程、套接字或诸如cRPD 324之类的进程可以用来从内核380接收数据包和将数据包注入到内核380中的其它机制所暴露的系统调用接口/API。cRPD 324作为由服务器300实现的路由器的控制平面工作,而基于DPDK的虚拟路由器206A作为路由器的快速路径转发平面工作。在诸如图1A所示的5G环境中,cRPD 324作为CNR 20A的控制平面操作,而虚拟路由器206A和内核380为pod 328和/或CNR 20A(图1B)提供数据或转发平面。利用cRPD324的CNI 312因此能够使用L3VPN来促进多租户,例如以实现用于不同租户的网络切片;用于应用的ACL和网络策略;和用于高安全性的IPSec。基于DPDK的虚拟路由器206A充当数据平面或转发平面,用于以可以排除内核380的方式在pod328和物理接口322之间转发数据流量。
服务器300具有用于数据包转发的两个数据平面、由内核380实现的第一数据平面394和由虚拟路由器206A实现的第二数据平面392。第二数据平面392可以是图1的混合数据平面150的实现。基于DPDK的虚拟路由器206A被配置有物理接口322的“所有权”。在一些方面,诸如虚拟路由器206A之类的服务器300上的基于DPDK的虚拟路由器被配置有服务器300上的NIC 321的所有物理接口的所有权。物理接口322可以是用于VRF 12的VPN附接电路。物理接口322可以与虚拟路由器206A的相应接口相关联,虚拟路由器206A通过该相应接口经由物理接口322发送和接收流量。
第一数据平面394和第二数据平面392可以分别存储用于下层网络和上层网络的不同路由。第一数据平面394和第二数据平面392可以独立地执行转发查找,并使用各自不同的存储路由转发流量。cRPD 324是用于处理下层路由和上层路由的路由协议过程。在通过路由协议或从SDN控制器70获悉路由之后,cRPD 324可以选择性地将下层路由编程到内核380,并将上层路由编程到虚拟路由器206A(经由虚拟路由器代理314)。在一些方面,服务器300可以如以下所描述的那样被配置和操作,使得不同的数据平面394和392被组合成混合数据平面。
图4是图示了根据本公开的技术的具有该服务器内的示例控制和数据业务流的示例服务器的框图。服务器400可以类似于这里描述的服务器,诸如图1A、图1B和图2的服务器12,以及图3的服务器300。pod328A-328L在一些情况下可以是DU。vhost接口、vhost0接口382A由虚拟路由器206A暴露给内核380,并且在一些情况下由内核380暴露给虚拟路由器206A。vhost接口382A具有相关联的下层主机IP地址,用于“在主机处”接收流量。因此,内核380可以是包括作为网络设备的服务器400的下层网络的网络端点,该网络端点具有vhost接口382A的IP地址。应用层端点可以是cRPD 324或由内核380管理的其他进程。
下层联网是指提供网络中的节点(通常是服务器)之间的连接的物理基础设施。下层网络负责在基础设施上递送数据包。下层的网络设备使用路由协议来确定IP连接。在下层网络设备上用于路由目的的典型路由协议是OSPF、IS-IS和BGP。上层联网是指提供虚拟工作负载(通常是VM/pod)之间的连接的虚拟基础设施。该连接建立在下层网络之上,并且允许虚拟网络的构建。上层业务(即,虚拟联网)通常被封装在由下层网络路由的IP/MPLS隧道或其他隧道中。上层网络可以跨所有下层网络设备或下层网络设备的子集运行,并且经由虚拟化实现多租用。
控制流量402可以表示由cRPD 324执行的一个或多个路由协议的路由协议流量。在服务器400中,控制流量402可以通过虚拟路由器206A所拥有的物理接口322来接收。虚拟路由器206A被编程有针对vhost0接口382A主机IP地址的路由以及接收下一跳,这使得虚拟路由器206A经由vhost0接口382A向内核380发送在物理接口322处接收的并且目的地为vhost0接口382A主机IP地址的流量。从cRPD 324和内核380的角度来看,所有此类控制流量402将看起来来自vhost0接口382A。因此,cRPD324路由将vhot0接口382A指定为该路由的转发下一跳。cRPD 324选择性地将一些路由安装到虚拟路由器代理314,并将相同(或其他)路由安装到内核380,如下面进一步详细描述的。虚拟路由器代理314将接收与cRPD 324所接收的一些路由相对应的转发信息库(FIB)更新。这些路由将指向vHost0接口382A,并且虚拟路由器206A可自动将vHost0接口382A转换或映射到物理接口322。
由cRPD 324编程的路由信息可以被分类为下层和上层。cRPD 324将安装至内核380的下层路由,因为cRPD 324可能需要可达性来建立与外部路由器的附加协议邻接/会话,例如,在由IGP提供的可达性之上的BGP多跳会话。cRPD 324支持使用允许与RIB、路由实例、前缀或其他属性进行匹配的路由策略构造,来选择性地过滤对特定数据平面(例如,对内核380或虚拟路由器206A)的FIB更新。
由cRPD 324通过vhost0接口382A发送到虚拟路由器206A的控制流量402可由虚拟路由器206A针对vhost0接口382A从相应物理接口322发送出。
如图4所示,CNI 312可在由编排器50经由编排代理310通知时为应用程序pod328A-328L中的每一者创建虚拟网络(本文为“pod”)接口。pod接口的一端终止于包括在pod中的容器。CNI 312可以请求虚拟路由器206A开始监视pod接口的另一端,并且cRPD 324促进来自物理接口322的、目的地为基于DPDK的pod 328A-322L中的应用容器的流量排他地使用DPDK被转发,而不涉及内核380。相反的过程适用于由pod328A-328L发起的业务。
然而,因为基于DPDK的虚拟路由器206A管理pod 328A-328L的这些虚拟网络接口,所以虚拟网络接口不为内核380所知。服务器400可以使用专用于DPDK转发路径的隧道来在基于DPDK的pod 328A-328L、虚拟路由器206A以及NIC 321B之间内部地发送和接收上层数据流量404。
这样,在服务器400中,cRPD 324与两个数据平面相接:内核380和基于DPDK的虚拟路由器206A。cRPD 324利用内核380网络堆栈来建立专用于DPDK快速路径的路由。cRPD 324接收包括下层路由信息和上层路由信息的路由信息。cRPD 324在内核380中可见的vHost接口382A上运行路由协议,并且cRPD 324可以在内核380FIB中安装与学习了IGP的路由(下层路由信息)相对应的FIB更新。这可以使得能够建立到在此类IGP学习的路由中指示的那些目的地的多跳iBGP会话。再次,cRPD 324路由协议邻接关系涉及内核380(和vHost接口382A),因为内核380执行网络栈。
虚拟路由器206A的虚拟路由器代理314向cRPD 324A通知关于pod328A-328L的应用pod接口。这些pod接口由CNI 312创建,并由虚拟路由器代理314排他地管理(即,不涉及内核380)。这些pod接口对于内核380是未知的。cRPD 324可以将到这些pod接口的可达性通告给网络的其余部分,作为包括网络层可达性信息(NLRI)的L3VPN路由。在5G移动网络上下文中,此类L3VPN路由可以被存储在用于不同网络切片的虚拟路由器206A的VRF中。对应的MPLS路由可以由cRPD 324经由与虚拟路由器代理314的接口340仅被编程到虚拟路由器206A,而不被编程到内核380。这是因为这些MPLS标签的下一跳是到用于pod 328A-328L中的一者的pod接口的弹出和转发;这些接口仅在虚拟路由器206A中可见,而在内核380中不可见。类似地,在BGP L3VPN上接收的可达性信息可以由cRPD 324选择性地编程到虚拟路由器206A,因为此类路由仅仅被需要用于转发由pod 328A-328L生成的流量。编程到虚拟路由器206A的上述路由构成了用于上层网络的上层路由。
图5是描绘根据本公开的示例性方面的在虚拟路由器中对导致路由规划的端口添加的操作序列的概念图。操作序列是相对于服务器400的组件来描述的,但是可以由本公开中描述的任何服务器的组件来执行,例如图1A、图1B和图2的服务器12或图4的服务器400。CNI 312具有为pod保留的IP地址块。虚拟路由器代理314监听例如关于节约服务的端口添加和端口删除消息,其中“端口”对应于虚拟网络接口。CNI 312向虚拟路由器代理314发送端口-添加消息(502)。端口添加消息包括端口的虚拟网络的标识符和CNI 312为pod分配的IP地址。(CNI 312可以单独配置具有虚拟网络接口的另一端的pod)虚拟路由器代理314在接口540中创建虚拟网络接口(这里称为虚拟机接口或VMI,其是虚拟网络接口的示例)(504)。虚拟路由器代理314利用VMI添加消息、利用默认VRF标识符来配置虚拟路由器206A中的虚拟网络接口(506)。虚拟路由器代理314利用VMI订阅消息订阅cRPD 324而不是SDN控制器,该VMI订阅消息包括在端口添加消息中接收到的虚拟网络名称和IP地址(508)。cRPD324将VMI Config消息发送到虚拟路由器代理314,该VMI Config消息具有用于虚拟网络接口的虚拟网络的正确VRF标识符(512),如果需要,则可选地利用VRF添加消息将VRF添加到虚拟路由器代理314(510)。虚拟路由器代理314向虚拟路由器206A发送具有正确VRF标识符的VMI更新消息,以使虚拟路由器206A将虚拟网络接口附接到正确VRF(514)。cRPD 324分配服务标签,并使用到虚拟路由器代理314的路由添加消息来添加路由和下一跳(例如,BGP IP-VPN的MPLS路由)(516)。cRPD 324还将用于到达pod的路由通告给其对等路由器(518),对等路由器可以包括其他cRPD、下层网络中的路由器或其他路由器。虚拟路由器代理314利用在来自cRPD 324的路由添加消息中接收到的路由的转发信息来配置虚拟路由器206A(520)。
图6A是根据本公开中描述的技术的示例计算设备(例如,主机)的框图。图6A的计算设备600可以表示真实或虚拟服务器,并且可以表示图1A和图1B的服务器12、图3的服务器300或图4的服务器400中的任一者的示例性实例。在该示例中,计算设备600包括耦合计算设备600硬件环境的硬件组件的总线642。总线642将网络接口卡(NIC)630、存储盘646和一个或多个微处理器610(在下文中,“微处理器610”)耦合。NIC 630可以具有SR-IOV能力。在一些情况下,前端总线可以耦合微处理器610和存储器设备644。在一些示例中,总线642可以耦合存储器设备644、微处理器610和NIC 630。总线642可以表示外围部件接口(PCI)快捷(PCIe)总线。在一些示例中,直接存储器访问(DMA)控制器可以控制耦合到总线642的组件之间的DMA传输。在一些示例中,耦合到总线642的组件控制耦合到总线642的组件之间的DMA传输。
微处理器610可包括一个或多个处理器,每个处理器包括独立的执行单元以执行符合指令集架构的指令,指令被存储到存储介质。执行单元可以被实现为单独的集成电路(IC),或者可以被组合在一个或多个多核处理器(或“众核”处理器)内,其中每个多核处理器使用单个IC(即,芯片多处理器)来实现。
盘646表示计算机可读存储介质,其包括以用于存储诸如处理器可读指令、数据结构、程序模块或其他数据的信息的任何方法或技术实现的易失性和/或非易失性、可移动和/或不可移动介质。计算机可读存储介质包括但不限于随机存取存储器(RAM)、只读存储器(ROM)、EEPROM、闪存、CD-ROM、数字多功能盘(DVD)或其他光学存储装置、磁带pod、磁带、磁盘存储装置或其他磁性存储设备、或者可用于存储期望信息并且可由微处理器610访问的任何其他介质。
存储器644包括一个或多个计算机可读存储介质,其可以包括随机存取存储器(RAM),诸如各种形式的动态RAM(DRAM),诸如DDR2/DDR3SDRAM,或者静态RAM(SRAM)、闪存,或者可以用于携带或存储指令或数据结构形式的期望的程序代码和程序数据并且可以由计算机访问的任何其他形式的固定或可移动存储介质。主存储器644提供由可寻址存储器位置组成的物理地址空间。
网络接口卡(NIC)630包括被配置为使用下层物理网络的链路来交换数据包的一个或多个接口632。接口632可以包括具有一个或多个网络端口的端口接口卡。NIC 630还可包括卡上存储器,以例如存储数据包数据。NIC 630和耦合到总线642的其他设备之间的直接存储器访问传输可以从NIC存储器读取/向NIC存储器写入。
存储器设备644、NIC 630、存储盘646和微处理器610可以为软件栈提供操作环境,该软件栈包括在内核空间中执行的操作系统内核380。内核380可以表示例如可从微软公司获得的Linux、Berkeley软件分布(BSD)、另一Unix变体内核或Windows服务器操作系统内核。在一些实例中,操作系统可以执行管理程序和由管理程序管理的一个或多个虚拟机。示例管理程序包括用于Linux内核的基于内核的虚拟机(KVM)、Xen、可从VMware获得的ESXi、可从Microsoft获得的Windows Hyper-V和其他开放源和专有管理程序。术语管理程序可以包括虚拟机管理器(VMM)。包括内核380的操作系统为用户空间645中的一个或多个进程提供执行环境。
内核380包括物理驱动器625以使用网络接口卡630。网络接口卡630还可实现SR-IOV以允许在诸如容器629A-629B或一个或多个虚拟机(图6A中未示出)等一个或多个虚拟执行元件之间共享物理网络功能(I/O)。诸如虚拟功能的共享虚拟设备可提供专用资源,以使得每个虚拟执行元件可访问NIC 630的专用资源,因此该专用资源对于每个虚拟执行元件表现为专用NIC。虚拟功能可以表示与物理驱动器625所使用的物理功能以及与其他虚拟功能共享物理资源的轻量PCIe功能。对于支持SR-IOV的NIC630,NIC 630可以具有根据SR-IOV标准的数千个可用的虚拟功能,但是对于I/O密集型应用,所配置的虚拟功能的数量通常小得多。
计算设备600可以耦合到物理网络交换结构,该物理网络交换结构包括将交换结构从物理交换机扩展到耦合到交换结构的物理服务器的软件或“虚拟”路由器的上层网络,该上层网络包括虚拟路由器206A和206B(统称为“虚拟路由器206”)。虚拟路由器可以是由物理服务器执行的进程或线程或其组件,所述物理服务器例如图1A和图1B的服务器12、图3的服务器300和/或图4的服务器400,其动态地创建和管理可用于在虚拟网络端点之间通信的一个或多个虚拟网络。在一个示例中,虚拟路由器使用上层网络来实现每个虚拟网络,该上层网络提供将端点的虚拟地址从该端点正在其上执行的服务器的物理地址(例如,IP地址)解耦的能力。每个虚拟网络可以使用其自己的寻址和安全方案,并且可以被视为与物理网络及其寻址方案正交。可以使用各种技术来通过物理网络在虚拟网络内和跨虚拟网络传输数据包。本文使用的术语“虚拟路由器”可以包括开放式vSwitch(OVS)、OVS桥接件、Linux桥接件、Docker桥接件或位于主机设备上并且在一个或多个虚拟网络的虚拟网络端点之间执行交换、桥接或路由数据包的其他设备和/或软件,其中虚拟网络端点由一个或多个服务器12托管。在图6A的示例计算设备600中,虚拟路由器206A在用户空间内作为基于DPDK的虚拟路由器执行,并且虚拟路由器206B在内核380空间内执行。在一些方面,在各种实现中,虚拟路由器可以在管理程序、主机操作系统、主机应用或虚拟机内执行。
虚拟路由器206可以替换和包含Linux桥接件/OVS模块的虚拟路由/桥接功能,Linux桥接件/OVS模块通常用于包括pod 602A-602N(统称为“pod 602”)的pod的Kubernetes部署。在图6A所示的示例中,pod 602A包括一个或多个应用容器629A,并且pod602B包括一个或多个应用容器629B。pod 602N包括cRPD 324的实例。
虚拟路由器206可以为虚拟网络执行桥接(例如,E-VPN)和路由(例如,L3VPN、IP-VPN)。虚拟路由器206可以执行联网服务,诸如应用安全策略、NAT、多播、镜像和负载平衡。
在图6A所示的示例中,虚拟路由器206A作为DPDK过程执行为用户空间656。虚拟路由器代理314也可在用户空间中执行。在图2的示例计算设备600中,虚拟路由器206A在用户空间内作为基于DPDK的虚拟路由器执行,但是在各种实现中,虚拟路由器206A可以在管理程序、主机操作系统、主机应用或虚拟机内执行。虚拟路由器代理314具有使用信道到SDN控制器70的连接,该连接用于下载配置和转发信息。虚拟路由器代理314将该转发状态编程到由虚拟路由器206A和虚拟路由器206B表示的虚拟路由器数据(或“转发”)平面。虚拟路由器206A和虚拟路由器代理314可以是进程。
虚拟路由器206可以是多线程的,并且在一个或多个处理器核上执行。虚拟路由器206可以包括多个队列。虚拟路由器206可以实现数据包处理流水线。相应的虚拟路由器代理314可以根据要应用于数据包的操作,以从最简单到最复杂的方式来缝合流水线。虚拟路由器206可以维护多个转发基础实例。虚拟路由器206可以使用RCU(读复制更新)锁来访问和更新表(例如,表627)。
为了向其他计算节点或交换机发送数据包,虚拟路由器206A使用一个或多个物理接口632。通常,虚拟路由器206与诸如VM或pod 602之类的工作负载交换上层数据包。虚拟路由器206可以具有多个虚拟网络接口(例如,vifs)。这些接口可以包括用于与主机操作系统交换数据包的内核接口vhost0;与相应的虚拟路由器代理314的接口、pkt0以从网络控制器获得转发状态并发送异常数据包。可以存在与一个或多个物理网络接口632相对应的一个或多个虚拟网络接口。
虚拟路由器206的其他虚拟网络接口可以用于与工作负载交换数据包。此类虚拟网络接口可以是上述类型的虚拟接口中的任何一种。在一些情况下,虚拟网络接口612可以是tap接口。
虚拟路由器206B是基于内核的虚拟路由器。在该情况下,虚拟路由器206B被安装为操作系统内的内核模块。虚拟路由器206B向TCP/IP栈注册其自身,以从其想要的任何期望的操作系统接口接收数据包。接口可以是绑定(bond)、物理、tap(用于VM)、veth(用于容器)等。在图6A所示的示例中,虚拟路由器206B具有与虚拟路由器206B的vRF 622B的veth接口。在该模式中,虚拟路由器206B依赖于操作系统来发送和接收来自不同接口的数据包。例如,操作系统可以展示由vhost-net驱动程序支持的tap接口以与VM通信。一旦虚拟路由器206B注册了来自该tap接口的数据包,TCP/IP栈就向其发送所有数据包。虚拟路由器206B经由操作系统接口发送数据包。此外,NIC队列(物理的或虚拟的)由操作系统处理。数据包处理可以在中断模式下操作,这生成中断并且可能导致频繁的上下文切换。当存在高数据包速率时,伴随频繁中断和上下文切换的开销可能淹没操作系统并导致差的性能。
在如图6A所示的虚拟路由器206A的基于DPDK的部署中,虚拟路由器206A被安装为链接到DPDK库的用户空间645应用。这可以导致比基于内核的部署更快的性能,特别是在存在高数据包速率的情况下。物理接口632由DPDK的轮询模式驱动程序(PMD)而不是内核的基于中断的驱动程序使用。物理接口632的寄存器可被暴露到用户空间645中以便PMD可访问;以此类方式绑定的物理接口632不再由主机操作系统管理或对主机操作系统可见,并且基于DPDK的虚拟路由器206A管理物理接口632。这包括数据包轮询、数据包处理和数据包转发。换句话说,用户数据包处理步骤由虚拟路由器206A的DPDK数据平面执行。该“轮询模式”的性质使得虚拟路由器206A的DPDK数据平面数据包处理/转发与数据包速率高时的中断模式相比高效得多。与内核模式虚拟路由器206A相比,在数据包I/O期间存在相对较少的中断和上下文切换,并且在某些情况下可以完全避免在数据包I/O期间的中断和上下文切换。
通常,每个pod 602可以被分配一个或多个虚拟网络地址以在相应的虚拟网络内使用,其中每个虚拟网络可以与由虚拟路由器206提供的不同虚拟子网相关联。pod 602B可以被分配其自己的虚拟第三层(L3)IP地址,例如用于发送和接收通信,但是可能不知道pod602B在其上执行的计算设备600的IP地址。因此虚拟网络地址可以不同于下层的物理计算机系统(例如,计算设备600)的逻辑地址。
虚拟路由器代理314控制计算设备600的虚拟网络的上层,并且编排计算设备600内的数据包的路由。通常,虚拟路由器代理314A和314B与虚拟化基础设施的SDN控制器70(图1A、图1B和图2)通信,该SDN控制器生成命令以创建虚拟网络并配置网络虚拟化端点,诸如计算设备600,并且更具体地,对应的虚拟路由器206A和206B,以及虚拟网络接口612A和612B。通过基于从SDN控制器70接收到的信息来配置虚拟路由器206A,虚拟路由器代理314可以支持配置网络隔离、基于策略的安全、网关、源网络地址转换(SNAT)、负载均衡器以及用于编排的服务链能力。
在一个示例中,由虚拟网络域内的容器629A生成或消耗的网络数据包,诸如第三层(L3)IP数据包或第二层(L2)以太网数据包,可以被封装在由物理网络传送的另一个数据包(例如另一个IP或以太网数据包)中。在虚拟网络中传输的数据包在本文可以被称为“内部数据包”,而物理网络数据包在本文可以被称为“出站数据包”或“隧道数据包”。虚拟网络数据包在物理网络数据包内的封装和/或解封装可以由虚拟路由器206A执行。该功能在本文被称为隧道传送,并且可以用于创建一个或多个上层网络。除了IPinIP,可以使用的其他示例隧道传送协议包括通用路由封装(GRE)上的IP、VxLAN、GRE上的多协议标签交换(MPLS)、用户数据报协议(UDP)上的MPLS等。虚拟路由器206A对源于/去往pod 602的任何容器的数据包执行隧道封装/解封装,并且虚拟路由器206A经由总线642和/或NIC 630的桥接件与pod 602交换数据包。
如上所述,SDN控制器70可以提供逻辑集中控制器,以便于一个或多个虚拟网络的操作。SDN控制器70可以例如维护路由信息库,诸如存储物理网络以及一个或多个上层网络的路由信息的一个或多个路由表。虚拟路由器206实现用于相应虚拟网络的一个或多个虚拟路由和转发实例(VRF)622A-622B,其中相应的虚拟路由器206作为相应的隧道技术端点来操作。通常,每个VRF 622存储用于相应虚拟网络的转发信息,并且识别数据包将被转发到何处以及数据包是否将被封装在隧道技术协议中,诸如利用可以包括用于虚拟网络协议栈的不同层的一个或多个报头的隧道技术报头。VRF 622中的每一者可以包括存储虚拟网络的路由和转发信息的网络转发表。
NIC 630可以接收隧道数据包并将隧道数据包转发到适当的虚拟路由器。作为示例,虚拟路由器206A处理隧道数据包以根据隧道封装报头确定内部数据包的源端点和目的地端点的虚拟网络。虚拟路由器206A可以剥离第2层报头和隧道封装报头,以在内部仅转发内部数据包。隧道封装报头可以包括虚拟网络标识符,诸如VxLAN标签或MPLS标签,其指示虚拟网络,例如与VRF 622A相对应的虚拟网络。VRF 622A可包括用于内部数据包的转发信息。例如,VRF 622A可将内部数据包的目的地层3地址映射到虚拟网络接口212。VRF 622A作为响应经由虚拟网络接口212将内部数据包转发到pod 602A。
Pod 602A包括一个或多个应用容器629A,而pod 602B包括一个或多个应用容器629B。诸如容器629A或629B之类的容器也可以作为源虚拟网络端点的源内部数据包。容器629A例如可生成以由另一计算设备(即,非计算设备600)执行的目的地虚拟网络端点或容器中的另一者为目的地的层3内部数据包。容器629A可以经由附接到VRF 622A的虚拟网络接口212向虚拟路由器206A发送层3内部数据包。
虚拟路由器206A接收内部数据包和层2报头,并且确定用于内部数据包的虚拟网络。虚拟路由器206A可以使用上述虚拟网络接口实现技术(例如,macvlan、veth等)中的任何一者来确定虚拟网络。虚拟路由器206A使用与用于内部数据包的虚拟网络相对应的VRF622A来生成用于内部数据包的外部报头,该外部报头包括用于上层隧道的外部IP报头和标识虚拟网络的隧道封装报头。虚拟路由器206A将内部数据包与外部报头封装在一起。虚拟路由器206A可以利用新的层2报头来封装隧道数据包,该报头具有与计算设备600外部的设备(例如,TOR交换机116(图1B)或服务器12中的一者)相关联的目的地层2地址。如果在计算设备600外部,则虚拟路由器206A将具有新的层2报头的隧道数据包输出到NIC 630。NIC630在出站接口上输出数据包。如果目的地是在计算设备600上执行的另一虚拟网络端点,则虚拟路由器206A将数据包路由到虚拟网络接口212(图2)中的适当的一者。
在一些示例中,图1A、图1B和图2的计算设备600的控制器(例如,SDN控制器70)在每个pod 602中配置默认路由以使得pod使用虚拟路由器(例如,虚拟路由器206A和206B)作为用于出站数据包的初始下一跳。
容器平台604包括容器引擎608、编排代理310、服务代理611和CNI312。容器引擎608包括可由微处理器610执行的代码。容器引擎608可以是一个或多个计算机进程。容器引擎608运行容器629A-629B形式的容器化应用。容器引擎608可以表示Dockert、rkt或用于管理容器的其他容器引擎。通常,容器引擎608接收请求并管理诸如图像、容器、网络和卷之类的对象。图像是具有用于创建容器的指令的模板。容器是图像的可执行实例。基于来自编排代理310的指示,容器引擎608可获得图像并将它们例示为pod 602A-602B中的可执行容器。
服务代理611包括可由微处理器610执行的代码。服务代理611可以是一个或多个计算机进程。服务代理611监视服务和端点对象的添加和移除,并且它维护计算设备600的网络配置以确保pod和容器之间的通信,诸如使用服务。服务代理611还可以管理iptable以捕获到服务的虚拟IP地址和端口的业务,并且将业务重定向到代理备份pod的代理端口。服务代理611可以表示Kubernetes集群的工作节点的Kube代理。在一些示例中,容器平台604不包括服务代理611,或者服务代理611被禁用以支持CNI 312对虚拟路由器206A和pod 602的配置。
编排代理310包括可由微处理器610执行的代码。编排代理310可以是一个或多个计算机进程。编排代理310可以表示Kubernetes集群的工作节点的Kubelet。编排代理310是编排器的代理,例如图1A、图1B和图2的编排器50,其接收容器的容器规范数据并确保容器由计算设备600执行。容器规范数据可以是从编排器50发送到编排代理310的清单文件的形式,或者是经由命令行接口、HTTP端点或HTTP服务器间接接收的清单文件的形式。容器规范数据可以是容器629的pod 602中的一者的pod规范(例如,podSpec-描述pod的YAML(又一标记语言)或JSON对象)。基于容器规范数据,编排代理310指导容器引擎608获得并实例化容器629的容器图像,以便由计算设备600执行容器629。
编排代理310实例化或以其他方式调用CNI 312来为每个pod 602配置一个或多个虚拟网络接口。例如,编排代理310接收用于pod 602A的容器规范数据,并且指导容器引擎608基于用于pod 602A的容器规范数据创建具有容器629A的pod 602A。编排代理310还可以接收用于pod602B的容器规范数据,并且指导容器引擎608基于用于pod 602B的容器规范数据创建具有容器629B的pod 602B。编排代理310还调用CNI 312来为pod 602A配置用于与VRF 622A相对应的虚拟网络接口612A,并且为pod 602B配置用于与VRF 622B相对应的虚拟网络接口612B。在该示例中,pod 602A是用于与VRF 622A相对应的虚拟网络端点,并且pod602B是用于与VRF 622B相对应的虚拟网络端点。
CNI 312可以获得用于配置pod 602的虚拟网络接口的接口配置数据。虚拟路由器代理314A和314B作为虚拟网络控制平面模块操作,用于使得SDN控制器70能够分别配置虚拟路由器206A和206B。与管理虚拟执行元件的提供、调度和管理的编排控制平面(包括用于工作节点的容器平台604和主节点,诸如编排器50)不同,虚拟网络控制平面(包括用于工作节点的SDN控制器70和虚拟路由器代理314)管理部分地由工作节点的虚拟路由器在数据平面中实现的虚拟网络的配置。虚拟路由器代理314向CNI 312传送用于虚拟网络接口的接口配置数据,以使得编排控制平面元件(即,CNI 312)能够根据SDN控制器70确定的配置状态来配置虚拟网络接口,从而桥接编排控制平面与虚拟网络控制平面之间的间隙。另外,这可以使得CNI 312能够获得pod的多个虚拟网络接口的接口配置数据,并且配置多个虚拟网络接口,这可以减少调用单独的CNI 312来配置每个虚拟网络接口所固有的通信和资源开销。
图6B是图6A的示例计算设备作为虚拟化计算基础设施的群集的编排器主节点的示例来操作的框图。在该示例中,计算设备600可以表示一个或多个真实或虚拟服务器。因此,在一些实例中,计算设备600可以实现用于相应集群的一个或多个主节点。在图6B所示的示例中,计算设备包括调度器652、API服务器650、网络控制器管理器656、网络控制器654、网络控制器管理器655和配置存储658。
调度器652、API服务器650、网络控制器管理器656、网络控制器654、网络控制器管理器655和配置存储658虽然被图示和描述为由单个计算设备600执行,但是可以分布在构成计算系统或硬件/服务器集群的多个计算设备600之间。换言之,多个计算设备600中的每一者可以为调度器652、API服务器650、网络控制器管理器656、网络控制器654、网络控制器管理器655或配置存储658中的任何一者或多者的一个或多个实例提供硬件操作环境。网络控制器654可以表示图1A、图1B和图2的SDN控制器70的示例性实例。调度器652、API服务器650、控制器管理器656和网络控制器管理器655可以实现编排器50的示例性实例。网络控制器管理器655可表示Kubernetes云控制器管理器或Kube管理器的示例实现。网络控制器654可以表示SDN控制器70的示例性实例。
API服务器650、调度器652、控制器管理器656和配置存储可以实现集群的主节点,并且可替代地被称为“主部件”。该集群可以是Kubernetes集群,并且主节点可以是Kubernetes主节点,在该情况下,主部件是Kubernetes主部件。
API服务器650包括可由微处理器610执行的代码。API服务器650可以是一个或多个计算机进程。API服务器650确认并配置对象的数据,诸如虚拟执行元件(例如,容器的pod)、服务和复制控制器。服务可以是定义逻辑pod集合和用于访问pod的策略的抽象。基于服务定义来选择实现服务的pod集合。服务可以部分地实现为负载平衡器,或者以其他方式包括负载平衡器。API服务器650可以实现表述性状态传输(REST)接口以处理REST操作,并将前端提供给存储到配置存储658中的相应群集的共享状态。API服务器650可以认证和授权请求。API服务器650与其他组件通信以实例化计算基础设施8中的虚拟执行元件。API服务器650可以表示Kubernetes API服务器。
配置存储658是所有群集数据的备份存储。集群数据可以包括集群状态和配置数据。配置数据还可以提供用于服务发现的后端和/或提供锁定服务。配置存储658可以实现为键值存储。配置存储658可以是中央数据库或者分布式数据库。配置存储658可以代表一个etcd存储器。配置存储658可以表示Kubernetes配置存储。
调度器652包括可由微处理器610执行的代码。调度器652可以是一个或多个计算机进程。调度器652监视新创建或请求的虚拟执行元件(例如容器的pod)并且选择虚拟执行元件将在其上运行的工作节点。调度器652可以基于资源要求、硬件约束、软件约束、策略约束、位置等来选择工作节点。调度器652可以表示Kubernetes调度器。
通常,API服务器650可以调用调度器652来调度虚拟执行元件,该虚拟执行元件可以选择工作节点并且向API服务器650返回用于选择的工作节点的标识符,该API服务器可以将该标识符写入与虚拟执行元件相关联的配置存储658。API服务器650可以调用用于选择的工作节点的编排代理310(图6A),这可以使得用于选择的工作节点的容器引擎608(图6A)从存储服务器获得虚拟执行元件并且在工作节点上创建虚拟执行元件。用于选择的工作节点的编排代理310可以向API服务器650更新虚拟执行元件的状态,其将该新的状态持续到配置存储658。这样,计算设备600实例化计算基础设施100、108(图1A和图1B)中的新虚拟执行元件。
控制器管理器656包括可由微处理器610执行的代码。控制器管理器656可以是一个或多个计算机进程。控制器管理器656可以嵌入核心控制回路,通过从API服务器650获得通知来监视集群的共享状态。控制器管理器656可以尝试将集群的状态移向期望状态。由控制器管理器656管理的示例控制器(未示出)可以包括复制控制器、端点控制器、命名空间控制器和服务账户控制器。控制器管理器656可以执行生命周期功能,诸如命名空间创建和生命周期、事件垃圾收集、终止pod垃圾收集、级联删除垃圾收集、节点垃圾收集等。控制器管理器656可以表示用于Kubernetes集群的Kubernetes控制器管理器。
网络控制器654包括可由微处理器610执行的代码。网络控制器654可以包括一个或多个计算机进程。网络控制器654可以表示图1A、图1B的SDN控制器70的示例性实例。网络控制器654可以是逻辑上集中但物理上分布的SDN控制器,其负责提供虚拟化网络的管理、控制和分析功能。具体地,网络控制器654可以是计算基础设施100、108的逻辑上集中的控制平面和管理平面,并且编排用于一个或多个工作节点的虚拟路由器。
网络控制器654可以为在网络基础设施上操作的计算架构提供云联网。云联网可以包括用于企业或服务提供商的私有云、基础设施即服务(IaaS)和用于云服务提供商(CSP)的虚拟私有云(VPC)。私有云、VPC和IaaS用例可以涉及多租户虚拟化数据中心,诸如关于图1A所描述的。在此类情况下,数据中心中的多个租户共享相同的物理资源(物理服务器、物理存储、物理网络)。每个租户被分配其自己的逻辑资源(虚拟机、容器或其他形式的虚拟执行元件;虚拟存储;虚拟网络)。除非安全策略特别允许,否则这些逻辑资源彼此隔离。数据中心中的虚拟网络也可以互连到物理IP VPN或L2 VPN。
网络控制器654可以向网络提供网络功能虚拟化(NFV),该网络诸如是商业边缘网络、宽带订户管理边缘网络和移动边缘网络。NFV涉及在虚拟机、容器或其他虚拟执行元件中而不是在物理硬件设备上安排和管理联网功能,诸如防火墙、入侵检测或预防系统(IDS/IPS)、深度数据包检查(DPI)、高速缓存、广域网(WAN)优化等。在这个市场中,网络服务的虚拟化的主要驱动是上市时间和成本优化。
网络控制器654对网络基础设施元件进行编程以创建虚拟网络,并且可以创建用于虚拟网络的虚拟网络接口的接口配置。
关于示例性网络控制器的附加信息可见于国际申请号PCT/US2013/044378和美国专利申请号14/226,509,其通过引用并入本文作为参考。
网络控制器管理器655包括可由微处理器610执行的代码。网络控制器管理器655可以是一个或多个计算机进程。网络控制器管理器655作为面向编排的元件(例如,调度器652、API服务器650、控制器管理器656和配置存储658)和网络控制器654之间的接口来操作。通常,网络控制器管理器655监视集群中的新对象(例如,pod和服务)。网络控制器管理器655可以隔离虚拟网络中的pod,并且将pod与服务连接。
网络控制器管理器655可以作为集群的主节点的容器来执行。在一些情况下,使用网络控制器管理器655使得能够禁用工作节点的服务代理(例如,Kubernetes Kube代理),使得使用虚拟路由器来实现所有pod连接性,如本文所述。
网络控制器管理器655可使用编排平台的控制器框架来监听(或以其他方式监视)API中定义的对象中的改变,并将注释添加到这些对象中的一些。注释可以是指定对象的属性的标签或其他标识符(例如,“虚拟网络绿色”)。网络控制器管理器655可以使用到网络控制器654的接口来创建用于应用的网络解决方案,以定义诸如虚拟网络、虚拟网络接口和接入控制策略的网络对象。网络控制器654可以通过例如配置虚拟路由器中的一个或多个虚拟网络和虚拟网络接口来实现计算基础设施中的网络解决方案。
图7是根据本公开中描述的技术的包括混合数据平面的示例计算设备(例如,服务器)的框图。在图7所示的示例中,服务器700包括网络接口721A-721N(统称为“网络接口721”)、内核380、DPDK虚拟路由器206A、CNI 312和cRPD 324。服务器700可以是图1A、图1B、图2、图3、图4、图6A和图6B的服务器12、300、400和600中的任何一者的实现。另外,在该示例中,服务器700托管pod 722A-722D(统称为“pod 722”)。内核380、DPDK虚拟路由器206A、CNI312和cRPD 324可以被组合在云本地路由器702的实现中。
云本地路由器702包括混合数据平面734,其合并内核数据平面732和DPDK数据平面730。混合数据平面734可以是图1B的混合数据平面150的实现。内核数据平面732由内核380和网络堆栈712实现。在一些方面,内核380可以包括作为内核数据平面732的一部分的虚拟路由器模块(图7中未示出)。DPDK数据平面730由虚拟路由器206A实现。
NIC 721可以是NIC 321(图3和图4)和/或NIC 630(图6A和图6B)的实现。在一些方面,NIC 721中的每一者被指派给DPDK数据平面734,并且没有NIC 721被指派给内核数据平面732。
在一些方面,服务器700上的K8s节点被建模为PE路由器,并且每个pod被建模为CE路由器。cRPD 324可以被配置为在“主机模式”下运行。pod 722可以经由内核数据平面732和DPDK数据平面734中的一者或两者被链接到混合数据平面734。在图7所示的示例中,pod722A和722B经由CRPD 324的VRF 707A链接到内核数据平面732。pod 722D链接到DPDK数据平面734的虚拟路由器206A。pod722可以被建模为多宿主CE,即,pod可以连接到多个VRF。此外,VRF可以在混合数据平面734的不同数据平面中。在图7所示的示例中,pod 722C是多宿主的,并且经由VRF 707A链接到内核数据平面732,并且经由VRF707B链接到DPDK数据平面734的虚拟路由器206A。
响应于编排器50(图1A和图1B)创建pod 722,cRPD 324动态地创建一个或多个虚拟化网络接口。例如,当编排器50创建被配置为使用内核数据平面732的pod时,cRPD 324可以创建将pod通信地耦合到cRPD324的VRF的veth对。cRPD 324终止veth链路在pod处的一端,另一端在cRPD 324上的VRF内部终止。在图7所示的示例中,当编排器50创建pod 722A-722C时,cRPD 324在相应的pod和VRF 707A之间创建veth对。因为cRPD 324可以访问内核380接口和网络堆栈712,所以可以在pod 722A-722C和cRPD 324之间使用各种路由协议。此类协议的示例包括E-BGP、IS-IS和OSPF。另外,cRPD 324可以利用内核380和网络堆栈712来应用各种类型的网络上层。此类上层的示例包括使用不同的下层/隧道的L3VPN、E-VPN(类型2/类型5):MPLS、SR-MPLS、SRv6、UDP/IPIP/GRE隧道上的MPLS等。另外,cRPD 324可以利用内核380和网络堆栈712来提供对诸如IPsec、SRv6、IP-IP等协议的支持。此外,内核数据平面732的元素提供对利用内核380的本机联网API(例如,BSD套接字)的应用和工作负载的支持。
响应于编排器50创建被配置为使用DPDK数据平面的pod,cRPD 324可创建将pod通信地耦合到DPDK数据平面730的基于DPDK的虚拟路由器的VRF的vHost接口。在图7所示的示例中,当编排器50创建pod722C和722D时,cRPD 324创建相应pod和基于DPDK的虚拟路由器206A的VRF 707B之间的vhost接口。
在一些方面,cRPD 324为内核数据平面732中的接口创建VRF/路由实例,其与cRPD324为DPDK数据平面730中的接口创建的VRF/路由实例是分开的。例如,在图7所示的示例中,cRPD 324在DPDK数据平面730中为内核数据平面732创建VRF 707A,并且为虚拟路由器707B创建VRF 707B。
另外,cRPD 324可以为已被分配给虚拟路由器206A的每个网络接口端口创建vhost接口。作为示例,分配给虚拟路由器206A的NIC 721N具有两个端口:port0和port1。cRPD 324创建两个vhost接口(vhost0和vhost1),它们分别对应于port0和port1。
源自于一个pod 722的网络数据包可以被称为“出站数据包”。被传输到VRF 707A的出站数据包(例如,来自pod 722A、722B和pod 722C的veth接口的出站数据包)被导向内核接口(例如,cRPD 324的veth接口)。在该情况下,路由查找和封装可以在内核380和/或网络堆栈712中执行。内核380和网络堆栈712为出站数据包创建完全形成的L2数据包,该数据包然后经由vhost接口被移交到DPDK数据平面730。虚拟路由器206A的数据包处理器710经由NIC 721(图7的示例中的NIC 721N)发送数据包。在一些方面,除了经由NIC 721发送出站数据包之外,数据包处理器710不执行对从网络堆栈712和/或内核380接收的数据包的任何网络处理,并且因此充当”直通“实体。
在图7所示的示例中,从被配置为使用DPDK的pod发送的出站数据包被直接提供给VRF 707B。在该示例中,pod 722C和722D中的每一者被配置为使用DPDK。在该情况下,虚拟路由器206A对出站数据包执行标准DPDK处理,并且创建数据包以经由NIC 721(图7的示例中的NIC721N)进行传输。
由网络接口721中的一者接收的源自服务器700外部的网络源的网络数据包可被称为“入站数据包”。因为服务器700的所有网络接口被分配给DPDK数据平面730,所以将在基于DPDK的虚拟路由器处接收入站数据包。在图7的示例中,用于pod 722中的一者的入站数据包被虚拟路由器206A接收。虚拟路由器206A的数据包处理器710可以检查入站数据包,并且使用各种标准来确定数据包是否需要基于内核的处理。数据包处理器710作为其确定需要基于内核的处理的数据包的“通路”来操作。数据包处理器710将此类数据包递送到网络堆栈712,以便递送到适当的VRF。在图7所示的示例中,除了将入站数据包传递到网络堆栈712以便处理并传递到VRF 707A之外,数据包处理器710不执行对具有pod 722A、722B和pod 722C的veth接口的目的地的入站数据包的任何网络处理。
cRPD 324可以在内核数据平面732和DPDK数据平面730中为基于DPDK的虚拟路由器安装转发状态。例如,cRPD 324创建VRF的逻辑表示,该VRF是为具有与对应的DPDK VRF基本上相同的路由表的DPDK数据平面创建的。在图7的示例中,VRF 707B'是VRF 707B的逻辑表示,并且包括与VRF 707B基本相同的路由表,差别很小。例如,VRF 707B和707B'的路由表可以包含相同的路由条目/前缀集合,但是在由内核数据平面处理的路由/前缀的下一跳字段中将具有不同的值。对于此类条目,VRF 707B具有路由表条目,该路由表条目具有指示数据包被递送到内核的下一跳值。对于相同的前缀,VRF 707B'具有路由表条目,该条目具有指示内核380如何解封装数据包并在VRF 707B'的路由表中执行查找的下一跳值。因此,对于具有指示数据包将由内核380处理的目的地地址的数据包,cRPD 324可以对VRF 707B的路由表进行编程,以将下一跳设置到内核380的接口(例如,vhost0或vhost1),指示数据包处理器710应当例如经由vhost接口将数据包转发到内核380。当内核380经由vhost接口接收到数据包时,它可以确定与目的地地址相关联的路由表条目中的下一跳字段是环回地址,指示内核应当处理入站数据包。
数据包处理器710可以对具有指示DPDK数据平面730中的VRF的目的地的入站数据包执行标准DPDK处理。例如,数据包处理器710可以对具有pod 722C或pod 722D的vhost接口的目的地的入站数据包执行DPDK处理。
图8A和图8B是图示了根据本公开的技术的对出站数据包和入站数据包的示例处理的序列图。将在图7所示的云本地路由器702的上下文中讨论图8A和图8B。在图8A和图8B所示的示例中,两个pod 722A和722D发送和接收网络数据包。pod 722D被配置为利用基于DPDK的联网。基于此类配置,cRPD 324配置vhost连接以将pod 722D通信地耦合到VRF707B。pod 722A被配置为使用基于内核的联网。基于此类配置,cRPD 324配置veth对以将pod722A通信地耦合到VRF 707A。
图8A是图示了根据本公开的技术的对出站数据包的示例处理的示例序列图。在图8A所示的示例中,pod 722A和722D中的每一者都发送出站数据包。在操作810,pod 722A发送出站数据包。pod 722A被配置为使用内核数据平面,因此,出站数据包将被称为基于内核的出站数据包。VRF707A接收出站数据包,并且在操作812,内核380和/或网络堆栈712处理出站数据包。此类处理可以包括“开始列表”。在操作812的处理之后,基于内核的出站数据包将是完全形成的L2数据包。在操作814,网络堆栈712经由vhost接口将数据包转发到DPDK虚拟路由器206A。虚拟路由器206A的数据包处理器710接收基于内核的出站数据包(如由网络堆栈712封装的),并且因为数据包虚拟路由器经由其自身与网络堆栈712之间的vhost接口接收数据包,所以在操作816处,虚拟路由器206A除了将基于内核的出站数据包转发到相应的物理端口之外,不执行数据包的任何处理。作为示例,如果虚拟路由器206A经由vhost1接口从网络堆栈712接收到数据包,则数据包处理器710将充当直通设备,并将该数据包转发到NIC 721N以经由port1(该端口对应于vhost1)传输。
在操作818,pod 722D发送出站数据包。pod 722D被配置为使用DPDK数据平面,因此,出站数据包将被称为基于DPDK的出站数据包。虚拟路由器206A的VRF 707B可以经由vhost接口或经由DPDK API来接收出站数据包。在操作820,虚拟路由器206A执行对数据包的基于DPDK的处理,并且将基于DPDK的出站数据包转发到NIC 721N。
操作810-820可以以与图8A所示的顺序不同的顺序执行。例如,pod722D可以在pod722A之前发送出站数据包。此外,图8A中所示的操作可以同时发生。
图8B是根据本公开的技术图示了入站数据包的示例处理的示例序列图。在图8B所示的示例中,NIC 721N接收入站数据包。如上所述,NIC721中的每一者被分配给DPDK数据平面。因此,在操作830,NIC 721N将入站数据包提供给虚拟路由器206A。数据包处理器710执行数据包检查832以确定入站数据包是否具有基于DPDK的pod作为目的地,或者入站数据包是否将被提供给内核380以供进一步处理,或者数据包是否将由虚拟路由器206A处理(384)。数据包处理器710可以使用各种规则和试探法来确定是否要将入站数据包提供给内核380以供进一步处理。例如,在一些方面,数据包处理器710可以确定数据包的封装类型,并且如果封装类型是基于DPDK的虚拟路由器不支持的类型,则将数据包提供给内核380以进行处理。此类封装的示例包括IP-IP、VX-LAN、GRE、MPLS、EVPN、IPsec、SRV6等。作为示例,数据包处理器710可以建立“递送到主机路径”,其指定当数据包具有需要基于内核的处理的封装时数据包处理器710要使用的vhost接口(例如,图7的示例中的vhost0或vhost1)。
在一些方面,数据包处理器可以基于目的地地址来确定将数据包转发到内核380。如上所述,虚拟路由器206A中的路由表可以被编程为向内核380设置下一跳地址。在该情况下,数据包被转发到内核380以供进一步处理。
在一些方面,数据包处理器710可以确定其不知道如何处理数据包。在该情况下,数据包处理器710可以在内核380将知道如何处理数据包的假设下将数据包转发到内核380。作为示例,数据包处理器710可以建立“没有到主机的路径(exception-to-hostpath)”,该路径指定了当遇到它不知道如何处理的数据包时数据包处理器710要使用的vhost接口(例如,图7的示例中的vhost0或vhost1)。例如,如果数据包处理器710遇到数据包报头中的不知道如何处理的标签,“没有到主机(exception-to-host)”路径可以用于转发包以用于基于内核的处理。
如果数据包处理器710确定数据包将被提供给内核380,则在操作836(834的“是”分支),数据包处理器710将入站数据包提供给内核380的网络堆栈712,以供内核380使用网络堆栈712进一步处理(838)。在该情况下,除了将数据包转发到内核380之外,数据包处理器710不对入站数据包执行任何处理。例如,绕过虚拟路由器206A的DPDK处理操作,并且不修改入站数据包的任何TTL值。
如果数据包处理器710确定数据包具有DPDK pod作为目的地并且不需要内核处理(834的“否”分支),则虚拟路由器206A执行标准DPDK数据包处理,并且在操作842,使用vhost接口或DPDK API将数据包提供给基于DPDK的pod 722D。
图9是根据本公开的技术的pod的示例部署规范。图9中所示的示例是YAML不是标记语言(YAML)格式。在图9所示的示例中,名为“odu-pod1”的pod在创建时将被连接到两个网络。第一网络定义902指示第一接口“net1”将被用于将该pod连接到名为“vswitch-pod1-bd100”的网络。“dataplane”字段具有“linux”值,指示将为内核数据平面(例如,linux内核数据平面)创建该接口。第二定义904指示第二接口“net2”将被用于将该pod连接到名为“vswitch-pod1-bd200”的网络。“dataplane”字段具有“DPDK”值,指示pod支持DPDK通信并且该接口将被创建用于DPDK数据平面。
图10是图示了基于DPDK的虚拟路由器的操作的流程图。基于数据平面开发工具包(DPDK)的虚拟路由器从物理接口接收去往容器化应用的数据包(1005)。基于DPDK的虚拟路由器确定由处理电路执行的内核网络栈是否要针对数据包执行隧道传送处理(1010)。响应于确定内核网络栈要针对第一数据包执行隧道传送处理,基于DPDK的虚拟路由器将数据包转发到内核网络栈(1015)。
本文描述的技术可以硬件、软件、固件或其任何组合来实现。图中所示和/或本公开中别处所示或所述的各种组件、功能单元和/或模块可以使用驻留在一个或多个计算设备中和/或在一个或多个计算设备处执行的软件、硬件、固件或硬件、软件和固件的混合来执行该操作。例如,计算设备可以利用多个处理器或多个设备来执行一个或多个此类模块。计算设备可以执行一个或多个此类模块,如在下层硬件上执行的虚拟机。一个或多个此类模块可以作为操作系统或计算平台的一个或多个服务来执行。一个或多个此类模块可以作为一个或多个可执行程序在计算平台的应用层执行。在其他示例中,由模块提供的功能可以由专用硬件设备来实现。尽管可以单独地示出包括在一个或多个存储设备内的某些模块、数据存储、组件、程序、可执行文件、数据项、功能单元和/或其他项,但是这些项中的一者或多者可以被组合并且作为单个模块、组件、程序、可执行文件、数据项或功能单元来操作。例如,一个或多个模块或数据存储可以被组合或部分地组合,使得它们作为单个模块来操作或提供功能。此外,一个或多个模块可以彼此结合地操作,使得例如一个模块充当另一模块的服务或扩展。此外,存储设备内示出的每个模块、数据存储、组件、程序、可执行文件、数据项、功能单元或其他项可以包括多个组件、子组件、模块、子模块、数据存储和/或未示出的其他组件或模块或数据存储。此外,存储设备内示出的每个模块、数据存储、组件、程序、可执行文件、数据项、功能单元或其他项可以以各种方式实现。例如,存储设备内示出的每个模块、数据存储、组件、程序、可执行文件、数据项、功能单元或其他项可以被实现为在计算设备上执行的操作系统的一部分。
如果以硬件实现,则本发明可针对一种设备,诸如处理器或集成电路装置,诸如集成电路芯片或芯片组。可替代地或另外,如果以软件或固件实现,那么该技术可至少部分地由包括指令的计算机可读数据存储媒体实现,该指令在执行时致使处理器执行上文所描述的方法中的一者或多者。例如,计算机可读数据存储介质可以存储此类指令以供处理器执行。
计算机可读介质可以形成计算机程序产品的一部分,该计算机程序产品可以包括封装材料。计算机可读介质可以包括计算机数据存储介质,诸如随机存取存储器(RAM)、只读存储器(ROM)、非易失性随机存取存储器(NVRAM)、电可擦除可编程只读存储器(EEPROM)、闪存、磁或光数据存储介质等。在一些示例中,制品可以包括一个或多个计算机可读存储介质。
在一些示例中,计算机可读存储介质可以包括非暂时性介质。术语“非暂时性”可以指示存储介质不被体现在载波或传播信号中。在某些示例中,非暂时性存储介质可以存储可以随时间变化的数据(例如,在RAM或高速缓存中)。
代码或指令可以是由处理电路执行的软件和/或固件,该处理电路包括一个或多个处理器,诸如一个或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他等效的集成或离散逻辑电路。因此,如本文中所使用的术语“处理器”可指代前述结构中的任一者或适合于实现本文中所描述的技术的任何其他结构。另外,在一些方面中,本发明中所描述的功能性可提供于软件模块或硬件模块内。

Claims (19)

1.一种用于虚拟化计算基础设施的系统,所述系统包括:
处理电路;
容器化应用;
物理接口;
基于数据平面开发工具包DPDK的虚拟路由器,被配置为在所述处理电路上执行以经由所述物理接口发送和接收数据包;以及
内核网络栈,被配置为在所述处理电路上执行,以对去往所述容器化应用并且由基于DPDK的虚拟路由器经由所述物理接口接收的所述数据包执行隧道传送处理。
2.根据权利要求1所述的系统,其中,所述内核网络栈还被配置为对由所述容器化应用发起并且由所述基于DPDK的虚拟路由器经由所述物理接口发送的所述数据包执行所述隧道传送处理。
3.根据权利要求1所述的系统,其中,所述物理接口包括在所述系统的多个物理接口中,并且其中所述多个物理接口中的每一者被分配给所述基于DPDK的虚拟路由器。
4.根据权利要求1所述的系统,其中,对于多个物理接口中的每个端口,在所述基于DPDK的虚拟路由器与所述内核网络栈之间配置对应的vhost接口。
5.根据权利要求4所述的系统,其中,所述基于DPDK的虚拟路由器被配置为针对经由vhost接口接收的数据包,经由与所述vhost接口对应的所述端口发送所述数据包。
6.根据权利要求4所述的系统,其中,所述基于DPDK的虚拟路由器被配置为针对经由所述端口接收的所述数据包,经由与所述端口相对应的所述vhost接口将所述数据包发送到所述内核网络栈。
7.根据权利要求1所述的系统,其中,所述基于DPDK的虚拟路由器被配置为基于入站网络数据包的封装类型,确定是否向所述内核网络栈发送所述入站网络数据包以进行所述隧道传送处理。
8.根据权利要求1所述的系统,其中,所述基于DPDK的虚拟路由器被配置为基于入站网络数据包的标签,确定是否将所述入站网络数据包发送到所述内核网络栈以用于所述隧道传送处理。
9.根据权利要求1所述的系统,其中,所述基于DPDK的虚拟路由器被配置为基于确定所述基于DPDK的虚拟路由器不能处理入站网络数据包,确定是否向所述内核网络栈发送所述入站网络数据包以用于所述隧道传送处理。
10.根据权利要求1所述的系统,其中,所述基于DPDK的虚拟路由器被配置为基于所述基于DPDK的虚拟路由器的路由表中的路由信息,确定是否向所述内核网络栈发送入站网络数据包以用于所述隧道传送处理。
11.一种用于虚拟化计算基础设施的方法,所述方法包括:
由处理电路执行的基于数据平面开发工具包DPDK的虚拟路由器,从物理接口接收去往容器化应用的第一数据包;
由所述处理电路执行的基于DPDK的虚拟路由器确定内核网络栈是否要针对所述第一数据包执行隧道传送处理;以及
响应于确定所述内核网络栈要针对所述第一数据包执行所述隧道传送处理,由所述基于DPDK的虚拟路由器将所述第一数据包转发至所述内核网络栈。
12.根据权利要求11所述的方法,其中,所述方法还包括:
由所述内核网络栈从所述容器化应用接收第二数据包;
由所述内核网络栈针对所述第二数据包执行所述隧道传送处理;
由所述内核网络栈将经处理的第二数据包转发到所述基于DPDK的虚拟路由器;以及
由所述基于DPDK的虚拟路由器经由所述物理接口向目的地网络设备发送所述经处理的第二数据包。
13.根据权利要求12所述的方法,其中,所述物理接口包括在系统的多个物理接口中,并且其中所述多个物理接口中的每一者被分配给所述基于DPDK的虚拟路由器。
14.根据权利要求11所述的方法,还包括为多个物理接口中的每个端口配置在所述基于DPDK的虚拟路由器与所述内核网络栈之间的对应vhost接口。
15.根据权利要求14所述的方法,还包括:
由所述基于DPDK的虚拟路由器从所述内核网络栈经由所述vhost接口接收第三数据包;以及
由所述基于DPDK的虚拟路由器经由与所述vhost接口相对应的所述端口发送所述第三数据包。
16.根据权利要求14所述的方法,还包括:
由所述基于DPDK的虚拟路由器经由多个端口中的端口接收第三数据包;以及
所述基于DPDK的虚拟路由器经由与所述端口相对应的所述vhost接口向所述内核网络栈发送所述第三数据包。
17.根据权利要求11所述的方法,其中,确定所述内核网络栈是否要针对所述第一数据包执行所述隧道传送处理包括基于所述第一数据包的封装类型、所述第一数据包的标签和路由表中的一者或多者,来确定所述内核网络栈是否要执行所述隧道传送处理。
18.根据权利要求11所述的方法,其中,确定所述内核网络栈是否要针对所述第一数据包执行所述隧道传送处理包括基于由所述基于DPDK的虚拟路由器确定所述基于DPDK的虚拟路由器不能处理入站网络数据包,来确定所述内核网络栈是否要执行所述隧道传送处理。
19.一种计算机可读存储介质,具有计算机可执行指令,所述计算机可执行指令在被执行时使得执行基于DPDK的虚拟路由器和内核网络栈的处理电路执行根据权利要求11-18中任一项所述的方法。
CN202211734227.XA 2022-06-17 2022-12-30 用于虚拟化计算基础设施的系统、方法及存储介质 Pending CN117255019A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US63/366,619 2022-06-17
US17/813,027 US20230412526A1 (en) 2022-06-17 2022-07-15 Hybrid data plane for a containerized router
US17/813,027 2022-07-15

Publications (1)

Publication Number Publication Date
CN117255019A true CN117255019A (zh) 2023-12-19

Family

ID=89130078

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211734227.XA Pending CN117255019A (zh) 2022-06-17 2022-12-30 用于虚拟化计算基础设施的系统、方法及存储介质

Country Status (1)

Country Link
CN (1) CN117255019A (zh)

Similar Documents

Publication Publication Date Title
US11818647B2 (en) Containerized router with a generic data plane interface
US11792126B2 (en) Configuring service load balancers with specified backend virtual networks
CN114745332B (zh) 促进计算机网络中的服务链的流对称的系统和网络控制器
US11159366B1 (en) Service chaining for virtual execution elements
US10708082B1 (en) Unified control plane for nested clusters in a virtualized computing infrastructure
CN110875844B (zh) 用于虚拟执行元件的多虚拟网络接口支持
CN110875848B (zh) 控制器和用于配置虚拟执行元件的虚拟网络接口的方法
US11316822B1 (en) Allocating external IP addresses from isolated pools
US20230123775A1 (en) Cloud native software-defined network architecture
US11743182B2 (en) Container networking interface for multiple types of interfaces
US20220334864A1 (en) Plurality of smart network interface cards on a single compute node
US20230269215A1 (en) Dynamically learning media access control and internet protocol addresses
US20230079209A1 (en) Containerized routing protocol process for virtual private networks
EP4307632A2 (en) Containerized router with virtual networking
CN115941457A (zh) 用于多个集群的云本地软件定义网络架构
CN116888940A (zh) 利用虚拟联网的容器化路由器
EP4293978A1 (en) Hybrid data plane for a containerized router
US20240031908A1 (en) Containerized router with a disjoint data plane
CN117255019A (zh) 用于虚拟化计算基础设施的系统、方法及存储介质
EP4075757A1 (en) A plurality of smart network interface cards on a single compute node
EP4160410A1 (en) Cloud native software-defined network architecture
US20240129161A1 (en) Network segmentation for container orchestration platforms
US20230106531A1 (en) Virtual network routers for cloud native software-defined network architectures

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination