掌桥专利:专业的专利平台
掌桥专利
首页

用于软件定义网络架构的度量组

文献发布时间:2024-04-18 19:58:53


用于软件定义网络架构的度量组

本申请要求于2022年9月20日提交的美国专利申请No.17/933,566的权利,该美国专利申请要求于2022年6月20日提交的美国临时专利申请No.63/366,671的权利,每个申请的全部内容在此引入作为参考。

技术领域

本公开涉及虚拟化计算基础设施,并且更具体地,涉及云原生(cloud native)联网。

背景技术

在典型的云数据中心环境中,存在提供计算和/或存储容量以运行各种应用的互连服务器的大量集合。例如,数据中心可以包括为订户(即数据中心的客户)托管应用和服务的设施。数据中心可以例如托管所有的基础设施设备,诸如联网和存储系统、冗余电源和环境控制。在典型的数据中心中,存储系统和应用服务器的集群经由由物理网络交换机和路由器的一个或多个层提供的高速交换结构互连。更复杂的数据中心为遍布全世界的基础设施提供位于各种物理主机设施中的用户支持设备。

虚拟化数据中心正成为现代信息技术(IT)基础设施的核心基础。特别地,现代数据中心已经广泛地利用虚拟化环境,其中在物理计算设备的底层计算平台上部署并执行虚拟主机,在此也称为虚拟执行元件,诸如虚拟机或容器。

数据中心或包括一个或多个服务器的任何环境内的虚拟化可提供若干优点。一个优点是虚拟化可以提供对效率的显著改进。随着每个物理CPU具有大量核的多核微处理器架构的出现,底层物理计算设备(即服务器)变得越来越强大,虚拟化变得更容易且更高效。第二个优点是虚拟化提供对计算基础设施的显著控制。随着物理计算资源变成诸如在基于云的计算环境中的可替换资源,计算基础设施的供应和管理变得更容易。因此,除了虚拟化提供的效率和增加的投资回报(ROI)之外,企业IT人员通常更喜欢数据中心中的虚拟化计算集群的管理优势。

容器化是一种基于操作系统级虚拟化的虚拟化方案。容器是用于彼此隔离且与主机隔离的应用的轻量且便携式执行元件。因为容器未紧密耦合到主机硬件计算环境,所以应用程序可绑定到容器映像并作为支持底层容器架构的任何主机或虚拟主机上的单个轻量级封装来执行。这样,容器解决了如何使软件在不同计算环境中工作的问题。容器可以从一个计算环境到另一个、虚拟或物理地一致地执行。

由于容器固有的重量轻的特性,单个主机通常可以支持比传统虚拟机(VM)多得多的容器实例。容器通常是短寿命的(与大多数VM相比),可以比VM更高效地创建和移动,并且它们还可以被管理为逻辑相关元素的组(有时对于一些编排平台例如,Kubernetes,被称为―pod”)。这些容器特性影响容器联网解决方案的要求:网络应该是灵活的和可扩展的。VM、容器和裸金属服务器可能需要共存于同一计算环境中,其中在应用程序的不同部署之间启用通信。容器网络对于与用于部署容器化应用的多种类型的编排平台一起工作也应当是不可知的。

管理部署的计算基础设施和用于应用程序执行的基础设施可涉及两个主要角色:(1)编排——用于跨主机集群自动化应用的部署、缩放和操作,并提供计算基础设施,其可包括以容器为中心的计算基础设施;以及(2)网络管理——用于在网络基础设施中创建虚拟网络,以实现在诸如容器或VM等虚拟执行环境上运行的应用程序之间以及在传统(例如,物理)环境上运行的应用程序之间的分组化通信。软件定义联网有助于网络管理。

在网络管理方面,可以提供大量的度量数据以便于更好地理解网络是如何操作的。在某些方面,这种度量数据可以使网络运营商(或在其它工作中,网络管理员)能够理解网络是如何操作的。虽然这种度量数据对于解决网络操作的故障是有价值的,但是就收集和发送(或者换句话说,源)这种度量数据的pod要求而言,可能需要大量的网络资源,这可能消耗大量的网络资源来收集和发送度量数据。

发明内容

一般而言,描述了用于实现在软件定义网络(SDN)架构中高效收集度量数据的技术。网络控制器可以实现遥测节点,该遥测节点被配置为提供被称为度量组的抽象,该抽象在仅允许收集度量数据的子集方面促进低粒度和高粒度。遥测节点可以定义度量组,而不是无差别地收集所有度量数据并输出所有可能的度量数据,所述度量组可以定义所有可能的度量数据的子集(在这种情况下,所述子集指非零子集,而不是数学抽象,其中子集可以包括零或更多,包括所有度量)。

遥测节点可以提供应用编程接口(API)服务器,通过该API服务器接收定义度量组的请求,这些度量组可以被独立地启用或禁用。换句话说,该度量组以低等级的粒度来启用或禁用度量数据的子集。在每个度量组中,API服务器还可以接收请求以启用或禁用由度量组定义的度量数据的子集中的度量数据的单独集合。网络运营商然后可以例如经由用户接口与遥测节点接口以选择一个或多个度量组来启用或禁用由度量组定义的度量数据的对应子集,其中这样的度量组可以根据各种主题(例如,边界网关协议-BGP、互联网协议版本4-IPv4、IPv6、虚拟路由器、虚拟路由器业务、多播虚拟专用网络-MVPN等)来布置(潜在地分级地)。

遥测节点可将度量组定义为用于实现网络控制器的容器编排平台内的定制资源,将一个或多个度量组转换为定义(例如,作为阵列)启用度量的配置映射(同时还可能移除重叠度量以防止度量数据的冗余收集)。遥测节点然后可以与所识别的遥测导出器对接,以基于遥测导出器配置数据来配置遥测导出器,以仅收集和导出被启用来收集的度量。

这些技术可以提供附加的一个或多个技术优点。例如,该技术可以通过在收集和输出度量数据时减少资源消耗来改进SDN架构的操作。假设不是所有的度量数据都被收集和导出,而是仅选择子集被收集和导出,遥测导出器可以使用较少的处理器周期、存储器、存储器带宽和相关联的功率来收集与度量子集相关联的度量数据(小于所有度量)。此外,遥测导出器可以仅导出度量的子集,这导致对SDN架构的网络带宽的较少消耗,包括处理SDN架构内的遥测数据的处理资源、存储器、存储器带宽和相关联的功率。此外,接收所输出的度量数据的遥测节点可利用较少的计算资源(同样,处理器周期、存储器、存储器带宽和相关联的功率)来处理所输出的度量数据,再次假定这些度量数据仅对应于启用的度量组。

作为另一示例,通过使用便于提取底层配置数据以定义每个分类和/或局部排列的度量组的度量子集的定制资源来定义度量组,网络管理员可以更容易地与遥测节点对接以定制度量数据收集。由于这些网络管理员可能不具有关于容器编排平台的广泛经验,所以通过度量组提供的这种抽象可促进与之交互以定制度量数据导出的更直观的用户界面,这可导致较少的网络管理员错误,否则将消耗计算资源。

在一个示例中,所述技术的各个方面涉及一种用于软件定义联网(SDN)架构系统的网络控制器,所述网络控制器包括:处理电路系统;遥测节点,其被配置为由所述处理电路系统执行,所述遥测节点被配置为:处理请求,通过该请求启用度量组以从所述由网络控制器管理的集群的计算节点导出,度量组定义来自多个度量的一个或多个度量的子集;基于用以启用度量组的请求,将所述一个或多个度量的子集转换为遥测导出器配置数据,遥测导出器配置数据配置被部署在计算节点处的遥测导出器以导出一个或多个度量的子集;以及与所述遥测导出器对接,以基于遥测导出器配置数据来配置遥测导出器以导出所述一个或多个度量的子集。

在另一示例中,所述技术的各个方面涉及软件定义的联网(SDN)架构系统中的计算节点,所述软件定义的联网(SDN)架构系统包括:处理电路系统,被配置为执行形成所述SDN架构系统的一部分的计算节点,其中计算节点被配置为支持虚拟网络路由器并执行遥测导出器,其中遥测导出器被配置为:接收定义要导出到由网络控制器执行的遥测节点的多个度量中的一个或多个度量的子集的遥测导出器配置数据;基于遥测导出器配置数据收集仅对应于多个度量中的所述一个或多个度量的子集的度量数据;以及向遥测节点输出仅对应于多个度量中的一个或多个度量的子集的度量数据。

在另一示例中,该技术的各个方面涉及一种用于软件定义联网(SDN)架构系统的方法,该方法包括:处理请求,通过所述请求启用度量组以从形成集群的所定义的一个或多个计算节点导出,该度量组定义来自多个度量的一个或多个度量的子集;基于用以启用度量组的请求,将一个或多个度量的所述子集转换为遥测导出器配置数据,遥测导出器配置数据配置被部署在一个或多个计算节点处的遥测导出器以导出一个或多个度量的子集;以及与遥测导出器对接,以基于遥测导出器配置数据来配置遥测导出器以导出一个或多个度量的子集。

在另一示例中,本技术的各个方面涉及一种用于软件定义联网(SDN)架构系统的方法,包括:接收定义要导出到由网络控制器执行的遥测节点的多个度量中的一个或多个度量的子集的遥测导出器配置数据;基于遥测导出器配置数据收集仅对应于所述多个度量中的所述一个或多个度量的子集的度量数据;以及向所述遥测节点输出仅对应于所述多个度量中的所述一个或多个度量的子集的度量数据。

在另一示例中,该技术的各个方面涉及软件定义的联网(SDN)架构系统,所述SDN架构系统包括:被配置为执行遥测节点的网络控制器,所述遥测节点被配置为:处理请求,通过所述请求启用度量组以从所定义的一个或多个逻辑相关元素导出,所述度量组定义来自多个度量的一个或多个度量的子集;基于用以启用所述度量组的所述请求,将所述一个或多个度量的所述子集转换为遥测导出器配置数据,所述遥测导出器配置数据配置被部署在所述一个或多个逻辑相关元件处的遥测导出器以导出所述一个或多个度量的所述子集;以及与所述遥测导出器对接,以基于所述遥测导出器配置数据来配置所述遥测导出器以导出所述一个或多个度量的子集;以及逻辑元件,其被配置为支持虚拟网络路由器并执行遥测导出器,其中所述遥测导出器被配置为:接收遥测导出器配置数据;基于所述遥测导出器配置数据收集仅对应于所述多个度量中的所述一个或多个度量的子集的度量数据;以及向所述遥测节点输出仅对应于所述多个度量中的所述一个或多个度量的子集的度量数据。

在另一实例中,所述技术的各个方面针对其上存储有指令的非暂态计算机可读存储介质,所述指令在被执行时致使一个或多个处理器:处理请求,通过所述请求启用度量组以从形成集群的所定义的一个或多个计算节点导出,所述度量组定义来自多个度量的一个或多个度量的子集;基于用以启用所述度量组的所述请求,将所述一个或多个度量的所述子集转换为遥测导出器配置数据,所述遥测导出器配置数据配置被部署在所述一个或多个计算节点处的遥测导出器以导出所述一个或多个度量的所述子集;以及与所述遥测导出器对接,以基于所述遥测导出器配置数据来配置所述遥测导出器以导出所述一个或多个度量的子集。

在另一实例中,该技术的各个方面针对其上存储有指令的非暂态计算机可读存储介质,该指令在被执行时致使一个或多个处理器:接收定义要导出到由网络控制器执行的遥测节点的多个度量中的一个或多个度量的子集的遥测导出器配置数据;基于所述遥测导出器配置数据收集仅对应于所述多个度量中的所述一个或多个度量的子集的度量数据;以及向所述遥测节点输出仅对应于所述多个度量中的所述一个或多个度量的子集的度量数据。

在附图和以下描述中阐述了本公开的一个或多个示例的细节。其它特征,目的和优点将从说明书和附图以及从权利要求书中显而易见。

附图说明

图1是示出其中可实现本文所述技术的示例的示例计算基础设施的框图。

图2是示出了根据本公开的技术的SDN架构的组件的另一视图以及更详细的框图。

图3是示出根据本公开的技术的SDN架构的示例组件的框图。

图4是示出根据本公开的技术的SDN架构的示例组件的框图。

图5A是说明根据本发明的技术的用于使用SDN架构的底层网络和覆盖网络配置的控制/路由平面的框图。

图5B是示出根据本公开的技术的使用底层网络中配置的隧道来连接pod的配置的虚拟网络的框图。

图6是说明根据本发明的技术的用于SDN架构配置的定制资源的定制控制器的实例的框图。

图7是更详细地示出图1-图5A的遥测节点和遥测导出器的框图。

图8是示出图1的示例中所示的计算机架构在执行本文所述技术的各方面时的操作的流程图。

在整个说明书和附图中,相同的附图标记表示相同的元件。

具体实施方式

图1是示出其中可实现本文所述技术的示例的示例计算基础设施8的框图。用于虚拟网络的软件定义的联网(SDN)架构的当前实现方式由于例如生命周期管理的复杂性、强制性的高资源分析组件、配置模块中的规模限制以及无基于命令行接口(CLI)的(类kubectl接口而对云原生采用提出了挑战。计算基础架构8包括云原生SDN架构系统,作为本文描述的示例,其解决了这些挑战并且现代化了电信云原生时代。云原生SDN架构的示例用例包括5G移动网络以及云和企业云原生用例。SDN架构可以包括在计算节点(例如,服务器12)和诸如路由器或交换机的网络设备中实现的数据平面元件,并且SDN架构还可以包括用于创建和管理虚拟网络的SDN控制器(例如,网络控制器24)。SDN架构配置和控制平面被设计为具有支持服务中升级的基于容器的微服务架构的按比例缩小云原生软件。

因此,SDN架构组件是微服务,并且与现有的网络控制器相比,SDN架构采用基本容器编排平台来管理SDN架构组件的生命周期。使用容器编排平台来构建SDN架构组件;SDN架构使用可与客户提供的云原生选项集成的云原生监控工具;SDN架构使用SDN架构对象的聚合API(即,定制资源)来提供资源的声明性方式。SDN架构升级可以遵循云原生模式,并且SDN架构可以利用Kubernetes构造,例如Multus、Authentication&Authorization、ClusterAPI、kubefederation、kubevirt和Kata容器。SDN架构可以支持数据平面开发套件(DPDK)pod,并且SDN架构可以扩展到支持具有虚拟网络策略和全局安全策略的Kubernetes。

对于服务提供商和企业,SDN架构使网络资源供应和组织自动化,以动态地创建高度可扩展的虚拟网络,并链接虚拟化网络功能(VNF)和物理网络功能(PNF),以根据需要形成区分的服务链。SDN架构可以与诸如Kubernetes、openshift、Mesos、openstack、VMwarevSphere等编排平台(例如,编排器23)以及服务提供商操作支持系统/业务支持系统(OSS/BSS)集成。

通常,一个或多个数据中心10为客户站点11(图示为“客户11”)提供应用和服务的操作环境,客户站点11具有通过服务提供商网络7耦合到数据中心的一个或多个客户网络。数据中心10中的每一个例如可以是主机基础设施设备,诸如联网和存储系统、冗余电源和环境控制。服务提供商网络7耦合到公共网络15,公共网络15可以表示由其他提供商管理的一个或多个网络,并且因此可以形成大规模公共网络基础设施(例如互联网)的一部分。公共网络15可以表示例如局域网(LAN)、广域网(WAN)、互联网、虚拟LAN(VLAN)、企业LAN、第3层虚拟专用网络(VPN)、由操作服务提供商网络7的服务提供商操作的互联网协议(IP)内联网、企业IP网络或其某种组合。

虽然客户站点11和公共网络15主要被示出和描述为服务提供商网络7的边缘网络,但是在一些示例中,客户站点11和公共网络15中的一个或多个可以是数据中心10中的任何数据中心内的租户网络。例如,数据中心10可以托管多个租户(客户),每个租户与一个或多个虚拟专用网络(VPN)相关联,每个虚拟专用网络可以实现客户站点11中的一个。

服务提供商网络7向附加的客户站点11,数据中心10和公共网络15提供基于分组的连通性。服务提供商网络7可以表示由服务提供商拥有和操作以互连多个网络的网络。服务提供商网络7可以实现多协议标签交换(MPLS)转发,并且在这种情况下可以被称为MPLS网络或MPLS骨干网。在一些情况下,服务提供商网络7表示多个互连的自治系统,例如互联网,其提供来自一个或多个服务提供商的服务。

在一些示例中,数据中心10中的每一个可以表示许多地理上分布式的网络数据中心中的一个,其可以经由服务提供商网络7,专用网络链路,暗光纤或其他连接彼此连接。如图1的示例所示,数据中心10可以包括为客户提供网络服务的设施。服务提供商的客户可以是诸如企业和政府或个人的集体实体。例如,网络数据中心可以为几个企业和终端用户提供网络服务。其它示例性服务可包括数据存储、虚拟专用网络、业务工程、文件服务、数据挖掘、科学或超级计算等。尽管图示为服务提供商网络7的单独的边缘网络,但是数据中心10的元件,例如一个或多个物理网络功能(PNF)或虚拟化网络功能(VNF),可以包括在服务提供商网络7的核心内。

在该示例中,数据中心10包括经由由物理网络交换机和路由器的一个或多个层提供的交换结构14互连的存储和/或计算服务器(或“节点”),其中服务器12A-12X(本文是“服务器12”)被描绘为耦合到机架顶部交换机16A-16N。服务器12是计算设备,并且在本文也可以被称为“计算节点”、“主机”或“主机设备”。尽管在图1中仅详细示出了耦合到TOR交换机16A的服务器12A,但是数据中心10可以包括耦合到数据中心10的其它TOR交换机16的许多附加服务器。

所示示例中的交换结构14包括互连的机架顶部(TOR)(或其它“叶”)交换机16A-16N(统称为“TOR交换机16”),其耦合到机架(或“脊”或“芯”)交换机18A-18M(统称为“机架交换机18”)的分布层。虽然未示出,但是数据中心10还可以包括例如一个或多个非边缘交换机、路由器、集线器、网关、诸如防火墙之类的安全设备、入侵检测和/或入侵预防设备、服务器、计算机终端、膝上型计算机、打印机、数据库、诸如蜂窝电话或个人数字助理之类的无线移动设备、无线接入点、网桥、电缆调制解调器、应用加速器或其它网络设备。数据中心10还可以包括一个或多个物理网络功能(PNF)、例如物理防火墙、负载平衡器、路由器、路由反射器,宽带网络网关(BNG)、移动核心网络元件和其它PNF。

在该示例中,TOR交换机16和机架交换机18向服务器12提供到IP结构20和服务提供商网络7的冗余(多宿主)连接。机架交换机18聚集业务流并提供TOR交换机16之间的连通性。TOR交换机16可以是提供层2(MAC)和/或层3(例如,IP)路由和/或交换功能的网络设备。TOR交换机16和机架交换机18可以各自包括一个或多个处理器和存储器,并且可以执行一个或多个软件过程。机架交换机18耦合到IP结构20,IP结构20可以执行层3路由,以通过服务提供商网络7在数据中心10和客户站点11之间路由网络业务。数据中心10的交换架构仅仅是示例。例如,其它开关结构可以具有更多或更少的开关层。IP结构20可以包括一个或多个网关路由器。

术语“分组流”、“业务流”或简称为“流”是指源自特定源设备或端点并被发送到特定目的地设备或端点的一组分组。单个分组流可以由5元组标识:<源网络地址,目的地网络地址,源端口,目的地端口,协议>,例如。该5元组通常标识接收到的分组所对应的分组流。n元组是指从5元组中抽取的任何n个项目。例如,分组的2元组可以指分组的<源网络地址,目的地网络地址>或<源网络地址,源端口>的组合。

服务器12可以各自表示计算服务器或存储服务器。举例来说,服务器12中的每一者可表示经配置以根据本文中所描述的技术操作的计算装置,例如基于x86处理器的服务器。服务器12可以为NFV架构提供网络功能虚拟化基础架构(NFVI)。

通过虚拟化服务器的资源以提供在服务器上执行的一个或多个进程(应用程序)之间的某种隔离措施,服务器12中的任何服务器可以配置有诸如pod或虚拟机的虚拟执行元件。“基于管理程序”或“硬件级”或“平台”虚拟化是指创建虚拟机,每个虚拟机包括用于执行一个或多个进程的客户操作系统。通常,虚拟机提供用于在隔离虚拟环境中执行应用程序的虚拟化/客户操作系统。因为虚拟机是从主机服务器的物理硬件虚拟化的,所以执行应用程序与主机和其它虚拟机的硬件隔离。每个虚拟机可以配置有一个或多个虚拟网络接口,用于在相应的虚拟网络上通信。

虚拟网络是在物理网络之上实现的逻辑构造。虚拟网络可用于替换基于VLAN的隔离并在虚拟化数据中心(例如数据中心10)中提供多租户。每个租户或应用可以具有一个或多个虚拟网络。每个虚拟网络可以与所有其它虚拟网络隔离,除非安全策略明确允许。

虚拟网络可以使用数据中心10网关路由器(图1中未示出)连接到物理多协议标签交换(MPLS)层3虚拟专用网络(L3VPN)和以太网虚拟专用网络(EVPN)并在其上扩展。虚拟网络也可用于实现网络功能虚拟化(NFV)和服务链。

可以使用各种机制来实现虚拟网络。例如,每个虚拟网络可以被实现为虚拟局域网(VLAN)、虚拟私有网络(VPN)等。虚拟网络也可以使用两个网络来实现——由IP结构20和交换结构14组成的物理底层网络和虚拟覆盖网络。物理底层网络的作用是提供“IP结构”,其提供从任何物理设备(服务器,存储设备,路由器或交换机)到任何其它物理设备的单播IP连通性。底层网络可以提供从网络中的任何点到网络中的任何其它点的统一的低等待时间、非阻塞、高带宽连通性。

如以下关于虚拟路由器21(被示为并且在此也被称为“vRouter21”)进一步描述的,在服务器12中运行的虚拟路由器使用它们之间的动态“隧道”网格在物理底层网络之上创建虚拟覆盖网络。例如,这些覆盖隧道可以是MPLS覆盖GRE/UDP隧道,或VXLAN隧道,或NVGRE隧道。底层物理路由器和交换机可以不存储虚拟机或其它虚拟执行元件的任何每租户状态,诸如任何媒体访问控制(MAC)地址、IP地址或策略。底层物理路由器和交换机的转发表可以例如仅包含物理服务器12的IP前缀或MAC地址。(将虚拟网络连接到物理网络的网关路由器或交换机是例外,并且可以包含租户MAC或IP地址)。

服务器12的虚拟路由器21通常包含每租户状态。例如,它们可以包含每个虚拟网络的单独转发表(路由实例)。该转发表包含虚拟机或其他虚拟执行元件(例如,容器的pod)的IP前缀(在层3覆盖的情况下)或MAC地址(在层2覆盖的情况下)。单个虚拟路由器21不需要包含整个数据中心中的所有虚拟机的所有IP前缀或所有MAC地址。给定的虚拟路由器21仅需要包含服务器12上本地存在的那些路由实例(即,其具有服务器12上存在的至少一个虚拟执行元件)。

“基于容器的”或“操作系统”虚拟化是指在单个机器上运行多个隔离系统的操作系统的虚拟化(虚拟或物理)。这样的隔离系统代表容器,例如由开源DOCKER Container应用或Coreos Rkt(“火箭”)提供的那些。像虚拟机一样,每个容器被虚拟化并且可以保持与主机和其它容器隔离。然而,与虚拟机不同,每个容器可以省略单独的操作系统,而是提供应用程序套件和应用程序专用库。一般而言,容器由主机作为隔离的用户空间实例来执行,并且可以与在主机上执行的其它容器共享操作系统和公共库。因此,容器可能比虚拟机(“VM”)需要更少的处理能力、存储和网络资源。一组一个或多个容器可以被配置为共享用于在相应的虚拟网络上通信的一个或多个虚拟网络接口。

在一些示例中,容器由其主机内核来管理,以允许对资源(CPU、存储器、块I/O、网络等)进行限制和区分优先级,而不需要启动任何虚拟机,在一些情况下使用允许对操作环境的应用程序(例如,给定容器)视图进行完全隔离的命名空间隔离功能,所述操作环境包括进程树、联网、用户标识符和已安装文件系统。在一些示例中,可以根据Linux容器(LXC)来部署容器,Linux容器是一种用于使用单个Linux内核在控制主机上运行多个隔离的Linux系统(容器)的操作系统级虚拟化方法。

服务器12为在本文由IP结构20和交换结构14表示的物理网络上操作的一个或多个虚拟网络托管虚拟网络端点。尽管主要针对基于数据中心的交换网络进行描述,但是诸如服务提供商网络7的其它物理网络可以支持一个或多个虚拟网络。

每个服务器12可以托管一个或多个虚拟执行单元,每个虚拟执行单元具有用于在物理网络中配置的一个或多个虚拟网络的至少一个虚拟网络端点。虚拟网络的虚拟网络端点可表示共享虚拟网络的虚拟网络接口的一个或多个虚拟执行元件。例如,虚拟网络端点可以是虚拟机、一组一个或多个容器(例如,pod)、或另一虚拟执行元件,诸如用于虚拟网络的第3层端点。术语“虚拟执行元件”包括为应用程序提供至少部分独立的执行环境的虚拟机、容器和其它虚拟化计算资源。术语“虚拟执行元件”还可以包括一个或多个容器的容器。虚拟执行单元可以表示应用工作负载。

如图1所示,服务器12A托管具有一个或多个容器的pod 22形式的一个虚拟网络端点。然而,在给定服务器12的硬件资源限制的情况下,服务器12可执行与实际一样多的虚拟执行元件。每个虚拟网络端点可以使用一个或多个虚拟网络接口来执行分组I/O或处理分组。例如,虚拟网络端点可使用由NIC 13A启用的一个虚拟硬件组件(例如,SR-IOV虚拟功能)来在与TOR交换机16A的一个或多个通信链路上执行分组I/O和接收/发送分组。

服务器12各自包括至少一个网络接口卡(NIC)13,NIC 13各自包括至少一个接口以通过通信链路与TOR交换机16交换分组。例如,服务器12A包括NIC 13A。任何NIC 13可提供用于虚拟化输入/输出(I/O)的一个或多个虚拟硬件组件21。用于I/O的虚拟硬件组件可以是物理NIC(“物理功能”)的虚拟化。例如,在单根I/O虚拟化(SR-IOV)中,网络接口卡(或“网络适配器”)的PCIe物理功能被虚拟化网络接口卡(或“网络适配器”)的PCIe物理功能被虚拟化以呈现一个或多个虚拟网络接口作为“虚拟功能”,以供在服务器12上执行的相应端点使用。这样,虚拟网络端点可以共享相同的PCIe物理硬件资源,并且虚拟功能是虚拟硬件组件21的示例。

作为另一示例,一个或多个服务器12可实现Virtio,可用于例如Linux操作系统的超虚拟化框架,其将仿真NIC功能提供为一种类型的虚拟硬件组件,以向虚拟网络端点提供虚拟网络接口。作为另一示例,一个或多个服务器12可实现Open vSwitch以在用于托管虚拟机的一个或多个虚拟NIC(vNIC)之间执行分布式虚拟多层交换,其中这种vNIC还可表示向虚拟网络端点提供虚拟网络接口的虚拟硬件组件的类型。在一些情况下,虚拟硬件组件是虚拟I/O(例如,NIC)组件。在一些实例中,虚拟硬件组件是SR-IOV虚拟功能。

在一些示例中,服务器12中的任何服务器可以实现Linux桥,该Linux桥仿真硬件桥并在服务器的虚拟网络接口之间或在服务器的虚拟网络接口和服务器的物理网络接口之间转发分组。对于由服务器托管的容器的docker实现,在服务器上执行的在容器之间交换分组的Linux桥或其它操作系统桥可被称为“Docker桥”。本文使用的术语“虚拟路由器”可以包括Contrail或钨结构虚拟路由器,开放vSwitch(OVS)、OVS网桥、Linux网桥、Docker网桥、或位于主机设备上并在一个或多个虚拟网络的虚拟网络端点之间执行交换、桥接或路由分组的其它设备和/或软件,其中虚拟网络端点由一个或多个服务器12托管。

任何NIC 13可包括内部设备交换机以在与NIC相关联的虚拟硬件组件之间交换数据。例如,对于具有SR-IOV能力的NIC、内部设备交换机可以是虚拟以太网桥(VEB)、用于在SR-IOV虚拟功能之间以及相应地在被配置为使用SR-IOV虚拟功能的端点之间进行交换,其中每个端点可以包括客户操作系统。内部设备交换机也可以称为NIC交换机,或者对于SR-IOV实现,称为SR-IOVNIC交换机。与NIC 13A相关联的虚拟硬件组件可与层2目的地址相关联,该层2目的地址可由NIC 13A或负责配置NIC 13A的软件进程分配。物理硬件组件(或SR-IOV实现的“物理功能”)也与第2层目的地址相关联。

一个或多个服务器12可以各自包括虚拟路由器21,虚拟路由器21为数据中心10内的相应虚拟网络执行一个或多个路由实例,以提供虚拟网络接口并在虚拟网络端点之间路由分组。每个路由实例可以与网络转发表相关联。每个路由实例可以表示用于互联网协议虚拟专用网络(IP-VPN)的虚拟路由和转发实例(VRF)。例如,由服务器12A的虚拟路由器21从数据中心10的底层物理网络架构(即,IP架构20和交换机架构14)接收的分组可以包括外部报头,以允许物理网络架构将有效载荷或“内部分组”隧穿到用于执行虚拟路由器的服务器12A的网络接口卡13A的物理网络地址。外部报头不仅可以包括服务器的网络接口卡13A的物理网络地址,还可以包括诸如vxlan标签或多协议标签交换(MPLS)标签的虚拟网络标识符,该标识符标识虚拟网络之一以及由虚拟路由器21执行的相应路由实例。内部分组包括具有目的地网络地址的内部报头,该目的地网络地址符合由虚拟网络标识符标识的虚拟网络的虚拟网络寻址空间。

虚拟路由器21终止虚拟网络覆盖隧道,并基于分组的隧道封装头部来确定所接收分组的虚拟网络,并将分组转发到分组的适当目的地虚拟网络端点。对于服务器12A,例如,对于从服务器12A所托管的虚拟网络端点(例如,pod 22)出站的每个分组,虚拟路由器21附加指示该分组的虚拟网络的隧道封装头部以生成封装或“隧道”分组,并且虚拟路由器21经由虚拟网络的重叠隧道将封装分组输出到物理目的地计算设备,诸如服务器12中的另一个。如本文所使用的,虚拟路由器21可以执行隧道端点的操作,以封装源自虚拟网络端点的内部分组,从而生成隧道分组,并且解封装隧道分组,以获得用于路由到其他虚拟网络端点的内部分组。

在一些示例中,虚拟路由器21可以是基于内核的,并且作为服务器12A的操作系统的内核的一部分来执行。

在一些示例中,虚拟路由器21可以是启用数据平面开发套件(DPDK)的虚拟路由器。在这样的示例中,虚拟路由器21使用DPDK作为数据平面。在该模式中,虚拟路由器21作为链接到DPDK库(未示出)的用户空间应用而运行。这是虚拟路由器的性能版本,并且通常由电信公司使用,其中VNF通常是基于DPDK的应用。虚拟路由器21作为DPDK虚拟路由器的性能可以实现比作为基于内核的虚拟路由器操作的虚拟路由器高十倍的吞吐量。物理接口由DPDK的轮询模式驱动器(PMD)代替Linux内核的基于中断的驱动器使用。

用户I/O(UIO)内核模块(例如vfio或uio_pci_generic)可用于将物理网络接口的寄存器展示到用户空间中,使得其可由DPDK PMD存取。当NIC 13A绑定到UIO驱动程序时,它从Linux内核空间移动到用户空间,因此不再由Linux OS管理也不可见。因此,完全管理NIC13的是DPDK应用(即本例中的虚拟路由器21A)。这包括分组轮询,分组处理和分组转发。用户分组处理步骤可以由虚拟路由器21DPDK数据平面在内核(其中内核未在图1中示出)的有限参与或不参与下执行。这种“轮询模式”的性质使得虚拟路由器21DPDK数据平面分组处理/转发与中断模式相比更加有效,特别是当分组速率高时。在分组I/O期间存在有限的或没有中断和上下文交换。DPDK vRouter示例的其他细节参见"DAYONE:CONTRAILDPDKvROUTER,"2021,KiranKN等人,Junipernetworks,Inc.,其全文在此引入作为参考。

计算基础设施8实现自动化平台,用于使服务器12上的虚拟执行元件的部署、缩放和操作自动化,以提供用于执行应用程序工作负载和服务的虚拟化基础设施。在一些示例中,平台可以是提供以容器为中心的基础设施的容器编排系统,该基础设施用于使容器的部署、缩放和操作自动化以提供以容器为中心的基础设施。在虚拟化计算基础设施的上下文中,“编排”通常是指将虚拟执行元件和/或在这种虚拟执行元件上执行的应用和服务供应,调度和管理到编排平台可用的主机服务器。容器编排可以促进容器协调,并且是指例如通过容器编排平台将容器部署,管理,缩放和配置到主机服务器。编排平台的示例实例包括Kubernetes(容器编排系统),Docker群、Mesos/Marathon、openshift、openstack、VMware和AmazonECS。

计算基础设施8的自动化平台的元件至少包括服务器12,编排器23和网络控制器24。可以使用基于集群的框架将容器部署到虚拟化环境,在所述基于集群的框架中,集群的集群主节点管理容器到集群的一个或多个集群从属节点的部署和操作。本文使用的术语“主节点”和“小节点”包括用于类似设备的不同编排平台术语,其在集群的主要管理元件和集群的主要容器主机设备之间进行区分。例如,Kubernetes平台使用术语“集群主”和“小节点”,而docker群平台指集群管理器和集群节点。

编排器23和网络控制器24可以在单独的计算设备上执行、在同一计算设备上执行。编排器23和网络控制器24中的每一个可以是在一个或多个计算设备上执行的分布式应用。编排器23和网络控制器24可以为一个或多个集群实现各自的主节点,每个集群具有由各自的服务器12实现的一个或多个小节点(也称为“计算节点”)。

通常,网络控制器24控制数据中心10结构的网络配置,以例如在虚拟网络端点之间建立用于分组化通信的一个或多个虚拟网络。网络控制器24提供逻辑和在某些情况下物理集中的控制器,以便于数据中心10内的一个或多个虚拟网络的操作。在一些示例中,网络控制器24可以响应于从指挥员23和/或管理员/操作员接收的配置输入而操作。在2013年6月5日提交的题为“PHYSICAL PATH DETERMINATION FOR VIRTUAL NETWORK PACKET FLOWS”的国际申请号PCT/US2013/044378中找到关于与数据中心10的其他设备或其他软件定义的网络结合操作的网络控制器24的示例操作的附加信息;和在2014年3月26日提交的题为“TUNNELED PACKET AGGREGATION FOR VIRTUAL NETWORKS”的美国专利申请号14/226,509,其各自通过引用并入,如同在本文中完全阐述一样。

一般而言,编排器23跨服务器12的集群来控制容器的部署、缩放和操作,并提供计算基础设施,其可包括以容器为中心的计算基础设施。编排器23以及在某些情况下,网络控制器24可以为一个或多个Kubernetes集群实现各自的集群主。作为示例,Kubernetes是提供跨公共和私有云的可移植性的容器管理平台,公共和私有云中的每一个都可以向容器管理平台提供虚拟化基础设施。下面参考图3描述Kubernetes编排系统的示例组件。

在一个示例中,pod 22是Kubernetes pod和虚拟网络端点的示例。容器是一组一个或多个逻辑相关的容器(图1中未示出),用于容器的共享存储,以及关于如何运行容器的选项。在被例示用于执行的情况下,pod备选地被称为“pod副本”。pod 22的每个容器是虚拟执行单元的示例。容器的容器总是共同位于单个服务器上,共同调度,并且在共享上下文中运行。pod的共享上下文可以是一组Linux命名空间、控制组(cgroups)和其它隔离方面。

在pod的上下文中,单独的应用可以应用另外的子隔离。通常,盒内的容器具有公共IP地址和端口空间,并且能够经由本地主机相互检测。因为它们具有共享的上下文,所以容器内的容器也可以使用进程间通信(IPC)彼此通信。IPC的示例包括系统级信号量或POSIX共享存储器。通常,作为不同容器的成员的容器具有不同的IP地址,并且在没有用于实现该特征的配置的情况下不能通过IPC进行通信。作为不同容器的成员的容器通常通过容器IP地址相互通信。

服务器12A包括用于运行诸如pod 22的容器化应用的容器平台19。容器平台19接收来自编排器23的请求,以获得并在服务器12A中托管容器。容器平台19获得并执行容器。

容器网络接口(CNI)17为虚拟网络端点配置虚拟网络接口。编排器23和容器平台19使用CNI 17来管理pod的联网,包括pod 22。例如,CNI 17创建虚拟网络接口以将pod连接到虚拟路由器21,并且使得这种pod的容器能够经由虚拟网络接口通过虚拟网络与其它虚拟网络端点通信。CNI 17可以例如将用于虚拟网络的虚拟网络接口插入pod 22中的容器的网络命名空间中,并且配置(或请求配置)用于虚拟路由器21中的虚拟网络的虚拟网络接口,使得虚拟路由器21被配置为将经由虚拟网络接口从虚拟网络接收到的分组发送到pod22的容器,并且在虚拟网络上发送经由虚拟网络接口从pod 22的容器接收到的分组。CNI17可以分配网络地址(例如,虚拟网络的虚拟IP地址),并且可以为虚拟网络接口建立路由。

在Kubernetes中,默认地,所有pod可以与所有其它pod通信而不使用网络地址转换(NAT)。在某些情况下,编排器23和网络控制器24创建由所有命名空间共享的服务虚拟网络和pod虚拟网络,从这些命名空间分别分配服务和pod网络地址。在一些情况下,在Kubernetes集群中产生的所有命名空间中的所有pod能够彼此通信,并且所有pod的网络地址可以从编排器23指定的pod子网分配。当用户为pod创建隔离命名空间时,编排器23和网络控制器24可以为新的隔离命名空间创建新的pod虚拟网络和新的共享服务虚拟网络。在Kubernetes集群中产生的隔离命名空间中的pod从新的pod虚拟网络中提取网络地址,并且这种pod的相应服务从新的服务虚拟网络中提取网络地址。

CNI 17可以表示用于服务器12A的库、插件、模块、运行时或其它可执行代码。CNI17可以至少部分地符合容器网络接口(CNI)规范或rkt联网建议。CNI 17可以表示反尾迹、开放反尾迹、Multus、Calico、cRPD、或其它CNI。可选地,CNI 17可以被称为网络插件或CNI插件或CNI实例。分离的CNI可以由例如Multus CNI调用,以便为pod 22建立不同的虚拟网络接口。

CNI 17可以由编排器23调用。出于CNI规范的目的,容器可被认为与Linux网络命名空间同义。这对应于什么单元取决于特定容器运行时实现方式:例如,在诸如rkt的应用容器规范的实现中,每个pod在唯一的网络命名空间中运行。然而,在docker中,对于每个单独的Docker容器通常存在网络命名空间。为了CNI规范的目的,网络指的是唯一可寻址并且可以在彼此之间通信的一组实体。这可以是单独的容器、机器/服务器(真实的或虚拟的)、或一些其他网络设备(例如路由器)。容器可以在概念上被添加到一个或多个网络或从一个或多个网络移除。CNI规范规定了一致性插件(“CNI插件”)的多个考虑。

Pod 22包括一个或多个容器。在一些示例中,pod 22包括容器化的DPDK工作负载,其被设计成使用DPDK来加速分组处理,例如通过使用DPDK库与其它组件交换数据。在一些示例中,虚拟路由器21可以作为容器化的DPDK工作负载来执行。

POD 22配置有虚拟网络接口26,用于与虚拟路由器21发送和接收分组。虚拟网络接口26可以是pod 22的默认接口。Pod 22可以将虚拟网络接口26实现为以太网接口(例如,命名为“eth0”),而虚拟路由器21可以将虚拟网络接口26实现为抽头接口、虚拟用户接口或其它类型的接口。

POD 22和虚拟路由器21使用虚拟网络接口26交换数据分组。虚拟网络接口26可以是DPDK接口。POD 22和虚拟路由器21可以使用vhost来建立虚拟网络接口26。Pod 22可以根据聚集模型操作。Pod 22可以使用虚拟设备,例如具有vhost用户适配器的虚拟设备,用于虚拟网络接口26的用户空间容器进程间通信。

对于pod 22,CNI 17可以结合图1所示的一个或多个22配置虚拟网络接口26。pod22的任何容器可以利用(即共享)pod 22的虚拟网络接口26。

虚拟网络接口26可以表示虚拟以太网(“veth”)对,其中该对的每一端是单独的设备(例如,Linux/Unix设备),该对的一端被分配给pod 22,而该对的一端被分配给虚拟路由器21。veth对或veth对的末端有时被称为“端口”。虚拟网络接口可以表示具有分配给pod22和虚拟路由器21的媒体访问控制(MAC)地址的MAC LAN网络,用于pod 22和虚拟路由器21的容器之间的通信。虚拟网络接口也可以被称为例如虚拟机接口(VMI)、pod接口、容器网络接口、抽头接口、veth接口或简单的网络接口(在特定上下文中)。

在图1的示例服务器12A中,pod 22是一个或多个虚拟网络中的虚拟网络端点。编排器23可以存储或以其他方式管理用于应用部署的配置数据,该配置数据指定虚拟网络并指定pod 22(或其中的一个或多个容器)是虚拟网络的虚拟网络端点。编排器23可以从例如用户,操作员/管理员或其它计算系统接收配置数据。

作为创建pod 22的过程的一部分,编排器23请求网络控制器24为一个或多个虚拟网络(在配置数据中指示)创建相应的虚拟网络接口。对于Pod 22所属的每个虚拟网络,Pod22可以具有不同的虚拟网络接口。例如,虚拟网络接口26可以是用于特定虚拟网络的虚拟网络接口。可以为其它虚拟网络配置附加的虚拟网络接口(未示出)。

网络控制器24处理该请求以生成用于转接单元22的虚拟网络接口的接口配置数据。接口配置数据可以包括容器或容器唯一标识符以及为每个虚拟网络接口指定用于配置虚拟网络接口的网络配置数据的列表或其它数据结构。虚拟网络接口的网络配置数据可以包括网络名称、分配的虚拟网络地址、MAC地址和/或域名服务器值。下面是javascript对象符号(JSON)格式的接口配置数据的例子。

网络控制器24将接口配置数据发送到服务器12A,更具体地说,在某些情况下,发送到虚拟路由器21。为了配置pod 22的虚拟网络接口,编排器23可以调用CNI 17。CNI 17从虚拟路由器21获取接口配置数据并对其进行处理。CNI 17创建在接口配置数据中指定的每个虚拟网络接口。例如,CNI 17可以将实现管理接口26的veth对的一端连接到虚拟路由器21,并且可以将同一veth对的另一端连接到pod 22,pod 22可以使用虚拟用户来实现它。

以下是用于虚拟网络接口26的盒22的示例接口配置数据。

传统的CNI插件由容器平台/运行时调用,从容器平台接收Add命令以将容器添加到单个虚拟网络,并且随后可调用这种插件以从容器/运行时接收Del(ete)命令并从虚拟网络移除容器。术语“调用”可指由处理电路系统执行的存储器中的软件组件或模块的实例化为可执行代码。

网络控制器24是用于软件定义联网(SDN)的云原生分布式网络控制器,其使用一个或多个配置节点30和一个或多个控制节点32以及一个或多个遥测节点60来实现。每个配置节点30本身可以使用一个或多个云原生组件微服务来实现。每个控制节点32本身可以使用一个或多个云原生组件微服务来实现。每个遥测节点60本身也可以使用一个或多个云原生组件微服务来实现。

在一些示例中,配置节点30可通过扩展本机编排平台来实现,以支持用于软件定义的联网的编排平台的定制资源,更具体地,通过例如配置用于虚拟执行元件的虚拟网络接口,配置连接服务器12的底层网络,配置包括用于虚拟网络的覆盖隧道和用于多播层2和层3的覆盖树的覆盖路由功能来提供到编排平台的北向接口以支持意图驱动/声明性创建和管理虚拟网络。

作为图1所示的SDN架构的一部分,网络控制器24可以是多租户感知的,并且支持用于编排平台的多租户。例如,网络控制器24可以支持基于Kubernetes角色的访问控制(RBAC)构造,本地身份访问管理(IAM)和外部IAM集成。网络控制器24还可以支持Kubernetes定义的联网构造和高级联网特征,如虚拟联网、BGPaaS、联网策略、服务链和其它电信特征。网络控制器24可以使用虚拟网络结构来支持网络隔离并且支持层3联网。

为了互连多个虚拟网络,网络控制器24可以使用(并且在底层和/或虚拟路由器21中配置)使用虚拟网络路由器(VNR)资源定义的导入和导出策略。虚拟网络路由器资源可用于通过配置用于实现SDN架构中的虚拟网络的相应路由实例之间的路由信息的导入和导出来定义虚拟网络之间的连通性。单个网络控制器24可以支持多个Kubernetes集群,因此VNR允许连接命名空间中的多个虚拟网络、不同命名空间中的虚拟网络、Kubernetes集群、以及跨Kubernetes集群。VNR还可以扩展以支持跨网络控制器24的多个实例的虚拟网络连接。或者,VNR在本文中可称为虚拟网络策略(VNP)或虚拟网络拓扑。如图1的示例所示,网络控制器24可以维护配置数据(例如,配置30)表示虚拟网络(“VN”),其表示用于通过物理底层网络和/或虚拟路由器(例如虚拟路由器21(“vRouter 21”))在数据中心10内建立VN的策略和其它配置数据。

诸如管理员等用户可与网络控制器24的UI 50交互以定义VN。在某些情况下,UI50表示便于输入定义VN的配置数据的图形用户界面(GUI)。在其它实例中,UI 50可表示命令行接口(CLI)或其它类型的接口。假设UI 50表示图形用户界面,则管理员可以通过安排表示诸如pod 22的不同pod的图形元素来定义VN,以将pod与VN相关联,其中VN中的任一个使得能够在分配给该VN的一个或多个pod之间进行通信。

在这方面,管理员可以理解Kubernetes或其它编排平台,但不能完全理解支持VN的底层基础设施。一些控制器架构,例如Contrail,可以基于与传统物理网络中的路由协议相似(如果不是基本相似)的网络协议来配置VN。例如,Contrail可以利用来自边界网关协议(BGP)的概念,边界网关协议是用于在所谓的自治系统(AS)内并且有时在AS之间传送路由信息的路由协议。

存在BGP的不同版本,诸如用于在AS内传送路由信息的内部BGP(iBGP)和用于在AS之间传送路由信息的外部BGP(eBGP)。ASE可以涉及Contrail内的项目的概念,其也类似于Kubernetes中的命名空间。在AS,项目和命名空间的每个实例中,类似项目和命名空间的AS可以表示一个或多个网络(例如,VN中的一个或多个)的集合,该集合可以共享路由信息并由此促进网络(或者,在该实例中,VN)之间的互连性。

为了便于VN、pod(或集群)、其它物理和/或虚拟组件等的管理,网络控制器24可提供遥测节点60,该遥测节点60与部署在SDN架构8内的各种遥测导出器(TE)(诸如部署在虚拟路由器21处的TE 61)对接。虽然被示为包括单个TE 62,但是网络控制器24可以在整个SDN架构8中部署TE,诸如在各种服务器12(诸如在图1的示例中示出,其中TE 61部署在虚拟路由器21内)、TOR交换机16、机架交换机18、编排器23等处。

TE,包括TE 61,可以获得不同形式的度量数据。例如,TE可获得系统日志(例如,关于信息和调试条件的系统日志消息)和对象日志(例如,表示对系统对象(诸如VM、VN、服务实例、虚拟路由器、BGP对等体、路由实例等)作出的改变的记录的对象日志消息)。TE还可以获得定义由软件组件本地收集并被发送到分析节点(可能仅按需)的活动记录的跟踪消息,与流、CPU和存储器使用等相关的统计信息,以及被定义为附有标签的键、值对的时间序列数据的度量。

TE可以经由例如UI 50将所有这种度量数据输出回遥测节点60以供查看,其中度量数据被示为MD 64A-64N(“MD 64”)。管理员或其他网络运营商/用户可以查看MD 64以更好地理解和管理SDN架构8的虚拟和/或物理组件的操作,执行SDN架构8的虚拟和/或物理组件的故障查找和/或调试等。

考虑到SDN架构8在物理底层网络、虚拟覆盖网络、虚拟网络、虚拟路由器等方面的各种抽象方面的复杂性,可以提供大量MD 64以便于更好地理解SDN架构8如何操作。在某些方面,这种MD 64可以使网络运营商(或在其它工作中,网络管理员)能够理解网络是如何操作的。该MD 64虽然对于解决网络操作的故障和获得对SDN架构8的操作的洞察是有价值的,但是在收集和传输(或换言之,源)MD 64的pod要求方面可能需要大量的网络资源,这可能消耗大量的网络资源来将MD 64从TE递送到遥测节点60,消耗基础硬件资源(例如,处理器周期、存储器、存储器总线带宽等以及用于执行TE的服务器12的相关功率)来收集MD 64。

根据本公开中描述的技术的各个方面,遥测节点60可以在SDN架构8中提供MD 64的有效收集和聚集。如上所述,网络控制器24可实现遥测节点60,其被配置为提供称为度量组(MG,示为MG62A-62N-“MG 62”)的抽象,该抽象在仅允许收集MD 64的子集方面促进低粒度和高粒度。遥测节点60可以定义一个或多个MG 62,而不是无差别地收集所有度量数据并输出所有可能的度量数据,每个MG 62可以定义所有可能的度量数据的子集(在这种情况下,它指非零子集,而不是数学抽象,其中子集可以包括零集或更多,包括所有度量)。

遥测节点60可提供应用程序接口(API)服务器,通过该API服务器接收定义MG 62的请求,MG 62可被独立地启用或禁用。换言之,每个MG 62以低粒度级别工作以启用或禁用度量数据的各个子集。在每个MG 62内,API服务器还可以接收启用或禁用由每个MG 62定义的度量数据的子集中的度量数据的单独集合(意味着,对于特定度量)的请求。虽然描述为启用或禁用特定度量的单独度量数据,但在一些示例中,API服务器可仅启用或禁用一组度量(对应于所有可用度量的特定非零子集)。网络运营商然后可以例如经由UI 50与遥测节点60对接以选择一个或多个MG 62来启用或禁用由MG 62定义的度量数据的对应子集,其中这样的MG 62可以根据各种主题(例如,边界网关协议-BGP、互联网协议版本4-IPv4、IPv6、虚拟路由器、虚拟路由器业务、多协议标签交换虚拟专用网络-MVPN等)来布置(可能分级地)。

遥测节点60可将MG 62定义为容器编排平台内的定制资源,将MG 62中的每一者转换成定义(例如,作为阵列)启用度量的配置映射(同时还可能移除重叠度量以防止MD 64的冗余收集)。遥测节点60然后可以与所识别的遥测导出器(例如TE 61)对接,以基于遥测导出器配置数据来配置TE 61,以仅收集和导出被启用来收集的度量。

在操作中,遥测节点60可处理请求(例如,经由UI 50从网络管理员接收的),通过该请求启用MG 62中的一个MG以从所定义的一个或多个逻辑相关元素导出,所述MG 62定义了来自多个不同度量的一个或多个度量的子集。同样,术语子集在此不使用严格的数学意义,其中子集可以包括零直到所有可能的元素。相反,术语子集用于指少于所有可能元素的一个或多个元素。在根据可能与特定SDN架构或使用情况相关的所定义主题(诸如上面列出的那些)来潜在地分层地按主题组织MG 62以限制MD 64的收集和导出的意义上,可以预先定义MG 62。网络控制器24的制造商或其他低级开发者可以创建MG 62,网络管理员可以经由UI 50启用或禁用MG 62(并且可以通过启用和禁用MG 62中给定的一个内的各个度量来定制)。

遥测节点60可基于启用度量组的请求将一个或多个度量的子集转换为遥测导出器配置数据(TECD)63,其配置被部署在一个或多个逻辑相关元件(例如,部署在服务器12A处的TE 61)处的遥测导出器以导出一个或多个度量的子集。TECD 62可以表示TE 61专用的配置数据,其可以跨不同的服务器12和其它底层物理资源而变化,因为这样的物理资源可以具有部署在整个SDN架构8中的各种不同TE。该请求可以标识特定的一组逻辑上相关的元素(其可以被称为符合容器化的应用平台的集群,例如Kubernetes集群),从而允许遥测节点60标识TE 61的类型并为该特定类型61生成定制的TECD 63。

由于该请求可以标识将TECD 63引导到的集群和/或pod,因此遥测节点60可以经由与该集群相关联的vRouter 21与TE 61(在该示例中)对接连接,以基于TECD 63来配置TE61以导出由所启用的一个MG 62定义的一个或多个度量的子集。在这方面,TE 61可以接收TECD 61,并基于TECD 63收集仅对应于由MG 62中的被启用的MG定义的一个或多个度量的子集的MD 64。TE 61可向遥测节点60输出仅对应于由MG 62的被启用的来定义的一个或多个度量的子集的度量数据。

遥测节点60可接收特定TE的MD 64,例如来自TE 61的MD64A,并将MD 64A存储到专用遥测数据库(为了便于说明,图1中未示出)。MD 64A可以表示代表一个或多个度量的已定义子集随时间变化的键值对的时间序列,其中度量名称(和/或标识符)作为对应值的键。网络管理员然后可以经由UI 50与遥测节点60对接以检查MD 64A。

以此方式,所述技术可通过在收集和导出MD 64时减少资源消耗来改进SDN架构8的操作。假定不是收集和导出所有度量数据,而是仅收集和导出选择子集,则TE 61可使用较少的处理器周期,存储器,存储器带宽和相关联的功率来收集与度量子集相关联的MD 64(小于所有度量)。此外,TE 61可以仅输出表示度量子集的MD 64,这导致SDN架构8的网络带宽的消耗较少,包括处理SDN架构8内的处理度量数据(其也可以被称为遥测数据)的处理资源,存储器,存储器带宽和相关联的功率。此外,接收所导出的MD 64的遥测节点60可利用较少的计算资源(同样,处理器周期,存储器,存储器带宽和相关联的功率)来处理所导出的MD64,再次假定这样的MD64仅对应于启用的MG 62。

此外,通过使用便于提取底层配置数据(例如,TECD 63)的定制资源来定义MG 64,以便为每个分类和/或局部安排的MG 62定义度量子集,网络管理员可以更容易地与遥测节点对接,以便定制MD64的集合。由于这些网络管理员可能不具有关于容器编排平台的广泛经验,所以通过MG 62提供的这种抽象可促进与之交互以定制MD 64的输出的更直观的用户界面,这可导致较少的网络管理员错误,否则将消耗计算资源(诸如上面列出的那些)。

图2是示出根据本公开的技术的SDN架构200的组件的另一视图以及更详细的框图。配置节点230、控制节点232、用户接口244和遥测节点260被示为具有它们各自的组件微服务,用于在该示例中将网络控制器24和SDN架构8实现为云原生SDN架构。每个组件微服务微服务部署到计算节点。

图2示出了被分成网络控制器24、用户接口244、计算器(服务器12)和遥测节点260特征的单个集群。配置节点230和控制节点232一起形成网络控制器24,尽管网络控制器24还可以包括用户接口350和遥测节点260,如以上在图1的示例中所示。

配置节点230可包括组件微服务API服务器300(或“Kubernetes API服务器300”——图3中未示出的对应控制器406)、定制API服务器301、定制资源控制器302和SDN控制器管理器303(有时称为“kube-管理器”或“SDN kube-管理器”,其中网络控制器24的协调平台是Kubernetes)。Contrail-kube-管理器是SDN控制器管理器303的一个示例。配置节点230扩展API服务器300与定制API服务器301的接口,以形成支持SDN架构200的数据模型的聚合层。SDN架构200的配置意图可以是定制资源。

控制节点232可以包括部件微服务控制320和核心DNS 322。控制器320执行配置分配以及路由学习和分配。

计算节点由服务器12表示。每个计算节点包括虚拟路由器代理316、虚拟路由器转发组件(vRouter)318以及可能的遥测导出器(TE)261。虚拟路由器代理316、vRouter 318和TE 261中的一个或多个或全部可以是逻辑上形成虚拟路由器(例如图1的示例中所示的虚拟路由器21)的组件微服务。通常,虚拟路由器代理316执行控制相关功能。虚拟路由器代理316从控制节点232接收配置数据,并将该配置数据转换为vRouter 318的转发信息。

虚拟路由器代理316还可以执行防火墙规则处理,为vRouter 318建立流,以及与编排插件(用于Kubernetes的CNI和用于Openstack的Nova插件)的接口。虚拟路由器代理316在计算节点上产生工作负载(Pod或VM)时生成路由,并且虚拟路由器316与控制节点232交换这样的路由,以便分配给其它计算节点(控制节点232使用BGP在控制节点232之间分配路由)。虚拟路由器代理316还在工作负载终止时撤消路由。vRouter 318可支持一个或多个转发模式,诸如内核模式、DPDK、智能卸载等。在容器架构或虚拟机工作负载的一些示例中,计算节点可以是Kubernetes工作者/小节点或Openstack新计算节点,这取决于所使用的特定编排器。TE 261可以表示图1的示例中所示的TE 61的示例,TE 61被配置为与服务器12A、vRouter 318以及可能的虚拟路由器代理316接口,以收集由TECD 63配置的度量,如上面更详细地描述的。

一个或多个可选的遥测节点260提供度量、警报、记录和业务分析。SDN架构200遥测利用云原生监控服务,诸如Prometheus、Elastic、Fluentd、kinaba栈(EFK)(和/或,在一些示例中,Opensearch和opensearch-dashboards)和InfluxTSDB。配置节点230、控制节点232、计算节点、用户接口244和分析节点(未示出)的SDN架构组件微服务可以产生遥测数据。该遥测数据可由遥测节点260的服务使用。遥测节点260可以为用户展示REST端点,并且可以支持洞察力和事件相关性。

可选用户界面244包括web用户界面(UI)306和UI后端308服务。通常,用户接口244为SDN架构组件提供配置,监视,可视化,安全和故障排除。

遥测260、用户接口244、配置节点230、控制节点232和服务器12/计算节点中的每一个都可以被认为是SDN架构200节点,因为这些节点中的每一个都是实现配置、控制或数据平面或UI和遥测节点的功能的实体。在“建立”期间配置节点缩放,并且SDN架构200支持使用诸如Kubernetes运营商的协调系统运营商来自动扩展SDN架构200节点。

在图2的示例中,遥测节点260包括API服务器262、收集器274和时序数据库(TSDB)276。通过诸如web用户界面306的用户界面,API服务器262可接收启用和/或禁用一个或多个MG 62的请求。MG62可以使用另一种标记语言(YAML)来定义,并且如上所述可以被预先配置。下面提供使用YAML定义的MG 62的部分列表。

/>

/>

/>

/>

/>

在以上列出的示例MG 62的每个实例中,存在定义apiVersion的报头,指示该YAML定义是用于度量组的类型,用于名称(例如控制器对等体)的元数据,指示导出为真的规范(“spec”),指示所收集的度量的类型的度量类型(其用于以上直接列出的示例YAML定义中的网络控制器)以及要导出的各个度量的列表。API服务器272然后可接收启用一个或多个MG 62的输出的请求,网络管理员可经由web UI 306选择该请求,导致启用一个或多个MG62的请求经由API服务器272被发送到遥测节点260。如上所述,SDN架构配置意图可以是定制资源,包括启用和/或禁用MG 62的遥测配置请求。

该请求可以配置遥测节点260以通过将导出规范设置为“真”来启用和/或禁用一个或多个MG 62。默认地,最初可以启用所有MG 62。此外,尽管在使用YAML定义的MG 62的上述示例中没有明确示出,但是各个度量可以包括度量特定导出,其允许在给定的一个MG 62中仅允许针对各个度量的导出。一旦为一个或多个MG 62启用导出,API服务器272就可与收集器274对接以生成TECD 63。TECD 63可以表示包含度量的平面列表的配置映射。

收集器274可以在生成TECD 63时移除可能存在于两个或更多个启用的MG 62中的任何冗余(或换言之,重复的)度量,这导致TECD62仅定义用于收集和导出的单个度量,而不是配置TE 261来收集和导出相同度量的两个或更多个实例。即,例如,当由MG 62A定义的度量子集与由MG 62N定义的度量子集重叠时,收集器274可以从由MG 62N定义的度量子集中去除至少一个重叠度量,以生成TECD 63。

收集器274可以基于如上所述的集群名称来确定向哪里发送TECD 63,选择与该集群相关联的TE,在这种情况下假定该集群是TE 261。收集器274可以与TE 261对接,从而将TECD 63提供给TE261。TE 261可接收TECD 261并配置各种导出器代理(图2的示例中未示出)以收集由MG 62中启用的MG 62定义的度量子集。这些代理可以周期性地(例如,每30秒)收集所标识的度量子集,将这些度量报告回TE 261。TE 261可以响应于接收度量子集,将度量子集作为密钥值对输出回来,其中密钥标识度量和包含MD 64的值。

收集器274可接收MD 64并将MD 64存储到TSDB 276。作为一个实例,TSDB 276可表示促进时间序列数据的有效存储的Prometheus服务器。收集器274可以这种周期方式继续收集MD 64。如上所述,如果所有MG 62都被启用,则MD 64可能快速增长,这可能对网络和底层物理资源造成显著的压力。允许仅允许选择MG 62的输出可以减少网络上的这种紧张,特别是当对于任何给定的使用情况可能仅需要一个或两个MG 62时。

虽然遥测节点260被示为与配置节点230分开的节点,但遥测节点260可被实现为使用各种定制资源(包括度量组定制资源)的分开的运营商。遥测节点260可充当容器编排平台(例如,Kubernetes API)的客户端,该客户端充当一个或多个定制资源(其也可包括贯穿本公开描述的度量组定制资源)的控制器,诸如配置节点230的定制资源控制器302之一。在此意义上,遥测节点260的API服务器272可扩展定制API服务器301(或形成定制API服务器301的一部分)。作为定制控制器,遥测节点260可执行图6的示例中所示的协调,包括类似于用于将当前状态调整到期望状态的调解器816的调解器,其在度量组的上下文中涉及配置TE 261以根据度量组收集和输出度量数据。

图4是示出根据本公开的技术的SDN架构的示例组件的框图。在该示例中,SDN架构400扩展并使用Kubernetes API服务器用于实现网络配置的用户意图的网络配置对象。在Kubernetes术语中,这样的配置对象被称为定制资源,并且当在SDN架构中持久保存时被简单地称为对象。配置对象主要是用户意图(例如,虚拟网络、BGPaaS、网络策略、服务链等)。

SDN架构400配置节点230可以使用Kubernetes API服务器用于配置对象。在Kubernetes术语中,这些被称为定制资源。

Kubernetes提供两种方式将定制资源添加到集群:

·定制资源定义(CRD)是简单的,并且可以在没有任何编程的情况下创建。

·API聚集需要编程,但允许对API行为的更多控制,例如如何存储数据和API版本之间的转换。

聚集API是位于充当代理的主API服务器之后的从属API服务器。这种安排被称为API聚合(AA)。对于用户,简单地显示KubernetesAPI被扩展。CRD允许用户创建新类型的资源而无需添加另一API服务器,例如添加MG 62。不管它们是如何安装的,新资源被称为定制资源(CR)以将它们与本地Kubernetes资源(例如Pod)区分开。CRD用于初始配置原型。该架构可以使用API服务器构建器库来实现聚集API。API服务器构建器是用于构建本地Kubernetes聚合扩展的库和工具的集合。

通常,Kubernetes API中的每个资源需要处理REST请求并管理对象的持久存储的代码。主Kubernetes API服务器300(用API服务器微服务器300A-300J实现)处理本地资源,并且还可以通过CRD一般地处理定制资源。聚合API 402表示扩展Kubernetes API服务器300的聚合层,以允许通过编写和部署定制API服务器301(使用定制API服务器微服务301A-301M)来提供定制资源的专用实现。主API服务器300将对定制资源的请求委托给定制API服务器301,从而使这些资源对其所有客户端可用。

这样,API服务器300(例如,kube-apiserver)接收Kubernetes配置对象,本地对象(pod、服务)和定制资源。SDN架构400的定制资源可以包括配置对象,当SDN架构400中的配置对象的预期状态被实现时,该配置对象实现SDN架构400的预期网络配置,包括将每个VNR52实现为一个或多个导入策略和/或一个或多个导出策略以及公共路由目标(和路由实例)。如上所述,在SDN架构400内实现MG 62可以导致启用和禁用TE 261对各个度量的收集和导出。

在这方面,定制资源可以对应于传统上为网络配置定义的配置模式,但是根据本公开的技术,定制资源被扩展为可通过聚合API 402来操作。这样的定制资源在本文中备选地被称为和被称为“用于SDN架构配置的定制资源”。这些可以包括VN、bgp-as-a-service(BGPaaS)、子网、虚拟路由器、服务实例、项目、物理接口、逻辑接口、节点、网络IPAM、浮动IP、告警、别名IP、访问控制列表、防火墙策略、防火墙规则、网络策略、路由目标、路由实例。用于SDN架构配置的定制资源可以对应于传统上由SDN控制器展示的配置对象,但是根据本文描述的技术,配置对象被展示为定制资源,并且与Kubernetes本地/内置资源一起被合并以支持统一意图模型,该统一意图模型由聚集API 402展示,其由Kubernetes控制器406A-406N和定制资源控制器302(在图3中示出为具有组件微服务302A-302L)实现,定制资源控制器302用于协调包括网络元件的计算基础设施的实际状态与预期状态。

给定在暴露与Kubernetes本机/内置资源一起合并的定制资源方面的统一性质,Kubernetes管理员(或其它Kubernetes用户)可以使用公共Kubernetes语义来定义MG 62,该公共Kubernetes语义然后可以被转换成详述MD 64的导入和导出的复杂策略,而不需要对遥测节点260和遥测导出器261如何操作以收集和导出MD 64的理解(如果有的话)。这样,所述技术的各个方面可以促进可能导致更少的误配置和试错的更统一的用户体验,这可以改进SDN架构400本身的执行(在利用更少的处理周期,存储器,带宽等以及相关联的功率方面)。

API服务器300的聚合层将API定制资源发送到它们相应的注册定制API服务器300。可以有多个定制API服务器/定制资源控制器来支持不同种类的定制资源。定制API服务器300处理用于SDN架构配置的定制资源,并写入到(多个)配置存储304,其可以被等化。定制API服务器300可以是主机,并展示定制资源控制器302可能需要的SDN控制器标识符分配服务。

(多个)定制资源控制器302开始应用商业逻辑以达到具有用户意图配置的用户意图。业务逻辑被实现为调解环。图6是说明根据本发明的技术的用于SDN架构配置的定制资源的定制控制器的实例的框图。定制控制器814可以表示定制资源控制器301的示例实例。在图6所示的示例中,定制控制器814可以与定制资源818相关联。定制资源818可以是用于SDN架构配置的任何定制资源。定制控制器814可以包括调解器816,调解器816包括执行协调循环的逻辑,其中定制控制器814观察834(例如,监视)定制资源818的当前状态832。响应于确定期望状态836与当前状态832不匹配,调解器816可执行动作以调整838定制资源的状态,使得当前状态832与期望状态836匹配。API服务器300可接收请求并将其中继到定制API服务器301以将定制资源818的当前状态832改变为期望状态836。

在API请求301是定制资源的创建请求的情况下,调解器816可作用于定制资源的实例数据的创建事件。调解器816可为所请求的定制资源所依赖的定制资源创建实例数据。作为示例,边缘节点定制资源可以取决于虚拟网络定制资源,虚拟接口定制资源和IP地址定制资源。在该示例中,当调解器816接收到边缘节点定制资源上的创建事件时,调解器816还可以创建边缘节点定制资源所依赖的定制资源,例如虚拟网络定制资源、虚拟接口定制资源和IP地址定制资源。

默认地,定制资源控制器302运行主动-被动模式,并且使用主选来实现一致性。当控制器pod开始时,它尝试使用指定密钥在Kubernetes中创建ConfigMap资源。如果创建成功,则pod成为主设备并开始处理对账请求;否则,它阻止试图在循环中创建ConfigMap。

由配置节点230实现的配置平面具有高可用性。配置节点230可以基于Kubernetes,包括kube-apiserver服务(例如,API服务器300)和存储后端等(例如,配置存储304)。有效地,由配置节点230实现的聚集API402用作由控制节点232实现的控制平面的前端。API服务器300的主要实现是kube-apiserver,其被设计成通过部署更多实例来水平缩放。如图所示,API服务器300的若干实例可运行以负载平衡API请求和处理。

配置存储器304可以被实现为等。ETCD是用作集群数据的Kubernetes后备存储器的一致且高可用性的密钥值存储器。

在图4的示例中,SDN架构400的服务器12各自包括编排代理420和容器化(或“云原生”)路由协议守护程序324。下面进一步详细描述SDN架构400的这些组件。

SDN控制器管理器303可以作为Kubernetes核心资源(服务,命名空间,Pod,网络策略,网络附着定义)和扩展的SDN架构资源(虚拟网络、路由实例等)之间的接口来操作。SDN控制器管理器303观察KubernetesAPI在Kubernetes核心和用于SDN架构配置的定制资源上的改变,结果,可以在相关资源上执行CRUD操作。

在一些示例中,SDN控制器管理器303是一个或多个Kubernetes定制控制器的集合。在一些示例中,在单集群或多集群部署中,SDN控制器管理器303可以在其管理的Kubernetes集群上运行。

SDN控制器管理器303监听以下用于创建、删除和更新事件的Kubernetes对象:

·Pod

·服务

·NodePort

·入口

·终点

·名称空间

·展开

·网络策略

当生成这些事件时,SDN控制器管理器303创建适当的SDN架构对象,其又被定义为用于SDN架构配置的定制资源。响应于检测到定制资源的实例上的事件,无论是否由SDN控制器管理器303和/或通过定制API服务器301来实例化,控制节点232获得用于定制资源的实例的配置数据,并配置SDN架构400中的配置对象的对应实例。

例如,SDN控制器管理器303监视Pod创建事件,并且作为响应,可以创建以下SDN架构对象:虚拟机(工作负载/pod)、VirtualMachineInterface(虚拟网络接口)和InstanceIp(IP地址)。在这种情况下,控制节点232然后可以在所选择的计算节点中实例化SDN架构对象。

作为示例,基于观察,控制节点232A可以检测由客户API服务器301A展示的第一定制资源的实例上的事件,其中第一定制资源用于配置SDN架构系统400的某些方面,并且对应于SDN架构系统400的配置对象的类型。例如,配置对象的类型可以是对应于第一定制资源的防火墙规则。响应于该事件,控制节点232A可以获得防火墙规则实例(例如,防火墙规则规范)的配置数据,并在服务器12A的虚拟路由器中提供防火墙规则。配置节点230和控制节点232可以对具有用于SDN架构的相应类型的配置对象的其他定制资源执行类似的操作,所述配置对象诸如虚拟网络、虚拟网络路由器、bgp-as-a-service(BGPaaS)、子网、虚拟路由器、服务实例、项目、物理接口、逻辑接口、节点、网络IPAM、浮动IP、告警、别名IP、访问控制列表、防火墙策略、防火墙规则、网络策略、路由目标、路由实例等。

图4是根据本公开中描述的技术的示例计算设备的框图。图4的计算设备500可以表示真实或虚拟服务器,并且可以表示任何服务器12的示例实例,并且可以被称为计算节点,主/从属节点或主机。在该示例中,计算设备500包括耦合计算设备500硬件环境的硬件组件的总线542。总线542耦合网络接口卡(NIC)530,存储盘546和一个或多个微处理器210(以下称为“微处理器510”)。NIC 530可以具有SR-IOV能力。在某些情况下,前端总线可以耦合微处理器510和存储器设备524。在一些示例中,总线542可以耦合存储器设备524,微处理器510和NIC 530。总线542可以表示高速外围组件接口(PCI)(PCIe)总线。在一些实例中,直接存储器存取(DMA)控制器可控制耦合到总线542的组件之间的DMA传送。在一些示例中,耦合到总线542的组件控制耦合到总线542的组件之间的DMA传输。

微处理器510可以包括一个或多个处理器,每个处理器包括独立的执行单元以执行符合指令集架构的指令,这些指令存储在存储介质中。执行单元可以被实现为单独的集成电路(IC),或者可以被组合在一个或多个多核处理器(或“多核”处理器)内,每个多核处理器使用单个IC(即,芯片多处理器)来实现。

磁盘546表示计算机可读存储介质,其包括以用于存储诸如处理器可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术实现的易失性和/或非易失性、可移动和/或不可移动介质。计算机可读存储介质包括但不限于随机存取存储器(RAM)、只读存储器(ROM)、EEPROM、闪存、CD-ROM、数字多功能盘(DVD)或其它光存储、磁带盒、磁带、磁盘存储或其它磁存储设备、或可用于存储所需信息并可由微处理器510访问的任何其它介质。

主存储器524包括一个或多个计算机可读存储介质,其可包括随机存取存储器(RAM),诸如各种形式的动态RAM(DRAM),例如DDR2/DDR3 SDRAM、或静态RAM(SRAM)、闪存、或可用于以指令或数据结构的形式携带或存储期望的程序代码和程序数据并可由计算机访问的任何其它形式的固定或可移动存储介质。主存储器524提供由可寻址存储器位置组成的物理地址空间。

网络接口卡(NIC)530包括被配置为使用底层物理网络的链路来交换分组的一个或多个接口532。接口532可以包括具有一个或多个网络端口的端口接口卡。NIC 530还可包括例如存储分组数据的卡上存储器。NIC 530和耦合到总线542的其它设备之间的直接存储器访问传输可以从NIC存储器读/写到NIC存储器。

存储器524、NIC 530、存储盘546和微处理器510可为包括在内核空间中执行的操作系统内核580的软件栈提供操作环境。内核580可表示例如可从微软公司获得的Linux、berkeley软件分发(BSD)、另一Unix-variant内核或Windows服务器操作系统内核。在一些实例中,操作系统可以执行管理程序和由管理程序管理的一个或多个虚拟机。示例系统管理程序包括用于Linux内核的基于内核的虚拟机(KVM),可从VMware获得的Xen、ESXi,可从微软获得的Windows Hyper-V,以及其它开放源和专有系统管理程序。术语系统管理程序可以包括虚拟机管理器(VMM)。包括内核580的操作系统为用户空间545中的一个或多个进程提供执行环境。

内核580包括使用网络接口卡530的物理驱动器525。网络接口卡530还可以实现SR-IOV,以使得能够在诸如容器529A或一个或多个虚拟机(图4中未示出)的一个或多个虚拟执行元件之间共享物理网络功能(I/O)。诸如虚拟功能之类的共享虚拟设备可以提供专用资源,使得每个虚拟执行元件可以访问NIC 530的专用资源,因此对于每个虚拟执行元件而言,该专用资源表现为专用NIC。虚拟功能可以表示与物理驱动器525所使用的物理功能以及与其它虚拟功能共享物理资源的轻量级PCIe功能。对于具有SR-IOV能力的NIC 530,根据SR-IOV标准,NIC 530可以具有数千个可用的虚拟功能,但是对于I/O密集型应用,所配置的虚拟功能的数量通常小得多。

计算设备500可以耦合到包括覆盖网络的物理网络交换结构,该覆盖网络将交换结构从物理交换机扩展到耦合到交换结构的物理服务器的软件或“虚拟”路由器,包括虚拟路由器506。虚拟路由器可以是由物理服务器(例如,图1的服务器12)执行的进程或线程或其组件,其动态地创建和管理可用于虚拟网络端点之间的通信的一个或多个虚拟网络。在一个示例中,虚拟路由器使用覆盖网络来实现每个虚拟网络,该覆盖网络提供将端点的虚拟地址与该端点在其上执行的服务器的物理地址(例如,IP地址)解耦合的能力。

每个虚拟网络可以使用其自己的寻址和安全方案,并且可以被视为与物理网络及其寻址方案正交。可以使用各种技术来通过物理网络在虚拟网络内和跨虚拟网络传输分组。本文所使用的术语“虚拟路由器”可以包括开放式vSwitch(OVS)、OVS网桥、Linux网桥、Docker网桥、或位于主机设备上并在一个或多个虚拟网络的虚拟网络端点之间执行交换、桥接或路由分组的其它设备和/或软件,其中虚拟网络端点由一个或多个服务器12来托管。在图4的示例计算设备500中,虚拟路由器506作为基于DPDK的虚拟路由器在用户空间内执行,但是在各种实现中,虚拟路由器506可以在系统管理程序、主机操作系统、主机应用或虚拟机内执行。

虚拟路由器506可以替换和包含通常用于转接单元502的Kubernetes部署的Linux桥/OVS模块的虚拟路由/桥接功能。虚拟路由器506可以为虚拟网络执行桥接(例如,E-VPN)和路由(例如,L3VPN、IP-VPN)。虚拟路由器506可以执行网络服务,例如应用安全策略、NAT、多播、镜像和负载平衡。

虚拟路由器506可以作为内核模块或作为用户空间DPDK过程来执行(虚拟路由器506在本文在用户空间545中示出)。虚拟路由器代理514也可以在用户空间中执行。在示例计算设备500中,虚拟路由器506作为基于DPDK的虚拟路由器在用户空间内执行,但是在各种实现中,虚拟路由器506可以在系统管理程序,主机操作系统,主机应用或虚拟机内执行。虚拟路由器代理514使用用于下载配置和转发信息的信道连接到网络控制器24。虚拟路由器代理514将该转发状态编程到由虚拟路由器506表示的虚拟路由器数据(或“转发”)平面。虚拟路由器506和虚拟路由器代理514可以是进程。虚拟路由器506和虚拟路由器代理514是容器化的/云原生的。

虚拟路由器506可以替换和包含通常用于转接单元502的Kubernetes部署的Linux桥/OVS模块的虚拟路由/桥接功能。虚拟路由器506可以为虚拟网络执行桥接(例如,E-VPN)和路由(例如,L3VPN、IP-VPN)。虚拟路由器506可以执行网络服务,例如应用安全策略、NAT、多播、镜像和负载平衡。

虚拟路由器506可以是多线程的并且在一个或多个处理器核上执行。虚拟路由器506可以包括多个队列。虚拟路由器506可以实现分组处理流水线。根据要应用于分组的操作,虚拟路由器代理514可以从最简单到最复杂的方式缝合流水线。虚拟路由器506可以维护多个转发基础实例。虚拟路由器506可以使用RCU(读取复制更新)锁来访问和更新表。

为了向其它计算节点或交换机发送分组,虚拟路由器506使用一个或多个物理接口532。一般而言,虚拟路由器506与诸如VM或pod502等工作负载交换覆盖分组。虚拟路由器506具有多个虚拟网络接口(例如,vif)。这些接口可以包括用于与主机操作系统交换分组的内核接口vhost0;与虚拟路由器代理514的接口pkt0,以从网络控制器获得转发状态并发送异常分组。可以有对应于一个或多个物理网络接口532的一个或多个虚拟网络接口。虚拟路由器506的其它虚拟网络接口用于与工作负载交换分组。

在虚拟路由器506(未示出)的基于内核的部署中,虚拟路由器506被安装为操作系统内的内核模块。虚拟路由器506向TCP/IP栈注册其自身,以从其想要的任何期望的操作系统接口接收分组。接口可以是键、物理、抽头(对于VM)、veth(对于容器)等。在该模式中,虚拟路由器506依赖于操作系统来发送和接收来自不同接口的分组。例如,操作系统可暴露由vhost-net驱动器支持的抽头接口以与VM通信。一旦虚拟路由器506注册了来自该抽头接口的分组,TCP/IP栈就向其发送所有分组。虚拟路由器506经由操作系统接口发送分组。此外,NIC队列(物理的或虚拟的)由操作系统处理。分组处理可以在中断模式下操作,其产生中断并且可以导致频繁的上下文切换。当存在高分组速率时,具有频繁中断和上下文切换的开销服务员可能压倒操作系统并导致差的性能。

在虚拟路由器506的基于DPDK的部署中(图5中所示),虚拟路由器506被安装为链接到DPDK库的用户空间545应用。这可以导致比基于内核的部署更快的性能,特别是在存在高分组速率的情况下。物理接口532由DPDK的轮询模式驱动器(PMD)使用,而不是由内核的基于中断的驱动器使用。物理接口532的寄存器可以被暴露到用户空间545中,以便可以被PMD访问;以此方式绑定的物理接口532不再由主机操作系统管理或对主机操作系统可见,且基于DPDK的虚拟路由器506管理物理接口532。这包括分组轮询,分组处理和分组转发。换句话说,用户分组处理步骤由虚拟路由器506DPDK数据平面执行。当分组速率高时,这种“轮询模式”的性质使得虚拟路由器506与中断模式相比DPDK数据平面分组处理/转发更加有效。与内核模式虚拟路由器506相比,在分组I/O期间存在相对较少的中断和上下文交换,并且在一些情况下可以完全避免分组I/O期间的中断和上下文交换。

通常,pod 502A-502B中的每一个可以被分配一个或多个虚拟网络地址以在相应的虚拟网络内使用,其中虚拟网络中的每一个可以与由虚拟路由器506提供的不同虚拟子网相关联。例如,可以向pod502B分配其自己的虚拟层3(L3)IP地址,用于发送和接收通信,但是pod 502B可以不知道pod 502B在其上执行的计算设备500的IP地址。虚拟网络地址因此可以不同于底层物理计算机系统(例如,计算设备500)的逻辑地址。

计算设备500包括虚拟路由器代理514,其控制计算设备500的虚拟网络的覆盖并且协调计算设备500内的数据分组的路由。通常,虚拟路由器代理514与用于虚拟化基础架构的网络控制器24通信,虚拟化基础架构生成命令以创建虚拟网络并配置网络虚拟化端点,诸如计算设备500,更具体地,虚拟路由器506,以及虚拟网络接口212。通过基于从网络控制器24接收的信息来配置虚拟路由器506,虚拟路由器代理514可以支持配置网络隔离、基于策略的安全性、网关、源网络地址转换(SNAT)、负载均衡器和用于协调的服务链能力。

在一个示例中,网络分组(例如,由虚拟网络域内的容器529A-529B生成或消耗的第三层(L3)IP分组或第二层(L2)以太网分组)可被封装在由物理网络传输的另一分组(例如,另一IP或以太网分组)中。在虚拟网络中传输的分组在本文可以被称为“内部分组”,而物理网络分组在本文可以被称为“外部分组”或“隧道分组”。虚拟路由器506可以执行虚拟网络分组在物理网络分组内的封装和/或解封装。此功能性在本文中称为隧穿且可用于创建一个或多个覆盖网络。除了IPinIP之外,可以使用的其它示例性隧道协议包括通用路由上的IP封装(GRE)、vxlan、GRE上的多协议标签交换(MPLS)、用户数据报协议(UDP)上的MPLS等。虚拟路由器506对源自/去往pod 502的任何容器的分组执行隧道封装/解封装,并且虚拟路由器506经由总线542和/或NIC 530的网桥与pod 502交换分组。

如上所述,网络控制器24可以提供逻辑集中的控制器,以便于一个或多个虚拟网络的操作。网络控制器24可以例如维护路由信息库,例如存储物理网络以及一个或多个覆盖网络的路由信息的一个或多个路由表。虚拟路由器506为各自的虚拟网络实现一个或多个虚拟路由和转发实例(VRF),例如VRF 222A,其中虚拟路由器506作为各自的隧道端点操作。通常,每个VRF存储对应的虚拟网络的转发信息,并且标识数据分组将被转发到何处以及分组是否将被封装在隧道协议中,例如利用可以包括用于虚拟网络协议栈的不同层的一个或多个报头的隧道报头。每个VRF可以包括存储虚拟网络的路由和转发信息的网络转发表。

NIC 530可接收隧道分组。虚拟路由器506处理隧道分组以从隧道封装头部确定内部分组的源和目的地端点的虚拟网络。虚拟路由器506可以剥离第2层报头和隧道封装报头以在内部仅转发内部分组。隧道封装头部可包括指示虚拟网络(例如,对应于VRF 222A的虚拟网络)的虚拟网络标识符,诸如vxlan标签或MPLS标签。VRF 222A可以包括内部分组的转发信息。例如,VRF 222A可以将内部分组的目的层3地址映射到虚拟网络接口212。作为响应,VRF 222A经由虚拟网络接口212将内部分组转发到pod 502A。

容器529A还可以将内部分组作为源虚拟网络端点。例如,容器529A可以生成去往目的地虚拟网络端点的层3内部分组,该层3内部分组由另一计算设备(即,不是计算设备500)执行或者用于另一容器。容器529A可经由附连到VRF 222A的虚拟网络接口将层3内部分组发送到虚拟路由器506。

虚拟路由器506接收内部分组和第2层报头,并为内部分组确定虚拟网络。虚拟路由器506可以使用任何上述虚拟网络接口实现技术(例如,macvlan,veth等)来确定虚拟网络。虚拟路由器506使用与用于内部分组的虚拟网络相对应的VRF 222A来生成用于内部分组的外部报头,该外部报头包括用于覆盖隧道的外部IP报头和标识虚拟网络的隧道封装报头。虚拟路由器506用外部报头封装内部分组。虚拟路由器506可以用具有与计算设备500外部的设备(例如,TOR交换机16或服务器12之一)相关联的目的地第2层地址的新的第2层报头来封装隧道分组。如果在计算设备500外部,则虚拟路由器506使用物理功能221将具有新的第2层报头的隧道分组输出到NIC 530。NIC 530在出站接口上输出分组。如果目的地是在计算设备500上执行的另一虚拟网络端点,则虚拟路由器506将分组路由到虚拟网络接口212、213中适当的一个。

在一些示例中,计算设备500的控制器(例如,图1的网络控制器24)配置每个pod502中的默认路由,以使得虚拟机224使用虚拟路由器506作为出站分组的初始下一跳。在一些示例中,NIC 530配置有一个或多个转发规则以使得从虚拟机224接收的所有分组被交换到虚拟路由器506。

pod 502A包括一个或多个应用容器529A。POD 502B包括容器化路由协议守护程序(cRPD)560的实例。容器平台588包括容器运行时590、组织代理592、服务代理593和CNI570。

容器引擎590包括可由微处理器510执行的代码。容器运行时间590可以是一个或多个计算机进程。容器引擎590以容器529A-529B的形式运行容器化的应用。容器引擎590可以表示用于管理容器的Dockert、rkt或其它容器引擎。通常,容器引擎590接收请求并管理诸如图像、容器、网络和卷的对象。图像是具有用于创建容器的指令的模板。容器是图像的可执行实例。基于来自控制器代理592的指令,容器引擎590可以获得图像并将它们实例化为pod 502A-502B中的可执行容器。

服务代理593包括可由微处理器510执行的代码。服务代理593可以是一个或多个计算机进程。服务代理593监视服务和端点对象的添加和移除,并且它维护计算设备500的网络配置,以例如使用服务来确保容器和容器之间的通信。服务代理593还可以管理iptables以捕获到服务的虚拟IP地址和端口的业务,并将业务重定向到代理支持的pod的代理端口。服务代理593可以表示Kubernetes集群的小节点的kube代理。在一些示例中,容器平台588不包括服务代理593,或者服务代理593被禁用以利于CNI 570对虚拟路由器506和pod 502的配置。

编排代理592包括可由微处理器510执行的代码。协调代理592可以是一个或多个计算机进程。编排代理592可表示用于Kubernetes集群的小节点的kubelet。编排代理592是编排器(例如,图1的编排器23)的代理,其接收容器的容器规范数据并确保这些容器由计算设备500执行。容器规范数据可以是以清单文件的形式从编排器23发送到编排代理592,或者经由命令行接口,HTTP端点或HTTP服务器间接接收。容器规范数据可以是容器的pod 502之一的pod规范(例如,描述容器的容器规范-YAML(又一标记语言)或JSON对象)。基于容器规范数据,组织代理592指示容器引擎590获得并实例化容器529的容器映像,以便由计算设备500执行容器529。

协调代理592实例化或以其它方式调用CNI 570以为每个pod 502配置一个或多个虚拟网络接口。例如,编排代理592接收pod 502A的容器规范数据,并指示容器引擎590基于pod 502A的容器规范数据创建具有容器529A的pod 502A。编排代理592还调用CNI 570来为pod 502A配置对应于VRF 222A的虚拟网络的虚拟网络接口。在该示例中,pod 502A是对应于VRF 222A的虚拟网络的虚拟网络端点。

CNI 570可以获得用于为pod 502配置虚拟网络接口的接口配置数据。虚拟路由器代理514用作虚拟网络控制平面模块,用于使网络控制器24能够配置虚拟路由器506。与管理供应、调度和管理虚拟执行元件的组织控制平面(包括用于小节点的容器平台588和主节点,例如组织器23)不同,虚拟网络控制平面(包括用于小节点的网络控制器24和虚拟路由器代理514)部分地通过小节点的虚拟路由器506管理在数据平面中实现的虚拟网络的配置。虚拟路由器代理514向CNI 570传送用于虚拟网络接口的接口配置数据,以使得编排控制平面元件(即,CNI 570)能够根据由网络控制器24确定的配置状态来配置虚拟网络接口,从而桥接编排控制平面与虚拟网络控制平面之间的间隙。此外,这可以使CNI 570能够获得用于pod的多个虚拟网络接口的接口配置数据并配置多个虚拟网络接口,这可以减少调用用于配置每个虚拟网络接口的单独CNI 570所固有的通信和资源开销。

在2022年2月1日提交的美国申请号17/649,632中描述了容器化的路由协议守护程序,该申请的全部内容在此引入作为参考。

如图4的示例中进一步所示,TE 561可以表示TE 61和/或261的一个示例。虽然在图4的示例中没有具体示出,但是虚拟路由器506,虚拟路由器代理514和TE 561可以在类似于pod 502A和502B的单独的pod中执行,其中这种pod通常可以表示虚拟路由器506的抽象,执行多个不同的容器(虚拟路由器506、虚拟路由器代理514和TE 561中的每一个对应一个容器)。TE 561可以接收TECD 63,以便配置MD 64的各个代理的收集。如上所述,TECD 63可以表示允许收集的度量的列表,该列表已经从启用各个MG 62的请求转换而来。这些代理可以周期性地(尽管这种收集可能不是周期性的)检查虚拟路由器506和底层物理资源MD 64,然后将其输出回遥测节点60/260。

图5A是说明根据本发明的技术的用于使用SDN架构的底层网络和覆盖网络配置的控制/路由平面的框图。图5B是示出根据本公开的技术的使用底层网络中配置的隧道来连接pod的配置的虚拟网络的框图。

用于SDN架构的网络控制器24可以使用分布式或集中式路由平面架构。SDN架构可以使用容器化路由协议守护程序(进程)。

从网络信令的角度来看,路由平面可以根据分布式模型工作,其中cRPD在集群中的每个计算节点上运行。这本质上意味着智能被构建到计算节点中并且涉及每个节点处的复杂配置。该模型中的路由反射器(RR)可以不进行智能路由决策,而是用作中继来反映节点之间的路由。分布式容器路由协议守护程序(cRPD)是可以使用的路由协议过程,其中每个计算节点运行其自己的路由守护程序实例。同时,集中式cRPD主实例可以充当RR以中继计算节点之间的路由信息。路由和配置智能分布在中心位置具有RR的节点上。

备选地,路由平面可以根据更集中的模型工作,其中网络控制器的组件集中运行并吸收处理配置信息,构建网络拓扑以及将转发平面编程到虚拟路由器中所需的智能。虚拟路由器代理是处理由网络控制器编程的信息的本地代理。该设计导致有助于在计算节点处所需的更有限的智能,并且趋向于导致更简单的配置状态。

集中式控制平面提供以下方面:

·允许代理路由框架更简单和更轻。BGP的复杂性和限制对于代理是隐藏的。代理不需要理解诸如路由标识符,路由目标等概念。

代理仅交换前缀并相应地构建其转发信息。

·控制节点可以进行多于路由。它们建立在虚拟网络概念上,并且可以使用路由复制和重新发起来生成新路由(例如,以支持诸如服务链和VN间路由等特征,以及其他使用情况)。

·构建用于最佳广播和多播转发的BUM树。

注意,控制平面对于某些方面具有分布式特性。作为支持分布式功能的控制平面,它允许每个本地虚拟路由器代理发布其本地路由,并在需要知道的基础上预订配置。

从工具POV中考虑控制平面设计并在它们最适合的地方适当地使用手头工具是有意义的。考虑contrail-bgp和cRPD的利弊集合。

以下功能可以由cRPD或网络控制器24的控制节点提供。

路由守护程序/进程

控制节点和cRPD都可以充当实现不同协议并具有在转发平面中编程路由信息的能力的路由守护程序。

CRPD利用包括内部网关协议(IGP)(例如,中间系统到中间系统(IS-IS))、BGP-LU、BGP-CT、SR-MPLS/SRv6、双向转发检测(BFD)、路径计算元件协议(PCEP)等的丰富路由栈来实现路由协议。它还可以被部署为提供仅控制平面服务,诸如路由反射器,并且由于这些能力而在互联网路由用例中流行。

控制节点232也实现路由协议,但主要是基于BGP的。控制节点232理解覆盖网络。控制节点232在覆盖虚拟化中提供丰富的特征集,并且迎合SDN使用情况。诸如虚拟化(使用虚拟网络的抽象)和服务链的覆盖特征在电信和云提供商中非常流行。cRPD在某些情况下可能不包括对这种覆盖功能的支持。然而,CRPD的丰富特征集为底层网络提供了强有力的支持。

网络编排/自动化

路由功能只是控制节点232的一部分。覆盖网络的整体部分是编排。除了提供覆盖路由之外,控制节点232还有助于对组织功能进行建模并提供网络自动化。控制节点232的协调能力的中心是使用包括上述VNR的基于虚拟网络(和相关对象)的抽象来建模网络虚拟化的能力。控制节点232与配置节点230对接以将配置信息中继到控制平面和数据平面。控制节点232还帮助建立多播层2和层3的覆盖树。例如,控制节点可以构建它用来实现这一点的集群的虚拟拓扑。cRPD通常不包括这种编排能力。

高可用性和水平可缩放性

控制节点设计更加集中,而cRPD更加分布式。存在运行在每个计算节点上的cRPD工作节点。另一方面,控制节点232不在计算上运行,并且甚至可以在远程集群上运行(即,分离并且在一些情况下在地理上远离工作负载集群)。控制节点232还为HA提供水平可缩放性并以活动-活动模式运行。计算负载在控制节点232之间共享。另一方面,cRPD通常不提供水平可缩放性。控制节点232和cRPD都可以向HA提供宽限重启,并且可以允许无头模式下的数据平面操作,其中即使控制平面重启,虚拟路由器也可以运行。

控制平面应该不仅仅是路由守护程序。它应该支持覆盖路由选择和网络编排/自动化,而cRPD在管理底层路由选择中作为路由选择协议是好的。然而,cRPD通常缺乏网络编排能力,并且不能为覆盖路由提供强有力的支持。

因此,在一些示例中,SDN架构可以在计算节点上具有cRPD,如图5A-图5B所示。图5A示出了SDN架构700,其可以表示SDN架构8或400的示例实现。在SDN架构700中,cRPD 324在计算节点上运行并提供到转发平面的底层路由,同时运行提供编排和覆盖服务的控制节点232的集中(和水平可缩放)集合。在一些示例中,可以使用默认网关来代替在计算节点上运行cRPD 324。

计算节点上的cRPD 324通过使用可以是gRPC接口的接口540与虚拟路由器代理514交互来提供到转发平面的丰富底层路由。虚拟路由器代理接口可以允许编程路由,配置用于覆盖的虚拟网络接口,以及配置虚拟路由器506。这在美国申请号17/649,632中有更详细的描述。同时,一个或多个控制节点232作为提供覆盖服务的独立pod运行。SDN架构700因此可以获得由控制节点232提供的丰富的覆盖和编排以及由cRPD 324在计算节点上进行的到补充控制节点232的现代底层路由。单独的cRPD控制器720可用于配置cRPD 324。CRPD控制器720可以是设备/元件管理系统、网络管理系统、编排器、用户接口/CLI或其它控制器。cRPD 324运行路由协议并与包括其它cRPD324的路由器交换路由协议消息。每个cRPD 324可以是容器化的路由协议过程,并且有效地作为路由器控制平面的仅软件版本来操作。

由cRPD 324提供的增强的底层路由可替换转发平面处的默认网关,并为可支持的用例提供丰富的路由栈。在不使用cRPD 324的一些示例中,虚拟路由器506将依赖于用于底层路由的默认网关。在一些示例中,作为底层路由过程的cRPD 324将被限制为仅编程具有控制平面路由信息的默认inet(6).0结构。在这些示例中,非默认覆盖VRF可由控制节点232编程。

在此上下文中,遥测导出器561可执行以收集MD 64并将其导出到遥测节点560,遥测节点560可表示遥测节点60/260的示例。遥测导出器561可与在虚拟路由器506中执行的代理(为了便于说明,未示出)和底层物理硬件接口,以收集MD 64形式的一个或多个度量。遥测导出器561可以根据TECD 63被配置为仅收集比所有度量小的特定度量,从而以上面更详细描述的方式改进SDN架构700的操作。

图7是更详细地示出图1-图5A的遥测节点和遥测导出器的框图。在图7的示例中,遥测节点760可表示遥测节点60和260的示例,而遥测导出器761可表示遥测导出器61、261和561的示例。

遥测节点760可将多个定制资源定义为符合容器化编排平台(例如,Kubernetes)的MG 762。遥测节点760可以通过YAML以上面更详细描述的方式定义这些MG 762。该SDN架构的网络管理员或其他用户可以经由UI 50(如图1所示)与遥测节点760交互,以发出启用和/或禁用一个或多个MG 762的请求。遥测节点760可以将启用的MG 762简化为启用的度量的配置映射,表示为TECD 763。遥测节点760可与遥测导出器761对接,以基于TECD763配置遥测导出器761,以仅导出由TECD 763表示的配置映射定义的启用的度量子集。

遥测导出器761然后可基于TECD 763配置启用度量的活动列表,该活动列表将导出功能780限制为仅导出由表示为TECD763的配置映射指定的启用度量。导出功能780可以与各种代理对接(为了便于说明,再次未示出),以配置那些代理,以仅收集由配置映射指定的度量。导出功能780然后可以仅接收由TECD 763指定的启用度量的度量数据,这又导致导出功能780仅以诸如MD 64的度量数据的形式导出启用度量。

换句话说,系统为CN2收集数百个遥测度量。大量的度量可以影响CN2部署的性能和可扩展性,并且可以影响网络性能。示例性度量包括数据平面相关度量(字节/分组)、资源(CPU、存储器、存储)利用、路由信息——在对等体之间交换的路由、以及许多其它度量。

然而,本发明中所描述的技术的各种方面提供度量组,所述度量组是向用户提供用以界定遥测度量的集合且用以选择性地启用/停用此类集合的导出的运行时灵活性的新定制资源。将对度量组的改变推送到已经为该度量组选择的每个集群(默认地,度量组可以应用于所有集群)。遥测操作员(operator)(如上所述,其可表示定制资源控制器302中的特定一个)实现用于度量组定制资源的调解器,并从要应用于所选集群的一个或多个度量组中构建配置映射(可称为ConfigMap)。然后,遥测操作员可以将ConfigMap推入集群中。度量代理(例如,计算节点或控制器中的路由器代理)监视配置映射改变。

虽然所有度量可以由度量代理在本地收集和存储,但是度量代理根据由ConfigMap指示的启用度量组来过滤度量,并且仅向收集器输出属于启用度量组的那些度量。

因为度量组是定制资源,所以可以通过Kubernetes API服务器来动态地创建,访问,修改或删除度量组的实例,Kubernetes API服务器通过调解来自动地处理配置(如上所述)。

在一些示例中,一些度量组可由网络控制器提供商,网络提供商或其他实体预定义。客户可以可选地选择某些预定义的组,用于在安装或使用API期间启用/禁用。示例性的预定义组可以包括用于控制器-info、bgpaas、控制器-xmpp、控制器-peer、ipv4、ipv6、evpn、ermvpn、mvpn、vroute-rinfo、vrouter-cpu、vrouter-mem、vrouter-traffic、vrouter-ipv6、vrouter-vmi(接口)的预定义组,每个预定义组具有相关的相关度量集。

这样,度量组提供高级抽象,使用户免除配置多个不同的CN2组件(vrouter、controller、cn2-kube–manager、cRPD等)。遥测操作员维护度量和度量组的数据模型以及各种度量与其相应的相关组件的单独关联。客户可以简单地通过配置高级度量组来操纵导出哪些度量,并且遥测操作员基于数据模型在不同组件上适当地应用改变。客户还可以将不同范围的度量选择应用于系统内的不同实体(例如,不同集群)。如果客户经历了关于一个工作负载集群的问题并且想要来自该集群的更详细的度量,则客户可以为一个或多个度量组选择集群以允许用户这样做。此外,客户可以选择可能与所经历的问题相关的适当度量组(例如,controller-xmpp或evpn)。因此,想要低级细节的客户可以启用/选择需要故障检修的特定实体的度量组,而不是启用板上的详细度量。

图8是示出图1的示例中所示的计算机架构在执行本文所述技术的各方面时的操作的流程图。如图8的示例中所示,遥测节点60可处理请求(例如,经由UI 50从网络管理员接收),通过该请求启用MG 62中的一个MG以从所定义的一个或多个逻辑相关元素导出,该MG定义来自多个不同度量中的一个或多个度量的子集(1800)。同样,术语子集在此不使用严格的数学意义,其中子集可以包括零直到所有可能的元素。相反,术语子集用于指少于所有可能元素的一个或多个元素。在根据可能与特定SDN架构或使用情况相关的所定义主题(诸如上面列出的那些)来潜在地分层地按主题组织MG 62以限制MD 64的收集和导出的意义上,可以预先定义MG 62。网络控制器24的制造商或其他低级开发者可以创建MG 62,网络管理员可以经由UI 50启用或禁用MG 62(并且可以通过启用和禁用MG 62中给定的一个内的各个度量来定制)。

遥测节点60可基于用以启用度量组的请求将一个或多个度量的子集转换为遥测导出器配置数据(TECD)63,其配置被部署在一个或多个逻辑相关元件(例如,部署在服务器12A处的TE 61)处的遥测导出器以导出一个或多个度量的子集(1802)。TECD 62可以表示TE61专用的配置数据,其可以跨不同的服务器12和其它底层物理资源而变化,因为这样的物理资源可以具有部署在整个SDN架构8中的各种不同TE。该请求可以标识特定的一组逻辑上相关的元素(其可以被称为符合容器化的应用平台的集群,例如Kubernetes集群),从而允许遥测节点60标识TE 61的类型并为该特定类型61生成定制的TECD 63。

由于该请求可以标识将TECD 63引导到的集群和/或pod,因此遥测节点60可以经由与该集群相关联的vRouter 21与TE 61(在该示例中)对接,以基于TECD 63来配置TE 61以导出由MG 62中的启用的MG所定义的一个或多个度量的子集(1804)。在这方面,TE 61可以接收TECD 61,并基于TECD 63收集仅对应于由MG 62(1806、1808)中被启用的MG所定义的一个或多个度量的子集的MD 64。TE61可向遥测节点60输出仅对应于由启用的MG 62定义的一个或多个度量的子集的度量数据(1810)。

遥测节点60可接收特定TE的MD 64,例如来自TE 61的MD64A,并将MD 64A存储到专用遥测数据库(为了便于说明,图1中未示出)。MD 64A可以表示代表一个或多个度量的已定义子集随时间变化的键值对的时间序列,其中度量名称(和/或标识符)作为对应值的键。网络管理员然后可以经由UI 50与遥测节点60对接以检查MD 64A。

以此方式,所述技术的各个方面可实现以下实例。

示例1。一种用于软件定义联网(SDN)架构系统的网络控制器,所述网络控制器包括:处理电路系统;遥测节点,其被配置为由所述处理电路系统执行,所述遥测节点被配置为:处理请求,通过所述请求启用度量组以从形成集群的所定义的一个或多个计算节点导出,所述度量组定义来自多个度量的一个或多个度量的子集;基于用以启用所述度量组的所述请求,将所述一个或多个度量的所述子集转换为遥测导出器配置数据,所述遥测导出器配置数据配置部署在所述计算节点处的遥测导出器以导出所述一个或多个度量的所述子集;以及与所述遥测导出器对接,以基于所述遥测导出器配置数据来配置所述遥测导出器以导出所述一个或多个度量的子集。

示例2。如示例1所述的网络控制器,其中所述请求根据容器化编排平台来定义定制资源。

示例3。如示例1和2的任何组合所述的网络控制器,其中所述请求包括第一请求,通过所述第一请求来创建第一度量组,所述第一度量组定义来自所述多个度量的所述一个或多个度量的第一子集,其中所述遥测节点被配置为接收第二请求,通过所述第二请求来启用第二度量组,所述第二度量组定义来自所述多个度量的所述一个或多个度量的第二子集,所述一个或多个度量的所述第二子集与所述一个或多个度量的所述第一子集重叠所述多个度量的至少一个重叠度量,其中所述遥测节点被配置为:在被配置为转换所述一个或多个度量的所述子集时,从所述一个或多个度量的所述第二子集移除所述至少一个重叠度量以生成所述遥测导出器配置数据。

示例4。如示例1至3的任何组合所述的网络控制器,其中容器编排平台实现所述网络控制器。

示例5。如示例1至4的任何组合所述的网络控制器,其中所述度量组标识所述集群的所述计算节点,从所述集群的所述计算节点导出所述一个或多个度量的所述子集作为集群名称,并且其中所述遥测节点在被配置为转换所述度量组时被配置为生成用于与所述集群名称相关联的遥测导出器的遥测导出器配置数据。

示例6。如示例1至5的任何组合所述的网络控制器,其中所述遥测节点还被配置为接收表示由所述遥测导出器配置数据定义的一个或多个度量的子集的遥测数据。

示例7。如示例1至6的任意组合所述的网络控制器,其中所述遥测节点还被配置为接收遥测数据,所述遥测数据仅表示由所述遥测导出器配置数据定义的所述一个或多个度量的子集,所述一个或多个度量的子集包括少于全部的所述多个度量。

示例8。如示例1至7的任何组合所述的网络控制器,其中所述一个或多个度量的子集包括少于全部的所述多个度量。

示例9。如示例1至8的任何组合所述的网络控制器,其中所述一个或多个度量的子集包括边界网关协议(BGP)度量,对等度量,互联网协议(IP)版本4(IPv4)度量,IP版本6(IPv6)度量,以太网虚拟专用网络(EVPN)度量和虚拟路由器(vRouter)度量中的一个。

示例10。一种软件定义联网(SDN)架构系统中的计算节点,包括:处理电路系统,被配置为执行形成所述SDN架构系统的一部分的所述计算节点,其中所述计算节点被配置为支持虚拟网络路由器并执行遥测导出器,其中所述遥测导出器被配置为:接收定义要导出到由网络控制器执行的遥测节点的多个度量中的一个或多个度量的子集的遥测导出器配置数据;基于所述遥测导出器配置数据收集仅对应于所述多个度量中的所述一个或多个度量的子集的度量数据;以及向所述遥测节点输出仅对应于所述多个度量中的所述一个或多个度量的子集的度量数据。

示例11。示例10的运算节点,其中所述运算节点支持容器化应用平台的执行。

示例12。如示例10和11的任何组合所述的计算节点,其中容器编排平台实现所述网络控制器。

示例13。如示例10至12的任何组合所述的计算节点,其中一个或多个度量的子集包括以下一项:边界网关协议度量、对等度量、互联网协议(IP)版本4(v4)度量、IP版本6(IPv6)度量、以太网虚拟专用网络(EVPN)度量和虚拟路由器(vRouter)度量。

示例14。示例10至13的任何组合的运算节点,其中所述SDN架构系统包括被配置为由所述网络控制器执行的遥测节点,所述遥测节点被配置为:处理请求,通过所述请求启用度量组以从形成集群的所定义的一个或多个计算节点导出,所述度量组定义来自所述多个度量的所述一个或多个度量的子集,,所述一个或多个计算节点包括被配置为执行所述遥测导出器的所述计算节点;基于用以启用所述度量组的所述请求,将所述一个或多个度量的所述子集转换为所述遥测导出器配置数据,所述遥测导出器配置数据配置所述遥测导出器以导出所述一个或多个度量的所述子集;以及与所述遥测导出器对接,以基于所述遥测导出器配置数据来配置所述遥测导出器以导出所述一个或多个度量的子集。

示例15。如示例14所述的计算节点,其中所述请求根据容器编排平台来定义定制资源。

示例16。如示例14和15的任意组合所述的计算节点,其中所述请求包括第一请求,通过该第一请求启用定义所述多个度量中的所述一个或多个度量的第一子集的第一度量组,其中所述遥测节点被配置为接收第二请求,通过该第二请求创建定义所述多个度量中的所述一个或多个度量的第二子集的第二度量组,所述一个或多个度量的第二子集与所述一个或多个度量的第一子集重叠所述多个度量的至少一个重叠度量,并且其中所述遥测节点被配置为:当被配置为转换所述一个或多个度量的子集时,从所述一个或多个度量的所述第二子集移除所述至少一个重叠度量以生成所述遥测导出器配置数据。

示例17。如示例14至16的任何组合所述的计算节点,其中容器编排平台实现所述网络控制器。

示例18。如示例14至17的任何组合所述的计算节点,其中所述度量组标识集群,从所述集群导出所述一个或多个度量的子集作为集群名称,并且其中所述遥测节点在被配置为转换所述度量组时被配置为生成用于与所述集群名称相关联的遥测导出器的遥测导出器配置数据。

示例19。如示例14至18的任何组合所述的计算节点,其中所述遥测节点还被配置为接收表示由所述遥测导出器配置数据定义的所述一个或多个度量的子集的度量数据。

示例20。如示例14至19的任何组合所述的计算节点,其中所述遥测节点还被配置为接收仅表示由所述遥测导出器配置数据定义的所述一个或多个度量的子集的度量数据,所述一个或多个度量的子集包括少于全部的所述多个度量。

示例21。如示例14至20的任何组合所述的计算节点,其中所述一个或多个度量的子集包括少于全部的所述多个度量。

示例22。如示例14至21的任意组合所述的计算节点,其中所述一个或多个度量的子集包括以下一项:边界网关协议度量、对等度量、互联网协议(IP)版本4(IPv4)度量、IP版本6(IPv6)度量、以太网虚拟专用网络(EVPN)度量和虚拟路由器(vRouter)度量。

示例23。一种用于软件定义联网(SDN)架构系统的方法,所述方法包括:处理请求,通过所述请求启用度量组以从形成集群的所定义的一个或多个计算节点导出,所述度量组定义来自多个度量的一个或多个度量的子集;基于用以启用所述度量组的所述请求,将所述一个或多个度量的所述子集转换为遥测导出器配置数据,所述遥测导出器配置数据配置被部署在所述一个或多个计算节点处的遥测导出器以导出所述一个或多个度量的所述子集;以及与所述遥测导出器对接,以基于所述遥测导出器配置数据来配置所述遥测导出器以导出所述一个或多个度量的所述子集。

示例24。如示例23所述的方法,其中所述请求根据容器化编排平台来定义定制资源。

示例25。如示例23和24的任何组合所述的方法,其中所述请求包括第一请求,通过该第一请求创建定义所述多个度量中的所述一个或多个度量的第一子集的第一度量组,其中所述方法还包括接收第二请求,通过该第二请求启用定义所述多个度量中的所述一个或多个度量的第二子集的第二度量组,所述一个或多个度量的第二子集与所述一个或多个度量的第一子集重叠所述多个度量的至少一个重叠度量。并且其中转换所述一个或多个度量的所述子集包括从所述一个或多个度量的所述第二子集中移除所述至少一个重叠度量以生成所述遥测导出器配置数据。

示例26。如示例23至25的任何组合所述的方法,其中容器编排平台实现所述网络控制器。

示例27。如示例23至26的任何组合所述的方法,其中所述度量组标识所述集群的计算节点,从所述计算节点导出所述一个或多个度量的子集作为集群名称,并且其中转换所述度量组包括为与所述集群名称相关联的所述遥测导出器生成所述遥测导出器配置数据。

示例28。如示例23至27的任意组合所述的方法,还包括接收表示由所述遥测导出器配置数据定义的所述一个或多个度量的子集的遥测数据。

示例29。如示例23至28的任意组合所述的方法,还包括接收仅表示由所述遥测导出器配置数据定义的所述一个或多个度量的子集的遥测数据,所述一个或多个度量的子集包括少于全部的所述多个度量。

示例30。如示例23至29的任何组合所述的方法,其中所述一个或多个度量的子集包括少于全部的所述多个度量。

示例31。如示例23至30的任何组合所述的方法,其中所述一个或多个度量的子集包括以下一项:边界网关协议(BGP)度量、对等度量、互联网协议(IP)版本4(IPv4)度量、IP版本6(IPv6)度量、以太网虚拟专用网络(EVPN)度量和虚拟路由器(vRouter)度量。

示例32。一种用于软件定义联网(SDN)架构系统的方法,包括:接收定义要导出到由网络控制器执行的遥测节点的多个度量中的一个或多个度量的子集的遥测导出器配置数据;基于所述遥测导出器配置数据收集仅对应于所述多个度量中的所述一个或多个度量的子集的度量数据;以及向所述遥测节点输出仅对应于所述多个度量中的所述一个或多个度量的子集的度量数据。

示例33。如示例32所述的方法,其中所述方法由支持容器化应用平台的执行的计算节点来执行。

示例34。如示例32和33的任意组合所述的方法,其中容器编排平台实现所述网络控制器。

示例35。如示例32至34的任意组合所述的方法,其中所述一个或多个度量的子集包括以下一项:边界网关协议度量、对等度量、互联网协议(IP)版本4(v4)度量、IP版本6(IPv6)度量、以太网虚拟专用网络(EVPN)度量和虚拟路由器(vRouter)度量。

示例36。示例32至35的任一组合的方法,其中所述SDN架构系统包括被配置为由所述网络控制器执行的遥测节点,所述遥测节点被配置为:处理请求,通过所述请求启用度量组以从形成集群的所定义的一个或多个计算节点导出,所述度量组定义来自所述多个度量的所述一个或多个度量的子集,,所述一个或多个计算节点包括被配置为执行所述遥测导出器的所述计算节点;基于用以启用所述度量组的所述请求,将所述一个或多个度量的所述子集转换为所述遥测导出器配置数据,所述遥测导出器配置数据配置所述遥测导出器以导出所述一个或多个度量的所述子集;以及与所述遥测导出器对接,以基于所述遥测导出器配置数据来配置所述遥测导出器以导出所述一个或多个度量的子集。

示例37。如示例36所述的方法,其中所述请求根据容器编排平台来定义定制资源。

示例38。如示例36和37的任何组合所述的方法,其中所述请求包括第一请求,通过该第一请求启用定义所述多个度量中的所述一个或多个度量的第一子集的第一度量组,其中所述遥测节点被配置为接收第二请求,通过该第二请求创建定义所述多个度量中的所述一个或多个度量的第二子集的第二度量组,所述一个或多个度量的第二子集与所述一个或多个度量的第一子集重叠所述多个度量的至少一个重叠度量,并且其中所述遥测节点被配置为,当被配置为转换所述一个或多个度量的子集时,从所述一个或多个度量的所述第二子集中移除所述至少一个重叠度量以生成所述遥测导出器配置数据。

示例39。如示例36至38的任意组合所述的方法,其中容器编排平台实现所述网络控制器。

示例40。如示例36至39的任何组合所述的方法,其中所述度量组标识所述集群,从所述集群导出所述一个或多个度量的子集作为集群名称,并且其中所述遥测节点在被配置为转换所述度量组时生成用于与所述集群名称相关联的遥测导出器的遥测导出器配置数据。

示例41。如示例36至40的任何组合所述的方法,其中所述遥测节点还被配置为接收表示由所述遥测导出器配置数据定义的所述一个或多个度量的子集的度量数据。

示例42。如示例36至41的任何组合所述的方法,其中所述遥测节点还被配置为接收仅表示由所述遥测导出器配置数据定义的所述一个或多个度量的子集的度量数据,所述一个或多个度量的子集包括少于全部的所述多个度量。

示例43。根据示例36至42的任何组合所述的方法,其中所述一个或多个度量的子集包括少于全部的所述多个度量。

示例44。如示例36至43的任意组合所述的方法,其中所述一个或多个度量的子集包括以下一项:边界网关协议度量、对等度量、互联网协议(IP)版本4(IPv4)度量、IP版本6(IPv6)度量、以太网虚拟专用网络(EVPN)度量和虚拟路由器(vRouter)度量。

示例45。一种软件定义联网(SDN)架构系统,所述SDN架构系统包括:被配置为执行遥测节点的网络控制器,所述遥测节点被配置为:处理请求,通过所述请求启用度量组以从所定义的一个或多个逻辑相关元素导出,所述度量组定义来自多个度量的一个或多个度量的子集;基于用以启用所述度量组的所述请求,将所述一个或多个度量的所述子集转换为遥测导出器配置数据,所述遥测导出器配置数据配置部署在所述一个或多个逻辑相关元件处的遥测导出器以导出所述一个或多个度量的所述子集;以及与所述遥测导出器对接,以基于所述遥测导出器配置数据来配置所述遥测导出器以导出所述一个或多个度量的子集;以及逻辑元件,其被配置为支持虚拟网络路由器并执行遥测导出器,其中所述遥测导出器被配置为:接收遥测导出器配置数据;基于所述遥测导出器配置数据收集仅对应于所述多个度量中的所述一个或多个度量的子集的度量数据;以及向所述遥测节点输出仅对应于所述多个度量中的所述一个或多个度量的子集的度量数据。

示例46。一种其上存储有指令的非暂态计算机可读存储介质,所述指令在被执行时使得一个或多个处理器执行示例23至31或示例32至44的任何组合的方法。

本文所描述的技术可实施于硬件、软件、固件或其任何组合中。描述为模块、单元或组件的各种特征可一起实施于集成逻辑装置中,或单独实施为离散但可互操作的逻辑装置或其它硬件装置。在一些情况下,电子电路的各种特征可以实现为一个或多个集成电路器件,例如集成电路芯片或芯片组。

如果以硬件实施,那么本发明可针对例如处理器或集成电路装置(例如集成电路芯片或芯片组)的设备。备选地或附加地,如果在软件或固件中实现,则所述技术可以至少部分地由包括指令的计算机可读数据存储介质来实现,所述指令在被执行时使得处理器执行上述方法中的一个或多个。例如,计算机可读数据存储介质可以存储由处理器执行的这些指令。

计算机可读介质可以形成计算机程序产品的一部分,该计算机程序产品可以包括包装材料。计算机可读介质可以包括计算机数据存储介质,诸如随机存取存储器(RAM)、只读存储器(ROM)、非易失性随机存取存储器(NVRAM)、电可擦除可编程只读存储器(EEPROM)、闪存、磁或光数据存储介质等。在一些示例中,制品可包括一个或多个计算机可读存储介质。

在一些示例中,计算机可读存储介质可以包括非暂态介质。术语“非瞬态”可以表示存储介质不包含在载波或传播信号中。在某些实例中,非暂态存储介质可存储可随时间改变的数据(例如,在RAM或高速缓冲存储器中)。

代码或指令可以是由处理电路系统执行的软件和/或固件,所述处理电路系统包括一个或多个处理器,例如一个或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它等效集成或离散逻辑电路。因此,如本文中所使用的术语“处理器”可指前述结构中的任一者或适合于实施本文中所描述的技术的任何其它结构。另外,在一些方面中,可在软件模块或硬件模块内提供本发明中所描述的功能性。

相关技术
  • 用于多个集群的云本地软件定义网络架构
  • 用于云本地软件定义网络架构的虚拟网络路由器
技术分类

06120116511636