一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

部署到计算节点的容器的隔离的数据接口的制作方法

2022-09-03 00:39:12 来源:中国专利 TAG:
部署到计算节点的容器的隔离的数据接口1.本技术要求2022年2月23日提交的美国专利申请号17/652,250、2021年9月9日提交的美国临时专利申请号63/242,434、2021年3月1日提交的美国临时专利申请号202141008464、以及2021年3月1日提交的印度临时专利申请号202141008548的优先权;每个申请的全部内容通过引用结合在此。
技术领域
:2.本公开涉及一种虚拟化计算基础设施,更具体而言,涉及将容器部署到虚拟化计算基础设施。
背景技术
::3.在典型的云数据中心环境中,存在大量提供计算和/或存储容量以运行各种应用的互连服务器。例如,数据中心可以包括为订阅客户(即数据中心的客户)托管应用程序和服务的设施。例如,数据中心可以托管所有基础设施装备,例如连网和存储系统、冗余电源和环境控制。在典型的数据中心中,存储系统和应用服务器的集群通过由一层或多层物理网络交换机和路由器提供的高速交换结构互连。更复杂的数据中心提供遍布全球的基础设施,以及位于各种物理托管设施中的订阅客户支持装备。4.虚拟化数据中心正在成为现代信息技术(it)基础设施的核心基础。特别地,现代数据中心已经广泛利用虚拟化环境,其中在物理计算设备的底层计算平台上部署和执行虚拟主机,本文也称为虚拟执行元件,例如虚拟机或容器。5.数据中心的虚拟化可以提供若干优点。优势之一是虚拟化可以显著提高效率。随着每个物理cpu具有大量内核的多核微处理器架构的出现,底层物理计算设备(即服务器)变得越来越强大,虚拟化变得更加容易和高效。第二个优势是虚拟化提供了对计算基础设施的重要控制。随着物理计算资源成为可替代资源,例如在基于云的计算环境中,计算基础设施的供应和管理变得更加容易。因此,除了虚拟化提供的效率和增加的投资回报(roi)之外,企业it人员通常更喜欢数据中心中的虚拟化计算集群,因为它们具有管理优势。6.容器化是一种基于操作系统级虚拟化的虚拟化方案。容器是一种轻量级、可移植的执行元件,适用于彼此隔离和与主机隔离的应用程序。由于容器并未与主机硬件计算环境紧密耦合,因此应用程序可以绑定到容器映像并作为单个轻量级包在支持底层容器架构的任何主机或虚拟主机上执行。因此,容器解决了如何使软件在不同的计算环境中工作的问题。容器提供了从一个计算环境到另一个虚拟或物理环境一致运行的承诺。7.由于容器固有的轻量级特性,单个主机通常可以支持比传统虚拟机(vm)多得多的容器实例。容器通常寿命短暂,可以比vm更有效地创建和移动,并且它们也可以作为逻辑相关元件的组进行管理(对于某些编排平台,有时称为“豆荚(pod)”,例如kubernetes)。这些容器特性会影响对容器连网解决方案的要求:网络应该是敏捷和可扩展的。vm、容器和裸机服务器可能需要在同一个计算环境中共存,并在不同的应用程序部署之间实现通信。对于用于部署容器化应用程序的多种编排平台,容器网络也应该是不确定的。8.管理部署和用于应用执行的基础设施的计算基础设施可能涉及两个主要角色:(1)编排——用于跨主机集群自动部署、扩展和操作应用程序并提供计算基础设施,其可以包括以容器为中心的计算基础设施;和(2)网络管理——用于在网络基础设施中创建虚拟网络,以实现在虚拟执行环境(例如容器或vm)上运行的应用程序之间以及在遗留(例如物理)环境中运行的应用程序之间的分组通信。软件定义连网有助于网络管理。技术实现要素:9.一般而言,描述了用于部署一个或多个容器(“豆荚”)的逻辑相关组的技术,所述容器支持以数据平面为中心的软件框架,例如,使用数据平面开发套件(dpdk)的本机应用程序实施的容器(本文称为“dpdk容器”或“dpdk应用程序”),以在虚拟路由器和豆荚之间的数据信道上实现分组通信。在一些示例中,虚拟路由器是基于dpdk的虚拟路由器,使得源自或去往容器的分组可以在用户空间中的容器和虚拟路由器之间交换,绕过托管豆荚和虚拟路由器的计算装置的内核。10.容器网络接口模块或插件(cni)是应用容器的联网解决方案,是容器编排系统使用的运行时可执行程序,用于将网络接口配置到容器网络命名空间中,并配置托管容器的计算装置(“主机”),该容器可以是豆荚的成员。该计算装置也可以被称为“计算节点”或“服务器”。cni还将网络地址(例如,ip地址)分配给网络接口,并且还可以添加与该接口相关的路由,例如,用于默认网关和一个或多个名称服务器的路由。11.如本文所述,用于在计算节点内部署豆荚和配置豆荚和虚拟路由器的控制流程可以包括以将豆荚相互隔离的方式在豆荚和虚拟路由器之间创建高速数据路径。例如,dpdk容器可以使用vhost/virtio库来创建以太网接口,以便与主机或者更具体地说虚拟路由器进行通信。如果主机为与虚拟路由器通信的多个豆荚的通信提供公共文件系统资源,则任何豆荚都可以看到和访问在其他豆荚和虚拟路由器之间交换的数据。这些数据可能包括数据包、配置文件或其他敏感信息。为了便于隔离,主机为每个豆荚提供对单独的专用文件系统资源的访问,用于虚拟路由器和豆荚之间的通信。也就是说,每个豆荚可以使用其分配的文件系统资源来与虚拟路由器通信,但是不具有对为此目的分配给其他豆荚的类似文件系统资源的可见性或其他访问。每个豆荚使用其分配的文件系统资源,可以与虚拟路由器交换控制协议消息,以在虚拟路由器和豆荚之间建立高速数据路径,用于高吞吐量分组转发和处理。在一些示例中,所分配的文件系统资源是作为用于创建和管理高速数据路径的控制信道操作的unix域套接字的套接字文件或目录。高速数据路径可以是使用dpdk的加速数据路径。12.该技术可提供一个或多个技术优势。例如,本文描述的技术可以便于在同一计算节点上执行的豆荚之间隔离。用于在计算节点的多个豆荚和虚拟路由器之间创建相应的控制信道的现有方案包括向所有豆荚提供相同的套接字目录路径(例如,/var/run/vrouter),作为文件夹,来存储套接字文件,然后,每个容器安装相同的套接字目录路径来访问套接字文件,用于绑定用户空间中的接口,以创建其与虚拟路由器的控制信道,用于创建高速数据路径。因此,每个豆荚可能具有对每个其它豆荚的控制信道的可见性。相比之下,所描述的技术导致每个豆荚具有不同的文件系统资源来支持控制信道,并防止豆荚访问其他豆荚的控制信道,否则这将允许豆荚访问其他豆荚的配置文件或其他控制或管理信息。作为另一示例,在cni从虚拟路由器获得豆荚标识符的示例中,通过避免从cni到编排系统的一些通信,这些技术可以减少编排系统上的积压,该积压可能是由于大量工作负载被并发地部署到多个不同的计算节点而引起的。13.在一个示例中,一种计算装置包括:虚拟路由器,包括处理电路并且被配置为在包括计算装置的计算基础设施中实现虚拟网络,以使得能够在经由虚拟网络连接的虚拟网络端点之间进行通信。计算装置包括豆荚,包括容器化应用,其中,所述虚拟路由器和所述豆荚被配置为使用文件系统资源创建unix域套接字,所述文件系统资源可由所述豆荚和所述虚拟路由器访问并且不可由部署到计算装置的任何其他豆荚访问。14.在一个示例中,一种方法包括:由编排器获得豆荚的豆荚规范,其中,所述豆荚规范包括用于生成套接字描述数据的数据,所述套接字描述数据指示当豆荚被部署到计算装置时豆荚用于创建unix域套接字的文件系统资源,所述文件系统资源可由所述豆荚和所述虚拟路由器访问并且不可由部署到计算装置的任何其他豆荚访问;并且由编排器向在计算装置上执行的编排代理输出豆荚规范,其中,所述编排代理是编排器的代理。15.在一个示例中,一种方法包括:由虚拟路由器和在计算装置上执行的豆荚使用套接字目录创建unix域套接字,所述套接字目录可由所述豆荚和所述虚拟路由器访问并且不可由部署到计算装置的任何其他豆荚访问;由虚拟路由器在包括计算装置的计算基础设施中实现虚拟网络,以使得能够在经由虚拟网络连接的虚拟网络端点之间进行通信;并且由虚拟路由器和豆荚使用unix域套接字交换虚拟路由器和豆荚之间的数据平面开发套件(dpdk)接口的控制通信。16.在附图和以下说明中阐述本公开的一个或多个示例的细节。根据说明书和附图以及权利要求书,其他特征、目的和优点将变得显而易见。附图说明17.图1是可以实现本文描述的技术示例的示例计算基础设施的框图;18.图2是根据本公开中描述的技术的促进豆荚之间的数据信道隔离的示例计算装置的框图;19.图3是根据本公开中描述的技术的作为虚拟化计算基础设施的控制器和编排器的示例操作的示例计算装置的框图;20.图4是示出根据本公开中描述的一些方面的用于在豆荚和虚拟路由器之间创建数据接口的一个示例工作流程的流程图;21.图5是示出具有基于dpdk的虚拟路由器和容器化dpdk工作负载的示例计算装置的框图,其具有根据本公开的一个或多个方面建立的接口;22.图6是根据此处描述的技术的计算装置组件的示例操作模式的流程图;23.图7是示出根据此处描述的技术的编排器的示例操作模式的流程图。24.在整个说明书和附图中,相同的参考符号表示相同的元件。具体实施方式25.图1是示出示例计算基础设施8的框图,其中,可以实现本文描述的技术的示例。一般而言,数据中心10为具有通过服务供应商网络7耦合到数据中心的一个或多个客户网络的客户站点11(示出为“客户11”)提供应用和服务的操作环境。数据中心10可以,例如,托管基础设施装备,例如连网和存储系统、冗余电源和环境控制。服务供应商网络7耦合到公共网络15,公共网络15可以表示由其他供应商管理的一个或多个网络,并且因此可以形成大规模公共网络基础设施例如互联网的一部分。公共网络15可以表示例如局域网(lan)、广域网(wan)、互联网、虚拟lan(vlan)、企业lan、第3层虚拟专用网络(vpn)、由运营服务供应商网络7、企业ip网络或其某种组合的服务供应商运营的互联网协议(ip)内联网。26.虽然客户站点11和公共网络15主要被示出和描述为服务供应商网络7的边缘网络,但是在一些示例中,客户站点11和公共网络15中的一个或多个可以是数据中心10或另一个数据中心内的租户网络。例如,数据中心10可以托管多个租户(客户),每个租户(客户)都与一个或多个虚拟专用网络(vpn)相关联,该一个或多个虚拟专用网络可以实现客户站点11之一。27.服务供应商网络7提供到附加的客户站点11、数据中心10和公共网络15的基于数据包的连接。服务供应商网络7可以表示由服务供应商拥有和运营以互连多个网络的网络。服务供应商网络7可以实现多协议标签交换(mpls)转发并且在这种情况下可以被称为mpls网络或mpls骨干网。在一些情况下,服务供应商网络7表示多个互连的自治系统,例如互联网,其提供来自一个或多个服务供应商的服务。28.在一些示例中,数据中心10可以表示许多地理上分布的网络数据中心之一。如图1所示,数据中心10可以是为客户提供网络服务的设施。服务供应商的客户可以是企业、政府等集体实体,也可以是个人。例如,网络数据中心可以为多个企业和最终用户托管web服务。其他示例性服务可以包括数据存储、虚拟专用网络、流量工程、文件服务、数据挖掘、科学或超级计算等。尽管被示为服务供应商网络7的单独边缘网络,但是数据中心10的元件例如一个或多个物理网络功能(pnf)或虚拟化网络功能(vnf)可以包括在服务供应商网络7核心内。29.在该示例中,数据中心10包括经由由一层或多层物理网络交换机和路由器提供的交换结构14互连的存储和/或计算服务器(或“节点”),具有被描绘为耦合到架顶式交换机16a-16n的服务器12a-12x(在此为“服务器12”)。服务器12是计算设备并且在本文中也可以被称为“主机”或“主机设备”。尽管在图1中仅详细地示出了耦合到tor交换机16a的服务器12a,数据中心10可以包括耦合到数据中心10的其他tor交换机16的许多附加服务器。30.所示示例中的交换结构14包括耦合到机箱(或“脊”或“核心”)交换机18a-18m(统称为“机箱交换机18”)分布层的互连的架顶(tor)(或其他“叶”)交换机16a-16n(统称为“tor交换机16”)。尽管未示出,但数据中心10还可包括例如一个或多个非边缘交换机、路由器、集线器、网关、安全设备例如防火墙、入侵检测和/或入侵防御设备、服务器、计算机终端、笔记本电脑、打印机、数据库、无线移动设备(例如蜂窝电话或个人数字助理)、无线接入点、网桥、电缆调制解调器、应用程序加速器或其他网络设备。数据中心10还可以包括一个或多个物理网络功能(pnf),例如物理防火墙、负载平衡器、路由器、路由反射器、宽带网络网关(bng)、移动核心网络元件,以及其他pnf。31.在该示例中,tor交换机16和机箱交换机18为服务器12提供到ip结构20和服务供应商网络7的冗余(多宿主)连接。机箱交换机18聚合通信流并提供tor交换机16之间的连接。交换机16可以是提供第2层(mac)和/或第3层(例如ip)路由和/或交换功能的网络设备。tor交换机16和机箱交换机18均可以包括一个或多个处理器和存储器并且可以执行一个或多个软件过程。机箱交换机18耦合到ip结构20,其可以执行第3层路由以通过服务供应商网络7在数据中心10和客户站点11之间路由网络流量。数据中心10的交换架构仅仅是示例。例如,其他交换架构可能具有更多或更少的交换层。ip结构20可以包括一个或多个网关路由器。32.术语“分组流”、“通信流”或简称为“流”是指源自特定源设备或端点并发送到特定目的地设备或端点的一组数据包。例如,单个分组流可以由5元组标识:《源网络地址、目的网络地址、源端口、目的端口、协议》。这个五元组通常标识接收到的数据包对应的分组流。n元组是指从5元组中抽取的任何n项。例如,数据包的二元组可以指数据包的《源网络地址、目的网络地址》或《源网络地址、源端口》的组合。33.服务器12可以各自表示计算服务器或存储服务器。例如,服务器12中的每一个可以表示计算设备,诸如基于x86处理器的服务器,其被配置为根据本文描述的技术进行操作。服务器12可以为nfv架构提供网络功能虚拟化基础设施(nfvi)。34.通过虚拟化服务器的资源以提供在服务器上执行的一个或多个进程(应用)之间的隔离,服务器12中的任何服务器都可以配置有虚拟执行元件。“基于管理程序”或“硬件级”或“平台”虚拟化是指创建虚拟机,每个虚拟机都包括用于执行一个或多个进程的客户操作系统。通常,虚拟机提供用于在隔离的虚拟环境中执行应用程序的虚拟化/客户操作系统。由于虚拟机是从主机服务器的物理硬件虚拟化的,因此正在执行的应用程序与主机和其他虚拟机的硬件是隔离的。每个虚拟机可以配置有一个或多个虚拟网络接口,用于在相应的虚拟网络上进行通信。35.虚拟网络是在物理网络之上实现的逻辑构造。虚拟网络可用于替代基于vlan的隔离并在虚拟化数据中心(例如数据中心10)中提供多租户。每个租户或应用程序可以具有一个或多个虚拟网络。除非安全策略明确允许,否则每个虚拟网络都可以与所有其他虚拟网络隔离。36.虚拟网络可以使用数据中心10网关路由器(图1中未示出)连接到并跨物理多协议标签交换(mpls)第3层虚拟专用网络(l3vpn)和以太网虚拟专用网络(evpn)网络。虚拟网络还可用于实现网络功能虚拟化(nfv)和服务链。37.可以使用多种机制来实现虚拟网络。例如,每个虚拟网络都可以实现为虚拟局域网(vlan)、虚拟专用网络(vpn)等。虚拟网络也可以使用两个网络来实现——由ip结构20和交换结构14构成的物理底层网络和虚拟覆盖网络。物理底层网络的作用是提供一个“ip结构”,它提供从任何物理设备(服务器、存储设备、路由器或交换机)到任何其他物理设备的单播ip连接。底层网络可以提供从网络中的任何点到网络中的任何其他点的统一的低延迟、无阻塞、高带宽连接。38.如以下关于虚拟路由器21a进一步描述的,在服务器12中运行的虚拟路由器使用它们之间的动态“隧道”网在物理底层网络之上创建虚拟覆盖网络。例如,这些覆盖隧道可以是mplsovergre/udp隧道、vxlan隧道或nvgre隧道。底层物理路由器和交换机可能不存储任何针对虚拟机或其他虚拟执行元件的租户状态,例如任何媒体访问控制(mac)地址、ip地址或策略。底层物理路由器和交换机的转发表例如,可能仅包含物理服务器12的ip前缀或mac地址。(将虚拟网络连接到物理网络的网关路由器或交换机是一个例外,且可能包含租户mac或ip地址。)39.服务器12的虚拟路由器21通常包含每个租户的状态。例如,它们可能包含每个虚拟网络的单独转发表(路由实例)。该转发表包含虚拟机或其他虚拟执行元件(例如容器的豆荚)的ip前缀(在第3层覆盖的情况下)或mac地址(在第2层覆盖的情况下)。没有单个虚拟路由器21需要包含整个数据中心中所有虚拟机的所有ip前缀或所有mac地址。给定的虚拟路由器21只需要包含那些本地存在于服务器12上的路由实例(即,在服务器12上存在至少一个虚拟执行元件)。40.网络控制器24或物理网关路由器(或交换机)的控制面节点之间的控制面协议可以是bgp(也可以是用于管理的netconf)。这是相同的控制平面协议,也可用于mplsl3vpn和mplsevpn。例如,网络控制器24和虚拟路由器21之间的协议可以基于xmpp。[0041]“基于容器的”或“操作系统”虚拟化是指操作系统的虚拟化以在单个机器(虚拟或物理)上运行多个隔离系统。此类隔离系统表示容器,例如由开源docker容器应用程序或coreosrkt(“rocket”)提供的容器。就像虚拟机一样,每个容器都是虚拟化的,并且可以与主机和其他容器保持隔离。但是,与虚拟机不同的是,每个容器可能会省略单独的操作系统,并且替代地提供应用程序套件和特定于应用程序的库。通常,容器由主机作为隔离的用户空间实例执行,并且可以与在主机上执行的其他容器共享操作系统和公共库。因此,容器可能需要比虚拟机更少的处理能力、存储和网络资源。一组一个或多个容器可以被配置为共享一个或多个虚拟网络接口以在相应的虚拟网络上进行通信。[0042]在一些示例中,容器由它们的主机内核管理以允许资源(cpu、内存、块i/o、网络等)的限制和优先级排列,而无需启动任何虚拟机,在一些情况下使用命名空间隔离功能,允许完全隔离应用程序(例如,给定容器)的操作环境视图,包括进程树、网络、用户标识符和安装的文件系统。在一些示例中,容器可以根据linux容器(lxc)进行部署,这是一种操作系统级虚拟化方法,用于使用单个linux内核在控制主机上运行多个隔离的linux系统(容器)。[0043]服务器12托管一个或多个虚拟网络的虚拟网络端点,这些虚拟网络在本文由ip结构20和交换结构14表示的物理网络上运行。虽然主要描述基于数据中心的交换网络,但是其他物理网络,例如服务供应商网络7,可能构成一个或多个虚拟网络的基础。[0044]服务器12中的每一个可以托管一个或多个虚拟执行元件,每个虚拟执行元件具有用于在物理网络中配置的一个或多个虚拟网络的至少一个虚拟网络端点。虚拟网络的虚拟网络端点可以表示共享虚拟网络的虚拟网络接口的一个或多个虚拟执行元件。例如,虚拟网络端点可以是虚拟机、一组一个或多个容器(例如,豆荚)或另一个其他虚拟执行元件,例如虚拟网络的第3层端点。术语“虚拟执行元件”包括为应用程序提供至少部分独立的执行环境的虚拟机、容器和其他虚拟化计算资源。术语“虚拟执行元件”还可以包含一个或多个容器的豆荚。如图1所示,服务器12a以具有一个或多个容器的豆荚22a的形式托管一个虚拟网络端点。然而,服务器12可以在给定服务器12的硬件资源限制的情况下执行尽可能多的虚拟执行元件。每个虚拟网络端点可以使用一个或多个虚拟网络接口来执行分组i/o或以其他方式处理分组。例如,虚拟网络端点可以使用由nic13a启用的一个虚拟硬件组件(例如,sr-iov虚拟功能)来执行分组i/o并在与tor交换机16a的一个或多个通信链路上接收/发送分组。下面描述了虚拟网络接口的其他示例。[0045]每个服务器12包括至少一个网络接口卡(nic)13,每个网络接口卡包括至少一个接口以通过通信链路与tor交换机16交换分组。例如,服务器12a包括nic13a。nic13中的任一个可以提供一个或多个虚拟硬件组件21用于虚拟化输入/输出(i/o)。用于i/o的虚拟硬件组件可以是物理nic(“物理功能”)的虚拟化。例如,在外围组件接口特别兴趣组sr-iov规范中描述的单根i/o虚拟化(sr-iov)中,网络接口卡(或“网络适配器”)的pcie物理功能被虚拟化以将一个或多个虚拟网络接口呈现为供在服务器12上执行的各个端点使用的“虚拟功能”。这样,虚拟网络端点可以共享相同的pcie物理硬件资源并且虚拟功能是虚拟硬件组件21的示例。作为另一示例,一个或多个服务器12可以实现virtio,一种可用的半虚拟化框架,例如用于linux操作系统,其提供模拟的nic功能作为一种虚拟硬件组件,以向虚拟网络端点提供虚拟网络接口。作为另一示例,一个或多个服务器12可以实施openvswitch以在用于托管虚拟机的一个或多个虚拟nic(vnic)之间执行分布式虚拟多层交换,其中,这样的vnic也可以表示一种虚拟硬件组件,为虚拟网络端点提供虚拟网络接口。在某些情况下,虚拟硬件组件是虚拟i/o(例如,nic)组件。在某些情况下,虚拟硬件组件是sr-iov虚拟功能。在一些示例中,服务器12中的任何服务器可以实现模拟硬件桥并在服务器的虚拟网络接口之间或服务器的虚拟网络接口和服务器的物理网络接口之间转发分组的linux网桥。对于由服务器、linux网桥或其他操作系统网桥托管的容器的docker实现,在服务器上执行,在容器之间交换数据包可称为“docker网桥”。本文使用的术语“虚拟路由器”可包括contrail或tungsten结构虚拟路由器、开放式vswitch(ovs)、ovs网桥、linux网桥、docker网桥或位于主机设备上并在一个或多个虚拟网络的虚拟网络端点之间执行交换、桥接或路由数据包的其他设备和/或软件,其中虚拟网络端点由一个或多个服务器12托管。[0046]nic13中的任一个可以包括内部设备交换机以在与nic相关联的虚拟硬件组件之间切换数据。例如,对于支持sr-iov的nic,内部设备交换机可以是虚拟以太网桥(veb),用于在sr-iov虚拟功能之间以及相应地在配置为使用sr-iov虚拟功能的端点之间进行切换,其中,每个端点可能包括一个客户操作系统。内部设备交换机也可以称为nic交换机,或者对于sr-iov实现,称为sr-iovnic交换机。与nic13a相关联的虚拟硬件组件可以与第2层目的地地址相关联,其可以由nic13a或负责配置nic13a的软件进程分配。物理硬件组件(或用于sr-iov实现的“物理功能”)也与第2层目标地址相关联。[0047]一个或多个服务器12可以各自包括虚拟路由器21,该虚拟路由器21为数据中心10内的对应虚拟网络执行一个或多个路由实例以提供虚拟网络接口并在虚拟网络端点之间路由分组。每个路由实例可以与网络转发表相关联。每个路由实例可以表示用于互联网协议-虚拟专用网络(ip-vpn)的虚拟路由和转发实例(vrf)。由服务器12a的虚拟路由器21a(示出为“dpdkvrouter21a”)例如,从数据中心10(即,ip结构20和交换结构14)的底层物理网络结构接收的数据包可以包括外部报头以允许物理网络结构将有效载荷或“内部数据包”隧道传送到用于执行虚拟路由器的服务器12a的网络接口卡13a的物理网络地址。外部报头不仅可以包括服务器的网络接口卡13a的物理网络地址,还可以包括虚拟网络标识符,例如识别虚拟网络之一的vxlan标签或多协议标签交换(mpls)标签以及由虚拟路由器21a执行的相应路由实例。内部分组包括具有目的地网络地址的内部报头,该目的地网络地址符合由虚拟网络标识符标识的虚拟网络的虚拟网络寻址空间。[0048]虚拟路由器21终止虚拟网络覆盖隧道并基于数据包的隧道封装报头确定接收到的数据包的虚拟网络,并将数据包转发到数据包的适当目的地虚拟网络端点。例如,对于服务器12a,对于从服务器12a托管的虚拟网络端点(例如,豆荚22a)出站的每个数据包,虚拟路由器21a附加隧道封装标头,指示数据包的虚拟网络以生成封装或““隧道”数据包,并且虚拟路由器21a经由用于虚拟网络的覆盖隧道将封装的数据包输出到物理目的地计算设备,例如服务器12中的另一台。如本文所使用的,虚拟路由器21可以执行隧道端点的操作封装来自虚拟网络端点的内部数据包以生成隧道数据包并解封装隧道数据包以获得内部数据包进而路由到其他虚拟网络端点。[0049]虚拟路由器21a是支持数据平面开发套件(dpdk)的虚拟路由器。也就是说,虚拟路由器21a使用dpdk作为数据平面。在这种模式下,虚拟路由器21a作为链接到dpdk库(未示出)的用户空间应用运行。这是虚拟路由器的性能版本,通常由电信公司使用,其中,vnf通常是基于dpdk的应用程序。作为dpdk虚拟路由器的虚拟路由器21a的性能可以实现比作为基于内核的虚拟路由器操作的虚拟路由器高十倍的吞吐量。dpdk的轮询模式驱动程序(pmd)使用物理接口,而不是linux内核的基于中断的驱动程序。[0050]用户i/o(uio)内核模块(例如,vfio或uio_pci_generic)可用于将物理网络接口的寄存器暴露在用户空间中,以便dpdkpmd可访问。当nic13a绑定到uio驱动程序时,从linux内核空间移动到用户空间,因此不再受linux操作系统管理,也不可见。因此,dpdk应用程序(即,本示例中的虚拟路由器21a)完全管理nic13。这包括分组轮询、分组处理和分组转发。用户分组处理步骤可以由虚拟路由器21adpdk数据平面在内核(图1中未示出内核)有限参与或不参与的情况下执行。与中断模式相比,这种“轮询模式”的性质使得虚拟路由器21adpdk数据平面分组处理/转发更加有效,特别是当分组速率高时。在分组i/o期间,中断和上下文切换有限或没有。[0051]dpdkvrouter示例的额外细节见junipernetworks公司的kirankn等人的“dayone:contraildpdkvrouter”2021,其全文通过引用结合于此。[0052]计算基础设施8实现自动化平台,用于跨服务器12自动化虚拟执行元件的部署、缩放和操作,以提供用于执行应用程序工作负载和服务的虚拟化基础设施。在一些示例中,该平台可以是容器编排平台,其提供以容器为中心的基础设施,用于自动化容器的部署、缩放和操作,以提供以容器为中心的基础设施。在虚拟化计算基础设施的上下文中,“编排”通常指向编排平台可用的主机服务器供应、调度和管理虚拟执行元件和/或在这种虚拟执行元件上执行的应用和服务。具体而言,容器编排允许容器协调,并且指例如通过容器编排平台对主机服务器的容器的部署、管理、缩放和配置。编排平台的示例包括kubernetes、dockerswarm、mesos/marathon、openshift、openstack、vmware和amazonecs。[0053]计算基础设施8的自动化平台的元件至少包括服务器12、编排器23和网络控制器24。可以使用基于集群的框架将容器部署到虚拟化环境,其中,集群的集群主节点管理容器到集群的一个或多个集群附属节点的部署和操作。本文使用的术语“主节点”和“附属节点”包含用于类似装置的不同编排平台术语,其区分主要是集群的管理元件和主要是集群的容器主机装置。例如,kubernetes平台使用术语“集群主节点”和“附属节点”,而dockerswarm平台是指集群管理器和集群节点。[0054]编排器23和网络控制器24可在单独的计算装置上执行,也可在同一计算装置上执行。编排器23和网络控制器24中的每一个都可以是在一个或多个计算装置上执行的分布式应用。编排器23和网络控制器24可以为一个或多个集群实现相应的主节点,每个集群具有由相应的服务器12实现的一个或多个附属节点(也称为“计算节点”)。[0055]一般而言,网络控制器24控制数据中心10结构的网络配置,例如,为虚拟网络端点之间的分组通信建立一个或多个虚拟网络。网络控制器24提供逻辑上并且在某些情况下物理上集中的控制器,用于促进数据中心10内的一个或多个虚拟网络的操作。在一些示例中,网络控制器24可以响应于从编排器23和/或管理员/操作员接收的配置输入而操作。关于结合数据中心10的其他装置或其他软件定义的网络操作的网络控制器24的额外信息见2013年6月5日提交的题为“physicalpathdeterminationforvirtualnetworkpacketflows”的国际申请号pct/us2013/044378一见2014年3月26日提交的题为“tunneledpacketaggregationforvirtualnetworks”的美国专利申请号14/226,509,每个申请通过引用结合于此,如同在此完全阐述一样。[0056]一般而言,编排器23控制服务器12集群中的容器的部署、缩放和操作,并提供计算基础设施,可以包括以容器为中心的计算基础设施。编排器23以及在某些情况下网络控制器24可以为一个或多个kubernetes集群实现相应的集群主机。作为一个示例,kubernetes是提供跨公共云和私有云的可移植性的容器管理平台,公共云和私有云都可以为容器管理平台提供虚拟化基础设施。下面参考图3描述kubernetes编排系统的示例组件。[0057]在一个示例中,豆荚22a是kubernetespod并且是虚拟网络端点的示例。豆荚是一组一个或多个逻辑相关的容器(图1中未示出)、容器的共享存储以及关于如何运行容器的选项。在为执行而实例化的情况下,豆荚也可以称为“豆荚副本”。豆荚22a的每个容器是虚拟执行元件的示例。豆荚的容器始终位于单个服务器上,共同调度并在共享上下文中运行。豆荚的共享上下文可能是一组linux命名空间、cgroup和其他隔离方面。在豆荚的上下文中,单个应用程序可能会应用进一步的子隔离。通常,豆荚中的容器具有公共ip地址和端口空间,并且能够通过localhost相互检测。由于它们具有共享上下文,因此豆荚内的容器也使用进程间通信(ipc)相互通信。ipc的示例包括systemv信号量或posix共享内存。通常,属于不同豆荚的容器具有不同的ip地址,并且在没有启用此功能的配置的情况下无法通过ipc进行通信。作为不同豆荚成员的容器通常通过豆荚ip地址相互通信。[0058]服务器12a包括用于运行容器化应用程序的容器平台19a,例如豆荚22a的那些应用程序。容器平台19a从编排器23接收请求以在服务器12a中获得和托管容器。容器平台19a获取并执行容器。[0059]容器平台19a包括为虚拟网络端点配置虚拟网络接口的容器网络接口(cni)17a。编排器23和容器平台19a使用cni17a来管理包括豆荚22a在内的豆荚的网络。例如,cni17a创建虚拟网络接口,以将豆荚连接到虚拟路由器21a,并使得这种豆荚的容器能够经由虚拟网络接口通过虚拟网络与其他虚拟网络端点通信。例如,cni17a可以将虚拟网络的虚拟网络接口插入到豆荚22a中的容器的网络命名空间中,并且配置(或请求配置)虚拟路由器21a中的虚拟网络的虚拟网络接口,使得虚拟路由器21a被配置为将经由虚拟网络接口从虚拟网络接收的分组发送到豆荚22a的容器,并且发送经由虚拟网络接口从虚拟网络上的豆荚22a的容器接收的分组。cni17a可以分配网络地址(例如,虚拟网络的虚拟ip地址),并且可以为虚拟网络接口建立路由。在kubernetes中,默认情况下,所有豆荚都可以在不使用网络地址转换(nat)的情况下与所有其他豆荚通信。在一些情况下,编排器23和网络控制器24创建由所有命名空间共享的服务虚拟网络和豆荚虚拟网络,从这些网络分别分配服务和豆荚网络地址。在一些情况下,在kubernetes集群中产生的所有命名空间中的所有豆荚能够彼此通信,并且所有豆荚的网络地址可以从由编排器23指定的豆荚子网分配。当用户为豆荚创建隔离命名空间时,编排器23和网络控制器24可以为新的隔离命名空间创建新的豆荚虚拟网络和新的共享服务虚拟网络。在kubernetes集群中产生的隔离命名空间中的豆荚从新的豆荚虚拟网络中提取网络地址,并且这种豆荚的相应服务从新的服务虚拟网络中提取网络地址。[0060]cni17a可以表示服务器12a的库、插件、模块、运行时或其他可执行代码。cni17a可以至少部分符合容器网络接口(cni)规范或rkt网络建议。cni17a可以表示contrail、opencontrail、multus、calico、crpd或其他cni。cni17a也可以被称为网络插件或cni插件或cni示例。单独的cni可以由例如multuscni调用,来为豆荚202a建立不同的虚拟网络接口。[0061]cni17a由编排器23调用。出于cni规范的目的,容器可以被认为是linux网络命名空间的同义词。这对应于什么单元取决于特定的容器运行时实现:例如,在应用程序容器规范(例如,rkt)的实现中,每个豆荚在唯一的网络命名空间中运行。然而,在docker中,网络命名空间通常存在于每个单独的docker容器中。出于cni规范的目的,网络是指可唯一寻址并且可以相互通信的一组实体。这可以是单独的容器、机器/服务器(真实的或虚拟的),或者某个其他网络装置(例如,路由器)。容器可以在概念上添加到一个或多个网络中,或者从一个或多个网络中移除。cni规范规定了一致性插件(“cni插件”)的一些考虑因素。[0062]豆荚22a包括容器化dpdk工作负载,其被设计为使用dpdk来加速分组处理,例如,通过使用dpdk库与其他组件交换数据。[0063]豆荚22a配置有用于管理或控制的管理接口26,并配置有用于高吞吐量分组处理的数据接口27,更具体而言,用于通过虚拟路由器21a发送和接收分组,以实现高吞吐量应用。管理接口26可以是豆荚22a的默认接口。豆荚22a可以将管理接口26实现为以太网接口(例如,命名为“eth0”),而虚拟路由器21a可以将管理接口26实现为tap接口、virtio用户接口或其他类型的接口。[0064]豆荚22a和虚拟路由器21a使用数据接口27交换数据包。数据接口27可以是dpdk接口。豆荚22a和虚拟路由器21a可以使用vhost建立数据接口27。豆荚22a可以根据聚合模型操作。豆荚22a可以使用虚拟装置,例如,具有vhost用户适配器的virtio装置,用于数据接口27的用户空间容器进程间通信。图5中示出了一个示例,其中,该示例中的virtio可以是用于与虚拟路由器21a交换分组的基于共享内存的解决方案。共享内存可以是在dpdk中初始化并由virtio装置管理的巨大页面。因此,豆荚22a的工作负载建立在dpdk上,并使用dpdk操作数据接口27。豆荚22a和虚拟路由器21a可以使用vhost调出dpdk接口。在一些示例中,豆荚22a可以作为vhost服务器操作,虚拟路由器21a作为vhost客户端,用于建立dpdk接口。在一些示例中,虚拟路由器21a可以作为vhost服务器操作,豆荚22作为vhost客户端,用于建立dpdk接口。[0065]cni17a可结合图1所示的一个或多个其他组件,为豆荚22a配置管理接口26和数据接口27。如上所述,这些可能是不同类型的接口。管理接口27和数据接口27中的每一个在本文可以被称为虚拟网络接口。下面描述了虚拟网络接口的其他示例类型。豆荚22a的任何容器可以利用(即共享)豆荚22a的任何虚拟网络接口。[0066]虚拟网络接口可以表示虚拟以太网(“veth”)对,其中,该对的每一端为单独的装置(例如,linux/unix装置),该对的一端分配给豆荚22a,该对的一端分配给虚拟路由器21a。veth对或veth对的端部有时被称为“端口”。虚拟网络接口可以表示macvlan网络,其具有分配给豆荚22a和虚拟路由器21a的媒体访问控制(mac)地址,用于豆荚22a的容器和虚拟路由器21a之间的通信。例如,虚拟网络接口可替换地被称为虚拟机接口(vmi)、豆荚接口、容器网络接口、tap接口、veth接口或简单的网络接口(在特定的上下文中)。[0067]在图1的示例服务器12a中,豆荚22a是一个或多个虚拟网络中的虚拟网络端点。编排器23可以存储或以其他方式管理用于应用部署的配置数据,该配置数据指定虚拟网络并指定豆荚22a(或其中的一个或多个容器)是虚拟网络的虚拟网络端点。例如,编排器23可以从用户、操作员/管理员或其他机器系统接收配置数据。[0068]作为创建豆荚22a的过程的一部分,编排器23请求网络控制器24为虚拟网络创建相应的虚拟网络接口(在配置数据中指示)。对于所属的每个虚拟网络,豆荚22a可以具有不同的虚拟网络接口以及管理接口26。例如,数据接口27可以是特定虚拟网络的虚拟网络接口。可以为其他虚拟网络配置额外的数据接口。网络控制器24处理该请求,以生成豆荚22a的虚拟网络接口的接口配置数据。接口配置数据可以包括容器或豆荚唯一标识符以及为每个虚拟网络接口指定用于配置虚拟网络接口的网络配置数据的列表或其他数据结构。虚拟网络接口的网络配置数据可以包括网络名称、分配的虚拟网络地址、mac地址和/或域名服务器值。javascript对象符号(json)格式的接口配置数据示例如下。管理接口26和数据接口27可以有单独的接口配置数据。[0069]网络控制器24向服务器12a发送接口配置数据,更具体地说,在某些情况下,向虚拟路由器21a发送接口配置数据。为了配置豆荚22a的虚拟网络接口,编排器23可以调用cni17a。cni17a从虚拟路由器21a获得接口配置数据,并对其进行处理。cni17a创建接口配置数据中指定的每个虚拟网络接口。例如,cni17a可以将实现管理接口26的veth对的一端附接到虚拟路由器21a,并且可以将同一veth对的另一端附接到豆荚22a,豆荚可以使用虚拟用户来实现。[0070]以下是作为管理接口26的虚拟网络接口的豆荚22a的示例接口配置数据。[0071][0072][0073]常规cni插件由容器平台/运行时调用,从容器平台接收添加命令,以将容器添加至单个虚拟网络,随后可调用该插件,以从容器/运行时接收del(ete)命令,并将容器从虚拟网络中移除。术语“调用”可以指作为可执行代码的在存储器中的软件组件或模块的实例化,以供处理电路执行。[0074]根据本公开的技术,部署豆荚22a和配置豆荚22a的控制流程可包括通过以下方式在豆荚22a和虚拟路由器21a之间创建高速数据路径:隔离豆荚22a,使其无法访问部署在服务器12a上的其他豆荚和虚拟路由器21a(图1中未显示其他豆荚)之间的相应数据接口。例如,豆荚22a可以使用vhost/virtio库来创建用于与服务器12a或者更具体地说与虚拟路由器21a通信的以太网接口。为了便于豆荚之间的隔离,服务器12a向豆荚22a提供对用于在虚拟路由器21a和豆荚22a之间通信的唯一文件系统资源的访问。在所示的示例中,作为部署豆荚22a和创建数据接口27的一部分,cni17a将文件系统资源描述数据29传递给虚拟路由器21a。文件系统资源描述数据29可以包括文件名、具有目录路径的目录、名称、具有目录路径的套接字目录、套接字名称、标识符或其组合。文件系统资源描述数据29描述了服务器12a的文件系统内的资源,例如,文件名和目录,其将为豆荚22a所知,但不为部署在服务器12a上的其他豆荚所知。在一些示例中,为了确保文件系统资源的唯一性,文件系统资源描述数据29基于描述豆荚22a的数据,例如,豆荚标识符(id)的至少一部分(例如,子串)、唯一标识符(uid)或通用唯一标识符(uuid)。这种信息可以包括在豆荚清单(例如,pod.yaml)中,并从编排器23传递到cni17a。[0075]基于文件系统资源描述数据29,虚拟路由器21a使用文件系统资源创建进程间通230还可以包括例如用于存储分组数据的卡上存储器。nic230和耦合到总线242的其他装置之间的直接存储器访问传输可以从/向nic存储器读取/写入。[0082]存储器244、nic230、存储磁盘246和处理器210可为软件堆栈提供操作环境,该软件堆栈包括在内核空间中执行的操作系统内核214。内核214可以表示例如可从微软公司获得的linux、berkeley软件分发(bsd)、另一unix变体内核或windows服务器操作系统内核。在一些示例中,操作系统可以执行管理程序和由管理程序管理的一个或多个虚拟机。示例管理程序包括用于linux内核的基于内核的虚拟机(kvm)、xen、可从vmware获得的esxi、可从微软获得的windowshyper-v以及其他开源和专有管理程序。术语管理程序可以包含虚拟机管理器(vmm)。包括内核214的操作系统为用户空间245中的一个或多个进程提供执行环境。[0083]内核214包括使用网络接口卡230的物理驱动程序225。网络接口卡230还可以实现sr-iov,以使得能够在一个或多个虚拟执行元件之间共享物理网络功能(i/o),例如,容器229a和229b或一个或多个虚拟机(图2中未示出)。共享虚拟装置(例如,虚拟功能)可以提供专用资源,使得每个虚拟执行元件可以访问nic230的专用资源,因此,对于每个虚拟执行元件来说,nic230表现为专用nic。虚拟功能可以表示与物理驱动程序225使用的物理功能以及其他虚拟功能共享物理资源的轻量级pcie功能。对于支持sr-iov的nic230,根据sr-iov标准,nic230可以具有数千个可用的虚拟功能,但是对于i/o密集型应用,所配置的虚拟功能的数量通常要少得多。[0084]计算装置200可连接至物理网络交换结构,该结构包括覆盖网络,该覆盖网络将交换结构从物理交换机延伸至耦合至交换结构的物理服务器的软件或“虚拟”路由器,包括基于dpdk的虚拟路由器220。虚拟路由器可以是由物理服务器(例如,图1的服务器12)执行的进程或线程或其组件,其动态地创建和管理可用于虚拟网络端点之间的通信的一个或多个虚拟网络。在一个示例中,虚拟路由器使用覆盖网络来实现每个虚拟网络,覆盖网络提供了将端点的虚拟地址与端点在其上执行的服务器的物理地址(例如,ip地址)分离的能力。每个虚拟网络可以使用其自己的寻址和安全方案,并且可以被视为与物理网络及其寻址方案正交。可以使用各种技术在物理网络上的虚拟网络内和虚拟网络间传输分组。本文使用的术语“虚拟路由器”可以包括openvswitch(ovs)、ovs网桥、linux网桥、docker网桥或位于主机装置上并且在一个或多个虚拟网络的虚拟网络端点之间执行交换、桥接或路由分组的其他装置和/或软件,其中,虚拟网络端点由一个或多个服务器12托管。[0085]虚拟路由器220可作为内核模块或用户空间dpdk进程执行(在用户空间245中显示虚拟路由器220)。虚拟路由器代理216也可以在用户空间中执行。在图2的示例计算装置200中,虚拟路由器220作为基于dpdk的虚拟路由器在用户空间内执行,但是在各种实现中,虚拟路由器220可以在管理程序、主机操作系统、主机应用或虚拟机内执行。虚拟路由器代理216使用信道连接到网络控制器24,该信道用于下载配置和转发信息。虚拟路由器代理216将该转发状态编程到由虚拟路由器220表示的虚拟路由器数据(或“转发”)平面。虚拟路由器220和虚拟路由器代理216可以是进程。[0086]虚拟路由器220可取代并包含linux桥/ovs模块的虚拟路由/桥接功能,该模块通常用于kubernetes部署豆荚202。虚拟路由器220可以为虚拟网络执行桥接(例如,e-vpn)和路由(例如,l3vpn、ip-vpn)。虚拟路由器220可以执行网络服务,例如,应用安全策略、nat、多播、镜像和负载平衡。[0087]虚拟路由器220可为多线程,并在一个或多个处理器内核上执行。虚拟路由器220可以包括多个队列。虚拟路由器220可以实现分组处理流水线。根据要应用于分组的操作,虚拟路由器代理216可以从最简单到最复杂的方式来缝合流水线。虚拟路由器220可以维护转发基础的多个实例。虚拟路由器220可以使用rcu(读取拷贝更新)锁来访问和更新表。[0088]为了向其他计算节点或交换机发送分组,虚拟路由器220(数据平面)使用一个或多个物理接口232。一般而言,虚拟路由器220与工作负载交换覆盖分组,例如,vm或豆荚202(图2中)。虚拟路由器220配置有多个虚拟路由器网络接口(例如,vifs)。这些接口可以包括到底层nic230(vif0/0)的接口——在一些示例中是linux绑定接口;内核接口vhost0(或vif0/2),用于与主机操作系统交换分组;与虚拟路由器代理216pkt0(或vif0/2)的接口,用于从网络控制器获取转发状态并发送异常分组。额外的虚拟路由器网络接口用于与虚拟执行元件通信,例如,dpdk豆荚202a-202b(统称为“豆荚202”)。在本公开中描述的一些上下文中,虚拟路由器网络接口可替换地被称为虚拟网络接口,因为包括豆荚或其他工作负载的虚拟执行元件的虚拟网络接口部分地使用虚拟路由器网络接口来实现。[0089]虚拟路由器220的虚拟网络接口212a-212b(统称为“虚拟网络接口212”)和213a-213b(统称为“虚拟网络接口213”)如图2所示。虚拟网络接口212、213中的每一个可以是tap接口、dpdk接口、unix域套接字、virtio接口、veth接口、macvlan、另一种类型的接口或接口类型的组合。[0090]在虚拟路由器220的基于内核的部署中(未显示),虚拟路由器220作为内核模块安装在操作系统内。虚拟路由器220向tcp/ip栈记录自己,以从它想要的任何期望的操作系统接口接收分组。接口可以是绑定、物理、tap(针对vm)、veth(针对容器)等。该内核模式中的虚拟路由器220依赖于操作系统来发送和接收来自不同接口的分组。例如,操作系统可以展示由vhost-net驱动程序支持的tap接口,以与工作负载通信。一旦虚拟路由器220记录了来自该tap接口的分组,tcp/ip栈就向其发送所有分组。虚拟路由器220经由操作系统接口发送分组。此外,nic队列(物理或虚拟)由操作系统处理。分组处理可能在中断模式下运行,这将产生中断并可能导致频繁的上下文切换。当数据包速率很高时,伴随频繁中断和上下文切换的开销可能会使操作系统不堪重负,导致性能下降。[0091]在虚拟路由器220的基于dpdk的部署中(如图2所示),虚拟路由器220安装为链接到dpdk库的用户空间245应用程序。这可能导致比基于内核的部署更快的性能,尤其是在存在高分组速率的情况下。dpdk的轮询模式驱动程序(pmd)使用物理接口232,而不是内核的基于中断的驱动程序。物理接口232的寄存器可以暴露在用户空间245中,以便pmd可以访问;以这种方式绑定的物理接口232不再由主机操作系统管理或对其可见,并且基于dpdk的虚拟路由器220管理物理接口232。这包括分组轮询、分组处理和分组转发。换言之,用户分组处理步骤由虚拟路由器220dpdk数据平面执行。当分组速率较高时,这种“轮询模式”的性质使得虚拟路由器220dpdk数据平面分组处理/转发比中断模式更有效。与内核模式虚拟路由器220相比,在分组i/o期间有相对较少的中断和上下文切换,并且在一些情况下可以完全避免分组i/o期间的中断和上下文切换。[0092]豆荚202是基于dpdk的豆荚。一般而言,每个豆荚202a-202b可以被分配一个或多个虚拟网络地址,以在相应的虚拟网络中使用,其中,每个虚拟网络可以与虚拟路由器220提供的不同虚拟子网相关联。豆荚202b可以被分配其自己的虚拟第三层(l3)ip地址,例如,用于发送和接收通信,但是可能不知道豆荚202b所在的计算装置200的主机ip地址。虚拟网络地址因此可以不同于底层物理计算机系统(例如,计算装置200)的逻辑地址。[0093]计算装置200包括虚拟路由器代理216,其控制计算装置200的虚拟网络覆盖,并编排计算装置200内数据包的路由。一般而言,虚拟路由器代理216与用于虚拟化基础设施的网络控制器24(图1)通信,网络控制器生成命令,以创建虚拟网络并配置网络虚拟化端点,例如,计算装置200,更具体地,虚拟路由器220以及虚拟网络接口212、213中的任何一个。通过基于从网络控制器24接收的信息配置虚拟路由器220,虚拟路由器代理216可以支持配置网络隔离、基于策略的安全性、网关、源网络地址转换(snat)、负载平衡器和用于编排的服务链能力。[0094]在一个示例中,由虚拟网络域内的容器229a-229b产生或消耗的网络分组(例如,第三层(l3)ip分组或第二层(l2)以太网分组)可封装在由物理网络传输的另一分组(例如,另一ip或以太网分组)中。在虚拟网络中传输的分组在本文可以被称为“内部分组”,而物理网络分组在本文可以被称为“外部分组”或“隧道分组”。路由器220可以执行虚拟网络分组在物理网络分组内的封装和/或解封装。该功能在本文被称为隧道,并且可以用于创建一个或多个覆盖网络。除了ipinip之外,可以使用的其他示例隧道协议包括通用路由封装(gre)上的ip、vxlan、gre上的多协议标签交换(mpls)、用户数据报协议上的mpls(udp)等。虚拟路由器220对源自/去往豆荚202的任何容器的分组执行隧道封装/解封装,并且虚拟路由器220经由总线242和/或nic230的桥与豆荚202交换分组。[0095]如上所述,网络控制器24可提供逻辑集中式控制器,以促进一个或多个虚拟网络的操作。网络控制器24可以例如维护路由信息库,例如,存储物理网络以及一个或多个覆盖网络的路由信息的一个或多个路由表。虚拟路由器220为虚拟路由器220作为相应隧道端点操作的相应虚拟网络实现一个或多个虚拟路由和转发示例(vrf)222。一般而言,每个vrf222存储对应虚拟网络的转发信息,并识别数据包将被转发到哪里以及分组是否将被封装在隧道协议中,例如,利用隧道报头,该隧道报头可以包括虚拟网络协议栈的不同层的一个或多个报头。每个vrf222可以包括存储虚拟网络的路由和转发信息的网络转发表。[0096]nic230可接收隧道分组。虚拟路由器220处理隧道分组,以从隧道封装报头确定内部分组的源和目的地端点的虚拟网络。虚拟路由器220可以剥离第2层报头和隧道封装报头,以仅在内部转发内部分组。隧道封装报头可以包括虚拟网络标识符,例如,vxlan标签或mpls标签,其指示虚拟网络,例如,对应于一个vrf222的虚拟网络。vrf可以包括内部分组的转发信息。例如,vrf可以将内部分组的目的地第3层(l3)地址映射到虚拟网络接口212。作为响应,vrf经由虚拟网络接口212将内部分组转发给豆荚202a。[0097]容器229a-229b也可将内部分组作为源虚拟网络端点。例如,容器229a可以生成去往由另一计算装置(即,不是计算装置200)执行的目的地虚拟网络端点或容器229a-229b中的另一个的第3层内部分组。容器229a经由虚拟网络接口212向虚拟路由器220发送第3层内部分组。[0098]虚拟路由器220接收内部分组和第2层报头,并确定内部分组的虚拟网络。虚拟路由器220可以使用任何上述虚拟网络接口实现技术(例如,macvlan、veth等)来确定虚拟网络。虚拟路由器220使用对应于内部分组的虚拟网络的vrf222a来生成内部分组的外部报头,该外部报头包括覆盖隧道的外部ip报头和标识虚拟网络的隧道封装报头。虚拟路由器220用外部报头封装内部分组。虚拟路由器220可以用新的第2层报头封装隧道分组,该新的第2层报头具有与计算装置200外部的装置(例如,tor交换机16或一个服务器12)相关联的目的地第2层(l2)地址。如果在计算装置200的外部,则虚拟路由器220使用物理功能221向nic230输出具有新的第2层报头的隧道分组。nic230在出站接口上输出分组。如果目的地是在计算装置200上执行的另一虚拟网络端点,则虚拟路由器220将分组路由到虚拟网络接口212、213中适当的一个。[0099]在一些示例中,计算装置200的控制器(例如,图1的网络控制器24)在每个豆荚202中配置默认路线,以使豆荚使用虚拟路由器220作为出站分组的初始下一跳。在一些示例中,nic230配置有一个或多个转发规则,以使得从豆荚接收的所有分组被交换到虚拟路由器220。[0100]更详细地,豆荚202a-202b可以表示图1的豆荚22a的示例实例。豆荚202a包括一个或多个容器229a,豆荚202b包括一个或多个容器229b。[0101]更详细地说,容器平台204可以表示图1的容器平台19a的示例实例。容器平台204包括容器引擎(或“运行时间”)208、编排代理209、服务代理211。cni206可以表示图1的cni17a的示例实例。[0102]容器引擎208包括可由处理器210执行的代码。容器运行时208可以是一个或多个计算机进程。容器引擎208以容器229a-229b的形式运行容器化的应用。容器引擎208可以表示dockert、rkt或用于管理容器的其他容器引擎。一般而言,容器引擎208接收、请求并管理诸如图像、容器、网络和卷等对象。图像是带有创建容器的指令的模板。容器是图像的可执行实例。基于来自编排代理209的指令,容器引擎208可以获得图像并将它们实例化为豆荚202a-202b中的可执行容器229a-229b。[0103]服务代理211包括可由处理器210执行的代码。服务代理211可以是一个或多个计算机进程。服务代理211监视服务和端点对象的添加和移除,并且维护计算装置200的网络配置,以例如使用服务来确保豆荚和容器之间的通信。服务代理211还可以管理iptables,以捕获到服务的虚拟ip地址和端口的流量,并将流量重定向到代理支持的豆荚的代理端口。服务代理211可以表示kubernetes集群的附属节点的kube代理。在一些示例中,容器平台204不包括服务代理211,或者禁用服务代理211,以利于cni206配置虚拟路由器220和豆荚202。[0104]编排代理209包括可由处理器210执行的代码。编排代理209可以是一个或多个计算机进程。编排代理209可以表示kubernetes集群的附属节点的kubelet。编排代理209是编排器(例如,图1的编排器23)的代理,其接收容器的容器规范数据并确保容器由计算装置200执行。容器规范数据可以是从编排器23发送到编排代理209的清单文件的形式,或者是经由命令行接口、http端点或http服务器间接接收的。容器规范数据可以是容器229的一个豆荚202的豆荚规范(例如,podspec——描述豆荚的yaml(又一种标记语言)或json对象)。基于容器规范数据,编排代理209指示容器引擎208获取并实例化容器229的容器图像,以供计算装置200执行容器229。[0105]编排代理209实例化cni206,为每个豆荚202配置一个或多个虚拟网络接口。cni206可以表示图1的cni17a的示例实例。例如,编排代理209接收豆荚202a的容器规范数据,并指导容器引擎208基于豆荚202a的容器规范数据创建具有容器229a的豆荚202a。编排代理209还调用cni206来为豆荚202a配置对应于一个vrf222的虚拟网络的虚拟网络接口212a。任何虚拟网络接口213a-213b可以表示图1中描述的管理接口26的示例实例,并且任何数据接口212a-212b可以表示图1中描述的数据接口27的示例实例。管理虚拟网络接口213a-213b可以连接到不同的vrf(或各自不同的vrf),而不是数据虚拟网络接口212a-212b中任何一个的vrf。[0106]cni206可获取接口配置数据,用于配置豆荚202的虚拟网络接口。虚拟路由器代理216作为虚拟网络控制平面模块操作,用于使网络控制器24能够配置虚拟路由器220。与管理供应、调度和管理虚拟执行元件的编排控制平面(包括用于附属节点和主节点的容器平台204,例如,编排器23)不同,虚拟网络控制平面(包括用于附属节点的网络控制器24和虚拟路由器代理216)管理部分由附属节点的虚拟路由器220在数据平面中实现的虚拟网络的配置。虚拟路由器代理216向cni206传送虚拟网络接口的接口配置数据,以使编排控制平面元件(即,cni206)能够根据网络控制器24确定的配置状态来配置虚拟网络接口,从而桥接编排控制平面和虚拟网络控制平面之间的间隙。此外,这可以使cni206能够获得豆荚的多个虚拟网络接口的接口配置数据,并配置多个虚拟网络接口。[0107]根据本公开所述的技术,cni206向虚拟路由器代理216提供套接字描述数据217,促进豆荚202之间的文件系统隔离。例如,为了配置虚拟路由器220和豆荚202a之间的数据接口212a,cni206获得指定unix域套接字的目录和套接字名称的套接字描述数据217。基于套接字描述数据217,虚拟路由器220和dpdk豆荚202a创建unix域套接字215a,其可以作为数据接口212a的控制信道操作。unix域套接字215a是用基于套接字描述数据217所指定的目录的套接字目录来创建的,并且unix域套接字215a是使用套接字描述数据217所指定的套接字名称来命名和引用的。使用套接字215a,虚拟路由器220和豆荚202a交换控制消息,以通过共享内存为基于dpdk的数据接口212a协商dpdk环。换言之,一旦建立套接字215a的通信信道,发生用户空间vhost协议。在该协议消息交换期间,豆荚202a和虚拟路由器220交换关于豆荚的存储区域、虚拟地址和支持的特征的信息。在消息交换结束时,启用virtio环,并且可以在豆荚202a和虚拟路由器220之间进行数据通信。[0108]cni206可支持ipv6ipv4、非dpdk接口、dpdk接口,为基于dpdk的虚拟路由器配置虚拟网络接口,和/或为基于内核的虚拟路由器配置虚拟网络接口。cni206可以验证用户输入,例如,在豆荚清单中找到的套接字描述数据。如果所指示的dpdk应用的vhost模式与虚拟路由器220的vhost模式不兼容,则cni206可以返回误差。[0109]用于生成套接字目录路径的示例技术在本公开的其他地方进行了描述。类似的操作可以由cni206、虚拟路由器代理216、虚拟路由器220和豆荚202b执行,用于创建套接字215b和数据接口212b。[0110]由套接字描述数据217指定的套接字目录对于豆荚202b或部署到计算装置200的任何其他豆荚(图2中未示出)(除了包括虚拟路由器220的豆荚(如果有))可能是未知的和/或不可访问的。由套接字描述数据217指定的套接字目录可以不同于由用于创建数据接口212b的相应套接字描述数据指定的套接字目录。因为套接字215a和套接字215b使用不同的套接字目录,已经使用相应套接字描述数据中不同的指定套接字目录创建,所以豆荚202不能访问和/或知道彼此的数据接口212a和212b。[0111]cni206和虚拟路由器代理216操作的示例调用流程如下。[0112]网络控制器管理器(例如,图3的网络控制器管理器325)监听编排器23的豆荚创建/删除/更新事件。在检测到新的豆荚创建事件时,网络控制器管理器解析豆荚信息,并为要为豆荚202a配置的每个虚拟网络接口创建相应的接口配置数据。网络控制器管理器可选地经由网络控制器24将该接口配置数据传递给虚拟路由器代理216,网络控制器具有与虚拟路由器代理216的接口,以管理计算装置200中的虚拟路由。[0113]与上述向虚拟路由器代理216传送接口配置数据并行,编排代理209获得由编排器23生成的“设置豆荚”事件,用于将豆荚202a部署到计算装置200。作为部署豆荚202a的一部分,编排代理209调用cni206来配置豆荚202a的网络。cni206进而从虚拟路由器代理216获得豆荚202a的虚拟网络接口列表以及接口配置数据。在一些示例中,cni206调用虚拟路由器代理216接口的getpod_config方法。以下是豆荚202a的虚拟网络接口212a的接口配置数据的示例:[0114][0115][0116]cni206处理接口配置数据,并请求虚拟路由器代理216a配置虚拟路由器220的虚拟网络接口。例如,cni206可以调用虚拟路由器代理216api的端口添加消息(例如,postvmi)。以下是从cni206到虚拟路由器代理216a的配置虚拟网络接口的请求消息的示例参数:[0117][0118][0119]请求消息包括套接字描述数据217的额外参数。即,该示例中的套接字描述数据217包括vhostsocket-dir和vhostsocket-filename参数(以粗体显示)。vhostsocket-dir是用于套接字215a的套接字目录。在此示例中,vhostsocket-dir的值是基于/var/run/vrouter(vrouter的基本文件夹)的路径以及/var/run/vrouter中该文件夹的唯一值。在这种情况下,该唯一值基于豆荚202a的唯一标识符,该标识符包括在豆荚202a的虚拟网络接口212a的接口配置数据中。在一些示例中,容器标识符可以是容器标识符。结果,豆荚202b将不能访问或看到该目录,并且豆荚202与彼此的数据接口212隔离。在这种情况下,vhostsocket-filename参数值也基于豆荚202a的标识符(vm-id)和接口的名称(“net1”)。vhostsocket-filename可以用作套接字215a套接字名称。由cni206生成并提供给虚拟路由器代理216的这些值的这种参数化不同于现有方案,在现有方案中,套接字目录是固定的,套接字名称由虚拟路由器代理216基于虚拟网络接口名称或标识符自动导出。[0120]虚拟路由器代理216处理请求消息,虚拟路由器220和虚拟路由器代理216使用该信息为豆荚202a配置数据接口212a。如果处于vhost服务器模式,虚拟路由器220在套接字目录上监听套接字215a。如果处于客户端模式,虚拟路由器220在套接字215a的套接字目录上发起通信。虚拟路由器220和豆荚202a交换符合vhost协议的控制消息,以通过共享内存为基于dpdk的数据接口212a协商dpdk环。这样,虚拟路由器220配置有数据接口212a的虚拟路由器端,其是虚拟路由器220和豆荚202a之间的dpdk数据路径,用于高速分组处理和转发。虚拟路由器代理216还用网络信息配置数据接口212a,例如,mac和ip地址、任何需要的vlan、dns和网关信息、mtu以及在某些情况下其他接口数据,例如,接口名称/id。虚拟路由器代理216可以从网络控制器24获得至少一些用于配置数据接口212a的网络信息。对于套接字215a上的控制协议,虚拟路由器220是处于客户端模式还是服务器模式可以在从cni206到虚拟路由器代理216a的请求消息中指定。在上面的示例中,这个参数是vhostuser-mode(以粗体显示)。[0121]cni206进而从虚拟路由器代理216获取关于数据接口212a的网络信息。例如,cni206可以调用虚拟路由器代理216api的getvm_ip方法来请求网络信息。以下是关于数据接口212a的网络信息的示例:[0122]cni206可经由编排代理209向编排器23报告至少一些网络信息。cni206向豆荚202a提供或配置至少一些网络信息,以便豆荚202a的容器229a可以使用数据接口212a作为虚拟网络接口。这种网络信息可以包括mac和ip地址以及接口名称。cni206还向豆荚202a提供套接字215a的套接字描述数据,例如,套接字目录和套接字名称。这些值可以与cni206为套接字描述数据提供给虚拟路由器代理216a的值相同。cni206还可以向豆荚202a提供数据接口212a的接口名称和/或网络配置数据,例如,ip地址、mac地址、dns数据、mtu等。该信息和套接字描述数据可以通过经由hostpath目录安装的体积中的配置文件或者经由通过向下api安装的注释对豆荚202a可用。[0123]或者,豆荚202a可获取部分或全部套接字描述数据,而不是由cni206提供。例如,豆荚202a可以基于一个容器229a的容器标识符、数据接口212a的接口名称或接口标识符、豆荚标识符或唯一标识符、命名空间、注释、标签或上述两个或多个的任意组合来导出套接字215a的套接字名称。用于导出作为容器标识符的前12个字符的套接字名称和接口名称的示例脚本是:[0124]ifname=net1[0125]containerid=$(sed-ne'/hostname/p'/proc/1/task/1/mountinfo|awk-f'/''{print$6}')[0126]sockname=${containerid:0:12}-$ifname[0127]在豆荚内运行的容器化应用程序可使用app-netutilsapi查询与豆荚相关的网络信息和配置。[0128]在一些示例中,计算装置200和编排器23可使用变异网络钩子提供用于创建套接字215a的套接字描述数据。例如,组件可以用kubernetes提供的api实现http回调。如果打算修改资源对象,则组件可以使用变异准入网络钩子。对于这种类型的网络钩子,可以修改或拒绝所采取的措施。或者,如果想要实施定制策略,则组件可以使用验证准入网络钩子。对于此类型或网络钩子,可以接受或拒绝采取的措施,并且不允许修改。网络钩子向api服务器320记录规则,例如,规则:在豆荚创建时。在一个事件中,如果与记录的规则存在匹配,则api服务器320将发起对定义的网络钩子的调用,并将资源对象传递给定义的处理函数。对kubernetes资源对象的措施将作为使用的网络钩子类型。[0129]在变异准入网络钩子和验证准入网络钩子的情况下,可为同一规则注册这些网络钩子。首先调用变异准入网络钩子,然后在成功时,api服务器320可以调用验证准入网络钩子来做出接受或拒绝请求的最终决定。[0130]使用网络钩子的优点在于,可通过定义标签来对dpdk类别下部署的所有工作负载进行分类,从而简化用户需要进行的定义。对于想要定义标签以便体积和体积安装可以由豆荚定义(即豆荚规范)中的网络钩子注入的用户来说,这可能是附近功能。另一优点是减少了误差,确保与使用hostpath“/var/run/vrouter”定义的体积相关联的容器中的体积安装具有带pod_uid的子路径,并且在subpathexpr中使用的环境变量可用。配置图可以控制网络钩子的功能,例如,启用/禁用验证或变异,或者指定用户定义的默认参数。如果豆荚被重新安排到不同的节点或被删除,则套接字文件和唯一文件夹将保留在主机中。因此,监听豆荚删除事件以采取适当的措施来清理目录和套接字文件是很重要的。注释上的crud操作可以在此处定义。如果特定功能需要,则可以添加、修改或删除新的注释,并且可以添加自定义警告消息来指示拒绝的原因。[0131]豆荚202a(或更具体而言,在某些情况下,作为豆荚202a的一部分执行的dpdk应用程序或库)基于套接字描述数据建立套接字。如果在vhost服务器模式下,豆荚202a监听套接字215a的套接字目录。如果处于客户端模式,豆荚202a在套接字215a的套接字目录上发起通信。豆荚202a是处于vhost服务器模式还是客户端模式可以由cni206来指定,如同上述示例中的vhostuser-mode参数一样(以粗体显示)。虚拟路由器220和豆荚202a交换符合vhost协议的控制消息,以通过共享内存为基于dpdk的数据接口212a协商dpdk环。这样,豆荚202a配置有数据接口212a的工作负载/豆荚端,该数据接口是虚拟路由器220和豆荚202a之间的dpdk数据路径,用于高速分组处理和转发。已经建立了数据接口212a,虚拟路由器220可以处理和转发来自豆荚202a或去往豆荚202a的虚拟网络的网络分组。[0132]可由cni206、虚拟路由器代理216、虚拟路由器220和豆荚202b执行类似的调用流程,以使用套接字215b创建数据接口212b。结果,豆荚202具有使用单独的并且彼此不可相互访问的基于套接字的控制信道建立的单独的dpdk接口。下面描述使用套接字描述数据配置数据接口的上述功能的额外示例细节、实现和替换实现。[0133]在一些示例中,cni206从编排器23获取套接字描述数据,而不是通过编排代理209获取。cni206可以解析指示用于套接字215a的套接字目录和/或套接字名称的豆荚清单(在本公开的其他地方描述)。在一些示例中,虚拟路由器代理216可以从在计算装置上执行的路由协议进程获得接口配置数据。在2022年2月1日提交的题为“containerizedrouterwithvirtualnetworking”的美国专利申请号17/649,632中描述了与路由协议进程(例如,容器化路由协议守护程序)通信的虚拟路由器代理216的示例细节,该专利申请通过引用整体结合于此。在这样的示例中,cni206可以针对路由协议进程来定制。例如,cni206可以经由rest接口将套接字描述数据217传送给虚拟路由器代理。路由协议进程可以添加vrf、更新虚拟网络接口、路由目标和下一跳。类似于别处所述,虚拟路由器代理216将数据接口212a添加到虚拟路由器220,并包括套接字215a的套接字目录和套接字名称,建立vhost控制信道,以协商和建立vhost数据路径(或dpdk数据路径)。[0134]可使用产生具有dpdk能力的容器的改进工作流程创建和部署豆荚202。下面是创建dpdk豆荚图像的示例脚本。该脚本是dockerfile,但也可以使用其他工具:[0135][0136][0137]根据本公开的技术,套接字描述数据217可基于编排器23提供的数据。例如,豆荚202a的豆荚清单可以使用字符串来指示套接字215a的套接字目录,该字符串可以包括例如将套接字215a的套接字目录与计算装置200上配置的其他套接字区分开的唯一字符串的变量。豆荚202a的示例豆荚清单(“pod.yaml”)如下:[0138][0139][0140][0141]上述粗体参数可用于指定套接字描述数据217。“/var/run/vrouter/pod《num》”的共享目录(“shared-dir”)的体积安装的mountpath可以用作套接字215a的vhost套接字路径,或者在cni206和豆荚202a之间共享数据。另一示例mountpath可能是“/var/run/vrouter/《poduid》”或“/var/run/vrouter/《poduuid》”。变量《num》、《poduid》、《poduuid》在包括在到虚拟路由器代理216的套接字描述数据217中之前,可以由cni206用豆荚标识符、唯一标识符或豆荚202a的通用唯一标识符来替换。体积的shared-dir的hostpath也以类似方式指定。体积是可由豆荚中的容器访问的目录,由体积结构指定。编排代理209在指定的mountpath本地安装每个体积,并维护主机路径列表。在创建数据接口212的情况下,hostpath体积将来自计算装置200的文件系统的文件或目录安装到豆荚中,以提供对豆荚外部的数据的访问,用于访问套接字215的套接字目录(“shared-dir”)。hostpath路径(在此处为“/var/run/vrouter/pod《num》”)用于指定计算装置200上的目录位置。一旦容器启动,容器就在容器中创建一个路径,并将容器中的路径绑定到相应的主机路径。同样,pod《num》可由cni206完成,该cni通过例如通信或在豆荚清单中从编排器23接收不完整的hostpath路径。[0142]cni206可使用hostpathshared-dir安装和subpathexpr,使用不同的豆荚标识符(或唯一标识符或uuid)使套接字215a的套接字目录不同,例如,唯一。下面是使用subpathexpr的豆荚清单的另一示例:[0143][0144][0145]为了为套接字215a创建和使用唯一的套接字目录,基于上述规范,套接字目录将被创建为“/var/run/vrouter/《pod_uid》/”(hostpath路径 $pod_uid[subpathexpr])。cni206将带有端口添加消息的数据接口212a添加到虚拟路由器代理216,虚拟路由器代理已经被扩展为包括套接字描述数据,此处是套接字目录和套接字名称。虚拟路由器代理216用新的虚拟网络接口配置虚拟路由器220,并包括套接字描述数据,使得虚拟路由器220可以基于套接字描述数据监听或创建套接字215a。因为cni206不接收豆荚清单中的uuid,所以cni206必须能够假设套接字目录推导逻辑是一致的,例如,在上面的示例中,/var/run/vrouter/《pod_uid》。如果用户使用不同于pod_uid的选项,则套接字215a设置和数据接口212a设置可能会失败。应该记录规范,以便向用户传达规范需求。[0146]在上述示例中,计算装置200需要有“var/run/vrouter”目录,才能部署豆荚。编排代理209在豆荚部署时创建名为“var/run/vrouter/《pod_uid》/dpdk0”的目录,然后为工作负载安装到“/vhu”的路径。工作负载可以继续使用“/vhu”,但是在计算装置200上,内容将在扩展的唯一路径“var/run/vrouter/《pod_uid》/dpdk0”上可用。[0147]可进一步注释豆荚清单,以指定基于dpdk的虚拟路由器220与豆荚202通信的新接口类型。要指定的新接口类型可能包括virtio用户/tap或vhost用户接口。下面是一个豆荚202的豆荚清单的示例模式:[0148][0149][0150]interfacetype参数可指定“vhost”或其他字符串,以指示dpdk豆荚,或可指定virtio用户/veth,以指示非dpdk豆荚。这样,计算装置200可以支持并同时执行dpdk和非dpdk豆荚的混合。appvhost-mode参数可以指定豆荚的dpdk应用程序是以客户端模式还是服务器模式运行vhost。如果虚拟路由器220与指定的模式不兼容,则cni206可以返回误差。虚拟路由器220可以支持veth接口、dpdk接口、virtio用户pmd到veth通信、vhostpmd到virtio用户(dpdk)、virtio用户和/或上游vhost。[0151]用于指定cni206的操作的配置数据可包括支持此处技术的额外参数。下面是一个cni配置示例:[0152][0153][0154]vrouter-mode参数可用于处理默认情况。例如,如果豆荚注释“interfacetype”(如上所述)从豆荚清单中缺失,则接口类型的默认值可以由cni206从vrouter-mode导出,即,如果是dpdk,则是支持dpdk的接口,例如,vhost-user。[0155]图3是根据本公开中描述的技术的作为虚拟化计算基础设施的控制器和编排器的实例操作的示例计算装置的框图。图3的计算装置300可以表示一个或多个真实或虚拟服务器的集中式或分布式系统,该系统被配置为执行网络控制器24和编排器23中的至少一个的操作。这样,计算装置300在一些情况下可以为相应的集群实现一个或多个主节点。[0156]尽管图示和描述为由单个计算装置300执行,但调度器322、api服务器320、控制器管理器326、网络控制器324、网络控制器管理器325和配置存储328可分布在构成计算系统或硬件/服务器集群的多个计算装置300中。换言之,多个计算装置300中的每一个可以为调度器322、api服务器320、控制器管理器326、网络控制器324、网络控制器管理器325或配置存储328中的任何一个或多个的一个或多个实例提供硬件操作环境。网络控制器324可以表示图1的网络控制器24的示例实例。调度器322、api服务器320、控制器管理器326和网络控制器管理器325可以实现编排器23的组件的示例实例。网络控制器管理器325可以表示kubernetes云控制器管理器或kube管理器的示例实现。[0157]在此示例中,计算装置300包括耦合计算装置300硬件环境的硬件组件的总线342。总线342耦合网络接口卡(nic)330、存储盘346和一个或多个微处理器310(以下称为“处理器310”)。在某些情况下,前端总线可以耦合处理器310和存储装置344。在一些示例中,总线342可以耦合存储器装置344、处理器310和nic330。总线342可以表示外围组件接口(pci)快速(pcie)总线。在一些示例中,直接存储器访问(dma)控制器可以控制耦合到总线242的组件之间的dma传输。在一些示例中,耦合到总线342的组件控制耦合到总线342的组件之间的dma传输。[0158]处理器310可包括一个或多个处理器,每个处理器包括独立的执行单元,以执行符合指令集架构的指令,指令存储在存储介质中。执行单元可以被实现为单独的集成电路(ic)或者可以被组合在一个或多个多核处理器(或“众核”处理器)内,每个多核处理器都使用单个ic(即,芯片多处理器)来实现。[0159]磁盘346表示计算机可读存储介质,包括以任何方法或技术实现的易失性和/或非易失性、可移动和/或不可移动介质,用于存储信息,例如,处理器可读指令、数据结构、程序模块或其他数据。计算机可读存储介质包括但不限于随机存取存储器(ram)、只读存储器(rom)、eeprom、闪存、cd-rom、数字多功能光盘(dvd)或其他光存储装置、盒式磁带、磁带、磁盘存储装置或其他磁存储装置,或者可用于存储所需信息并可由处理器310访问的任何其他介质。[0160]主存储器344包括一个或多个计算机可读存储介质,可包括随机存取存储器(ram),例如,各种形式的动态ram(dram),例如,ddr2/ddr3sdram,或静态ram(sram)、闪存或任何其他形式的固定或可移动存储介质,可用于以指令或数据结构的形式传送或存储所需的程序代码和程序数据,并可由计算机访问。主存储器344提供由可寻址存储位置组成的物理地址空间。[0161]网络接口卡(nic)330包括一个或多个接口332,该接口被配置为使用基础物理网络的链路交换分组。接口332可以包括具有一个或多个网络端口的端口接口卡。nic330还可以包括例如用于存储分组数据的卡上存储器。nic330和耦合到总线342的其他装置之间的直接存储器访问传输可以从/向nic存储器读/写。[0162]存储器344、nic330、存储磁盘346和处理器310可为软件堆栈提供操作环境,该软件堆栈包括在内核空间中执行的操作系统内核314。内核314可以表示例如可从微软公司获得的linux、berkeley软件分发(bsd)、另一unix变体内核或windows服务器操作系统内核。在一些示例中,操作系统可以执行管理程序和由管理程序管理的一个或多个虚拟机。示例管理程序包括用于linux内核的基于内核的虚拟机(kvm)、xen、可从vmware获得的esxi、可从微软获得的windowshyper-v以及其他开源和专有管理程序。术语管理程序可以包含虚拟机管理器(vmm)。包括内核314的操作系统为用户空间345中的一个或多个进程提供执行环境。内核314可以包括使用网络接口卡230的物理驱动程序327。[0163]计算装置300可耦合至包括覆盖网络的物理网络交换结构,该覆盖网络将交换结构从物理交换机延伸至耦合至交换结构的物理服务器的软件或“虚拟”路由器,例如,图2的虚拟路由器220。计算装置300可以使用一个或多个专用虚拟网络来配置集群的附属节点。[0164]api服务器320、调度器322、控制器管理器326和配置存储可实现群集的主节点,也可称为“主组件”。集群可以是kubernetes集群,主节点可以是kubernetes主节点,在这种情况下,主组件就是kubernetes主组件。[0165]api服务器320包括可由处理器310执行的代码。api服务器320可以是一个或多个计算机进程。api服务器320验证和配置对象的数据,例如,虚拟执行元件(例如,容器豆荚)、服务和复制控制器。服务可以是定义一组逻辑单元和用于访问豆荚的策略的抽象。基于服务定义来选择实现服务的一组豆荚。服务可以部分实现为负载平衡器,或者以其他方式包括负载平衡器。api服务器320可以实现表示状态转移(rest)接口来处理rest操作,并向存储在配置存储328中的相应集群的共享状态提供前端。api服务器320可以认证和授权请求。api服务器320与其他组件通信,以实例化计算基础设施8中的虚拟执行元件。api服务器320可以表示kubernetesapi服务器。[0166]配置存储328是所有集群数据的后备存储。集群数据可以包括集群状态和配置数据。配置数据还可以为服务发现提供后端和/或提供锁定服务。配置存储328可以被实现为键值存储。配置存储328可以是中央数据库或分布式数据库。配置存储328可以表示etcd存储。配置存储328可以表示kubernetes配置存储。[0167]调度器322包括可由处理器310执行的代码。调度器322可以是一个或多个计算机进程。调度器322监视新创建的或请求的虚拟执行元件(例如,容器豆荚),并选择虚拟执行元件将在其上运行的附属节点。调度器322可以基于资源要求、硬件约束、软件约束、策略约束、位置等来选择附属节点。调度器322可以表示kubernetes调度器。[0168]一般而言,api服务器320可调用调度器322来调度豆荚,该豆荚可选择附属节点,并将所选附属节点的标识符返回给api服务器320,api服务器可将该标识符写入与虚拟执行元件相关联的配置存储328。api服务器320可调用所选附属节点的编排代理209,这可使所选附属节点的容器引擎208从存储服务器获得豆荚,并在附属节点上创建豆荚。所选附属节点的编排代理209可向api服务器320更新虚拟执行元件的状态,api服务器将该新状态保存到配置存储328中。以这种方式,计算装置300例如向服务器12实例化计算基础设施8中的新容器。[0169]控制器管理器326包括可由处理器310执行的代码。控制器管理器326可以是一个或多个计算机进程。控制器管理器326可以嵌入核心控制回路,通过从api服务器320获得通知来监控集群的共享状态。控制器管理器326可以尝试将集群的状态移向期望的状态。由控制器管理器326管理的示例控制器(未示出)可以包括复制控制器、端点控制器、名字空间控制器和服务账户控制器。控制器管理器326可以执行生命周期功能,例如,命名空间创建和生命周期、事件垃圾收集、终止的豆荚垃圾收集、级联删除垃圾收集、节点垃圾收集等。控制器管理器326可以表示kubernetes集群的kubernetes控制器管理器。[0170]网络控制器324包括可由处理器310执行的代码。网络控制器324可以包括一个或多个计算机进程。网络控制器324可以使用虚拟机、容器或作为本地进程来实现。网络控制器324可以是逻辑上集中但物理上分布的软件定义网络(sdn)控制器,其负责提供虚拟化网络的管理、控制和分析功能。具体而言,网络控制器324可以是计算基础设施8的逻辑集中式控制平面和管理平面,并且为一个或多个附属节点编排虚拟路由器。[0171]网络控制器324可为在网络基础设施上操作的计算架构提供云网络。云网络可能包括面向企业或服务提供商的私有云、基础架构即服务(iaas)以及面向云服务提供商(csp)的虚拟私有云(vpc)。私有云、vpc和iaas用例可能涉及多租户虚拟化数据中心,如图1所示。在这种情况下,数据中心的多个租户共享相同的物理资源(物理服务器、物理存储、物理网络)。每个租户都被分配了自己的逻辑资源(虚拟机、容器或其他形式的虚拟执行元件;虚拟存储;虚拟网络)。除非安全策略特别允许,否则这些逻辑资源是相互隔离的。数据中心中的虚拟网络也可以互连到物理ipvpn或l2vpn。[0172]网络控制器324可为网络提供网络功能虚拟化(nfv),例如,商业边缘网络、宽带用户管理边缘网络和移动边缘网络。nfv涉及在虚拟机、容器或其他虚拟执行元件中,而不是在物理硬件设备上的网络功能的编排和管理,例如,防火墙、入侵检测或预防系统(ids/ips)、深度数据包检测(dpi)、缓存、广域网(wan)优化等。该市场中网络服务虚拟化的主要驱动因素是上市时间和成本优化。[0173]网络控制器324对网络基础设施元件进行编程,以创建虚拟网络,并可为虚拟网络的虚拟网络接口创建接口配置。[0174]关于网络控制器24与数据中心10的其他装置或其他软件定义的网络结合操作的其他信息见国际申请号pct/us2013/044378和美国专利申请号14/226,509,在上面通过引用结合于此。[0175]网络控制器管理器325包括可由处理器310执行的代码。网络控制器管理器325可以是一个或多个计算机进程。网络控制器管理器325作为面向编排的元件(例如,调度器322、api服务器320、控制器管理器326和配置存储328)和网络控制器324之间的接口。一般而言,网络控制器管理器325监控集群的新对象(例如,豆荚和服务)。网络控制器管理器325可以隔离虚拟网络中的豆荚并将豆荚与服务连接起来。[0176]网络控制器管理器325可作为集群主节点的容器执行。在一些情况下,使用网络控制器管理器325使得能够禁用附属节点的服务代理(例如,kuberneteskube-proxy),从而使用虚拟路由器实现所有豆荚连接,如本文所述。[0177]网络控制器管理器325可使用编排平台的控制器框架,监听(或监控)api中定义的对象的变化,并向其中一些对象添加注释。注释可以是指定对象属性的标签或其他标识符(例如,“虚拟网络绿色”)。网络控制器管理器325可以使用到网络控制器324的接口来为应用创建网络解决方案,以定义网络对象,例如,虚拟网络、虚拟网络接口和访问控制策略。网络控制器324可以通过例如配置虚拟路由器中的一个或多个虚拟网络和虚拟网络接口,在计算基础设施中实现网络解决方案。[0178]该应用程序的以下示例部署配置由豆荚和豆荚的虚拟网络信息组成:[0179][0180][0181][0182]该元数据信息被复制到控制器管理器326创建的每个豆荚副本中。当通知网络控制器管理器325这些豆荚时,网络控制器管理器325可以创建注释中列出的虚拟网络(在上面的示例中为“红色网络”、“蓝色网络”和“默认/外部网络”),并且为每个虚拟网络创建虚拟网络接口每豆荚副本(例如,豆荚202a),具有来自虚拟网络的集群范围地址块(例如,10.0/16)的唯一私有虚拟网络地址。[0183]根据本公开的技术,网络控制器管理器325可获取豆荚清单的新网络注释,用于指定虚拟网络接口的接口类型(例如,“接口类型”)和/或指定vhost模式(例如,“appvhost-mode”)。网络控制器管理器325可以将该网络注释数据传递给网络控制器324,网络控制器将网络注释数据提供给虚拟路由器代理216。网络注释数据可以包括在接口配置数据中,用于配置豆荚的虚拟网络接口,如上面参考图1至图2所述。如果接口类型注释指示创建dpdk类型的接口,则虚拟路由器220可以使用所指示的vhost模式与豆荚的dpdkapp连接,以协商豆荚和虚拟路由器220之间的dpdk接口的套接字。[0184]图1至图3中所示和/或本公开中其他地方所示或所述的各种组件、功能单元和/或模块可执行使用驻留在一个或多个计算装置中和/或在一个或多个计算装置上执行的软件、硬件、固件或硬件、软件和固件的混合物描述的操作。例如,计算装置可以用多个处理器或多个装置来执行一个或多个这样的模块。计算装置可以执行一个或多个这样的模块,作为在底层硬件上执行的虚拟机。一个或多个这样的模块可以作为操作系统或计算平台的一个或多个服务来执行。一个或多个这样的模块可以作为一个或多个可执行程序在计算平台的应用层执行。在其他示例中,由模块提供的功能可以由专用硬件装置来实现。尽管包含在一个或多个存储装置中的某些模块、数据存储、组件、程序、可执行程序、数据项、功能单元和/或其他项目可以单独示出,但是这些项目中的一个或多个可以组合并作为单个模块、组件、程序、可执行程序、数据项或功能单元来操作。例如,一个或多个模块或数据存储可以组合或部分组合,使得它们作为单个模块来操作或提供功能。此外,一个或多个模块可以彼此结合操作,使得例如一个模块充当另一模块的服务或扩展。此外,存储装置中示出的每个模块、数据存储、组件、程序、可执行程序、数据项、功能单元或其他项目可以包括多个组件、子组件、模块、子模块、数据存储和/或未示出的其他组件或模块或数据存储。此外,存储装置中示出的每个模块、数据存储、组件、程序、可执行程序、数据项、功能单元或其他项目可以以各种方式实现。例如,存储装置中示出的每个模块、数据存储、组件、程序、可执行程序、数据项、功能单元或其他项目可以被实现为在计算装置上执行的操作系统的一部分。[0185]图4是示出根据本公开中描述的一些方面的用于在豆荚和虚拟路由器之间创建数据接口的一个示例工作流程的流程图。出于示例的目的,参考图2至图3的计算装置200和300的组件来描述操作。api服务器320接收实例化豆荚202a的请求,并通过生成和存储用于创建豆荚202a的配置信息来修改配置存储328(402)。豆荚规范(pod.yaml)包括用于生成套接字描述数据的数据。调度器322可以选择计算装置200,作为豆荚202a的主机附属节点。api服务器320可以用一个或多个虚拟网络的列表和豆荚的标识符(例如,通用唯一标识符(pod_uuid)或简单的唯一标识符(pod_uid))来注释豆荚202a。可以使用豆荚的其他形式的标识符。注释可以是豆荚配置的标签,其指示虚拟网络,例如,“虚拟网络a”和“虚拟网络b”。注释还可以指示虚拟网络的接口应该是dpdk接口(例如,使用“interfacetype”)。[0186]网络控制器管理器325监听来自api服务器320的新对象,确定豆荚202a将在计算装置200上实例化,并根据注释确定豆荚202a需要具有注释中指示的虚拟网络的虚拟网络接口。例如,监听可以响应于在restful接口上订阅api服务器320通知。[0187]网络控制器管理器325指示网络控制器324创建虚拟网络,并为虚拟网络的豆荚202a创建虚拟网络接口(404)。网络控制器管理器325可以用将由网络控制器324创建的一个或多个虚拟网络接口的相应uuid(例如,vni_uuids)以及所分配的相应唯一私有虚拟网络地址(以及在某些情况下的mac地址)来注释豆荚。可以使用虚拟网络接口的其他形式的标识符。[0188]网络控制器324可将虚拟网络接口与豆荚202a的接口配置数据中的豆荚相关联。例如,网络控制器324可以为虚拟网络创建虚拟网络接口的列表,并且可以将vni_uuids与豆荚202a的接口配置数据中的pod_uuid相关联。vni-uuids可以是虚拟网络接口的另一标识符,例如,虚拟机接口标识符。网络控制器324可以向计算装置200的虚拟路由器220的虚拟路由器代理216发送接口配置数据25,并在计算装置200中配置相应的虚拟网络接口212(406)。虚拟路由器代理216可以存储每个vni_uuid与相应配置的虚拟网络接口的关联。[0189]为了设置豆荚202a,编排代理209获取豆荚202a的容器规范数据,并确保容器由计算装置200执行(408)。容器规范数据可以包括豆荚202a的pod_uuid。编排代理209调用cni206来为豆荚202a配置虚拟网络接口(410)。cni206请求(412)并从虚拟路由器代理216获得接口配置数据(414)。cni206可以通过请求与包括在豆荚202a的容器规范数据中的pod_uuid相对应的豆荚的接口配置数据,从虚拟路由器代理216获得接口配置数据。[0190]为了创建接口配置数据25(416)中指示的每个虚拟网络接口212,cni206可通过传入配置数据(418)在豆荚202a中创建接口,并可在计算装置200上进行任何必要的更改。步骤418中的配置数据可以包括例如ip地址(ipv4/ipv6)、mac、dns配置、mtu、接口名称以及到dpdk应用程序豆荚202a的vhost控制信道(套接字215a)的vhost套接字dir路径和套接字名称。[0191]cni206通过相应的端口添加消息向虚拟路由器代理216通知现在运行的(通过豆荚202a的配置)虚拟网络接口212(420)。cni206还可以从虚拟路由器代理216获得虚拟网络地址(422),或者通过调用适当的ipam插件获得虚拟网络地址。cni206可以配置豆荚202a网络命名空间内的虚拟网络地址,并且可以通过调用虚拟路由器代理216来建立路由。或者,cni206可以配置豆荚202a网络命名空间内的虚拟网络地址,并且可以通过调用适当的ipam插件来建立与ip地址管理部分一致的路由。cni可以通过通知编排代理209来更新编排控制平面(424)。[0192]图5是示出具有基于dpdk的虚拟路由器和容器化的dpdk工作负载的示例计算装置500的框图,具有根据本公开的一个或多个方面建立的接口。虚拟路由器代理504可以表示虚拟路由器代理216的示例实例。vrouterdpdk数据平面502(以下称为“虚拟路由器502”)可以表示虚拟路由器220或任何dpdkvrouter21的示例实例。虚拟路由器502为计算装置500执行虚拟路由器的“转发平面”或分组转发功能,而虚拟路由器代理504执行虚拟路由器的“控制平面”功能。[0193]虚拟路由器代理504包括配置数据534、虚拟路由和转发实例配置536(“vrf536”)和策略538。虚拟路由器代理504与一个或多个虚拟网络控制器(例如,图1的网络控制器24)交换控制信息。控制信息可以包括虚拟网络路由、低级配置状态,例如,路由实例和用于安装到配置数据534、vrf536和策略538的转发策略。虚拟路由器代理504还可以报告分析状态并将转发状态安装到虚拟路由器502的转发信息526。虚拟路由器代理504可以对穿过虚拟路由器502的每个新流的第一(初始)分组应用慢路径分组处理,并且将对应的流条目安装到新流的流表中,以便虚拟路由器502对该流的后续分组进行快速路径处理。转发信息526可以包括对应vrf536的单独转发信息528a-528n。[0194]虚拟路由器502可包括多个逻辑转发核心510,其可为pthreads。核心510可以在紧密循环中运行,也称为轮询模式。可以使用dpdk队列在它们之间交换分组。每个核心510具有接收队列,该队列可以被其他核心510用来将需要由该核心处理的分组排队。核心还轮询不同的虚拟路由器502接口队列,例如,物理、vm和tap。虚拟路由器502因此可以是多线程用户空间应用。转发核心510轮询物理和虚拟接口。此外,转发核心510可以根据分组处理流水线进行虚拟路由器502的分组处理。[0195]核心510的特定转发核心(“vhost核心”)以客户端模式或服务器模式处理vhost用户控制信道562上dpdk豆荚506和虚拟路由器502之间的消息。与dpdk豆荚506的通信是通过unix套接字560进行的。一旦建立了通信信道,就发生userspacevhost协议。在该协议消息交换期间,豆荚506和vrouter交换关于豆荚存储区域、virtio环地址和支持的特征的信息。在消息交换结束时,启用共享内存520上的virtio环522,并且可以发生豆荚506和虚拟路由器502之间的数据通信。这样,环522和控制信道562构成了作为dpdk接口的豆荚506的虚拟网络接口。如上所述,虚拟网络接口配置有网络配置数据(例如,覆盖/虚拟ip地址),用于转发源自或去往豆荚506的分组。[0196]豆荚506为启用dpdk的豆荚,dpdk本地应用程序508为启用dpdk的容器化应用程序,其使用virtiopmd516和virtio装置517设置映射在virtio环上的dpdk环,并与虚拟路由器502交换覆盖分组。[0197]另一核心510负责在虚拟路由器代理504和虚拟路由器502之间发送和接收数据包。一旦建立了到虚拟网络链接信道552(例如,通过套接字)的虚拟路由器代理,就触发该通信的初始化序列。虚拟路由器代理504使用网络链接信道将“pkt0”或“vif0/2”接口添加到虚拟路由器502进程。虚拟路由器502然后在路径“/var/run/vrouter/dpdk_pkt0”中创建unix套接字。虚拟路由器代理504将使用该套接字向虚拟路由器502发送分组。此外,还连接到vrouter代理已经创建的另一unix套接字。虚拟路由器代理504unix套接字的路径是“/var/run/vrouter/agent_pkt0”。虚拟路由器502将使用该套接字向虚拟路由器代理504发送分组。套接字协议属于packet类型,这意味着信道只传送分组。[0198]接口vif0/1连接到linux内核中的接口vhost0。单独的管理接口544连接豆荚506的eth0540和虚拟路由器502的virtio/tap接口542。[0199]轨迹或钨织物是示例网络控制架构。cni206可以被开发用于轨迹或钨织物。轨迹/钨结构控制器可以是网络控制器24的一个示例。[0200]图6为根据此处描述的技术的计算装置组件的示例操作模式的流程图。虚拟路由器220和支持dpdk的豆荚202a使用套接字目录创建unix域套接字215a,该套接字目录可由豆荚202a访问,但不可由部署到计算装置200的任何其他豆荚(除了包括虚拟路由器220的豆荚)(例如,豆荚202b)访问(602)。虚拟路由器220在包括计算装置200的计算基础设施中实现虚拟网络,以使得能够在经由虚拟网络连接的虚拟网络端点之间进行通信(604)。虚拟网络端点可以包括豆荚202a。使用unix域套接字215a,虚拟路由器220和豆荚202a交换虚拟路由器220和豆荚202a之间的基于dpdk的数据接口212a的控制通信(606)。[0201]图7为示出根据此处描述的技术的编排器的示例操作模式的流程图。尽管针对编排器23进行了描述,但是操作700可以由本文描述的任何编排器或编排系统来执行。编排器23获得豆荚的豆荚规范(702)。该豆荚规范包括用于生成套接字描述数据的数据,该套接字描述数据指示当豆荚被部署到计算装置时豆荚用于创建unix域套接字的文件系统资源,所述文件系统资源可由所述豆荚访问并且不可由部署到计算装置的任何其他豆荚访问。编排器23向在计算装置上执行的编排代理输出豆荚规范,其中,编排代理是编排器的代理(704)。[0202]本文描述的技术可以在硬件、软件、固件或其任何组合中实现。被描述为模块、单元或组件的各种特征可以在集成逻辑设备中一起实现或在单独作为离散但可互操作的逻辑设备或其他硬件设备中实现。在一些情况下,电子电路的各种特征可以实现为一个或多个集成电路设备,例如集成电路芯片或芯片组。[0203]如果以硬件实现,则本公开可以涉及诸如处理器或集成电路设备的器械,诸如集成电路芯片或芯片组。替代地或另外地,如果以软件或固件实现,则这些技术可以至少部分地通过包括指令的计算机可读数据存储介质来实现,所述指令在被执行时使处理器执行上述方法中的一个或多个。例如,计算机可读数据存储介质可以存储这样的指令以供处理器执行。[0204]计算机可读介质可以形成计算机程序产品的一部分,该计算机程序产品可以包括包装材料。计算机可读介质可以包括计算机数据存储介质,例如随机存取存储器(ram)、只读存储器(rom)、非易失性随机存取存储器(nvram)、电可擦除可编程只读存储器(eeprom)、闪存、磁性或光学数据存储介质等。在一些示例中,制品可以包括一个或多个计算机可读存储介质。[0205]在一些示例中,计算机可读存储介质可以包括非暂时性介质。术语“非暂时性”可指示存储介质没有体现在载波或传播信号中。在某些示例中,非暂时性存储介质可以存储可以随时间改变的数据(例如,在ram或缓存中)。[0206]代码或指令可以是由包括一个或多个处理器的处理电路执行的软件和/或固件,例如一个或多个数字信号处理器(dsp)、通用微处理器、专用集成电路(asic)、现场-可编程门阵列(fpga),或其他等效的集成或离散逻辑电路。因此,如本文所使用的术语“处理器”可指任何前述结构或适合于实现本文所描述的技术的任何其他结构。此外,在一些方面,本公开中描述的功能可以在软件模块或硬件模块内提供。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献