背景技术:
公共云服务提供者向公众提供诸如存储和应用之类的云服务。在公共云(或公共数据中心)中,服务提供者控制超级监督者(hypervisor),并且不能提供健壮或透明的安全能力。因此,期望在公共云部署中使用由第三方(即,公共云服务提供者以外的实体)提供的虚拟化网络。这种跨云的虚拟化网络提供了针对在公共云服务提供者的基础设施和网络上预配置(provision)的访客虚拟机(vm)上运行的工作负载强制实施网络和安全策略的能力。第三方创建的虚拟化网络可以使用覆盖来提供逻辑联网,或者简单地与原生联网集成并且还提供除原生网络的服务之外的服务。
在本地(on-premise)环境中,通过在底层超级监督者上提供网络和安全服务来管理在访客vm上运行的客户应用。但是,在公共云环境中,第三方网络虚拟化平台只能访问访客vm,而不能访问在其上预配置vm的底层超级监督者。另一方面,在公共云中,服务提供者控制在其上运行访客vm的底层虚拟化基础设施。公共云中的虚拟化基础设施不会暴露给最终用户。
vm使用的原生网络可以是由云服务提供者提供的虚拟网络。因此,第三方虚拟化网络预配置的逻辑网络位于云服务提供者的虚拟网络之上并且对云服务提供者来说不可见。当在第三方创建的虚拟化网络的逻辑空间中预配置vm时,vm的网络接口将成为第三方网络虚拟化提供者管理的逻辑地址空间的一部分。因此,网络接口无法访问云服务提供者的原生网络。
技术实现要素:
一些实施例提供了一种方法,该方法允许公共云中的vm访问云服务提供者的原生网络(被称为底层网络)地址空间以及由第三方网络虚拟化提供者预配置的逻辑地址空间(被称为覆盖网络)两者中的服务端点。该方法允许vm使用单个网络接口和单个路由表来访问云服务提供者的原生网络地址空间和第三方逻辑地址空间。
该方法在vm上安装受管理的转发元件(mfe)内核驱动程序(诸如openvswitch(开源虚拟交换机,ovs)内核驱动程序)。mfe内核驱动程序被用作vm上虚拟接口的软件交换机。基于操作的模式(即,覆盖或底层),创建一个或两个虚拟适配器。虚拟适配器中的一个被用于访问覆盖网络(被称为覆盖虚拟适配器),而另一个虚拟适配器被用于访问底层网络(被称为底层虚拟适配器)。在一些实施例中,覆盖虚拟适配器是虚拟接口(vif),而底层虚拟适配器是虚拟隧道端点(vtep)。使用一个路由表将来自网络堆栈(例如,传输控制协议/互联网协议(tcp/ip)堆栈)的所有分组发送到任一虚拟适配器。mfe在接收和传输路径上在逻辑接口与底层网络接口卡(nic)之间转发分组。
覆盖虚拟适配器是第三方覆盖联网空间的一部分,而底层虚拟适配器是由云服务提供者提供的底层网络空间的一部分。使用mfe和底层虚拟适配器对源自覆盖虚拟适配器的网络分组进行隧道化。直接从底层网络发送出去的网络分组无需隧道化即可发送,并在底层网络空间中被转发或路由。
vm的路由表被配置使得与底层虚拟适配器不在同一层2(l2)子网中的所有流量都将覆盖虚拟适配器用作出口接口。因而,注定去往除公共云服务提供者的网络之外的任何网络的流量是从覆盖虚拟适配器发送出去的。
通过使用与底层虚拟适配器相比较低的覆盖虚拟适配器的接口度量来以这种方式建立路由表。路由度量随接口度量而变,并且较低的接口度量会翻译为较低的路由度量,这进而优于具有较高路由度量的路由。因此,通过覆盖虚拟适配器的默认路由比经由底层虚拟适配器的默认路由具有较高的优先级。因此,所有不是底层虚拟适配器的子网一部分的流量都从覆盖虚拟适配器发送出去。
由于覆盖虚拟适配器属于第三方管理的覆盖网络空间,因此无法按原样使用这个虚拟适配器来到达在云服务提供者管理的底层网络空间中的云服务提供者端点。为了使用覆盖虚拟适配器访问底层服务端点,一些实施例学习用户想要直接通过vm访问的服务端点ip地址。然后,在由第三方网络管理器预配置的逻辑路由器中配置逻辑路由,以经由连接到底层网络空间的逻辑路由器上的逻辑接口将流量从覆盖虚拟适配器指引到底层端点,下一跳为底层下一跳。底层逻辑接口负责底层网络空间中的arp解析等。
源网络地址翻译(snat)对发送出去到底层网络的vm租户应用流量执行。分组的源ip地址被翻译成vm的底层ip地址(例如,底层网络vtep的ip地址)。对从底层端点接收到的返回流量执行反向snat(un-snat)操作。分组报头中的目的地地址被翻译回覆盖虚拟适配器的原始逻辑ip地址。然后,覆盖虚拟适配器将分组转发到网络堆栈,网络堆栈进而将分组转发到租户应用。
对于底层端点所连接到的vm中托管的应用,底层逻辑接口上的不是覆盖流量的传入流量要经受目的地网络地址翻译(dnat)。对于到其中连接是源自底层网络的租户应用的传入流量,目的地地址被翻译成覆盖虚拟适配器的逻辑ip地址。对对应的返回流量执行反向dnat(un-dnat)。在一些实施例中,用户(例如,系统管理员)可以配置在vm中托管的应用的列表,对于这些应用,传入流量经受dnat/un-dnat操作。
第三方逻辑网络被用于基于用户配置在工作负载vm上强制实施安全性。由在访客vm内运行的mfe代理和第三方网络管理器服务器提供用于逻辑和底层联网的安全性。此外,云服务提供者的安全服务被用于提供底层网络安全性。例如,除了由第三方网络管理器服务器提供的分布式防火墙之外,还使用云服务提供者提供的安全组。
前面的发明内容旨在用作对本发明的一些实施例的简要介绍。它并不意味着是对本文档中公开的所有发明性主题的介绍或概述。以下的具体实施方式和在具体实施方式中提及的附图将进一步描述在本发明内容中描述的实施例以及其它实施例。因而,为了理解本文档描述的所有实施例,需要对发明内容、具体实施方式和附图进行全面地审查。而且,要求保护的主题不受发明内容、具体实施方式和附图中的说明性细节的限制,而是由所附权利要求定义,因为要求保护的主题可以以其它具体形式实施而不背离主题的精神。
附图说明
本发明的新颖特征在所附权利要求中阐述。但是,为了解释的目的,在以下图中阐述了本发明的若干实施例。
图1图示了在本地或私有云网络中实现的mfe。
图2概念性地图示了在一些实施例中用于由第三方为公共云网络中的vm提供覆盖服务的系统。
图3概念性地图示了在一些实施例中包括传输桥(transportbridge)和集成桥以支持覆盖服务的mfe内核驱动程序。
图4概念性地图示了在一些实施例中包括传输桥和集成桥以支持底层服务的mfe内核驱动程序。
图5概念性地图示了在一些实施例中用于执行windows访客操作系统的vm的ovs驱动程序的架构。
图6a概念性地图示了一些实施例的用于将从在公共云提供者主机机器上托管的vm发起的分组转发到覆盖或底层网络上的其它实体的高级处理。
图6b概念性地图示了一些实施例的用于将从在公共云提供者主机机器上托管的vm外部发起的分组转发到vm中的实体的高级处理。
图7概念性地图示了在一些实施例中的用于对从租户应用从第三方覆盖网络被发送到公共云底层网络的分组进行源地址翻译的处理。
图8概念性地图示了在一些实施例中的用于对从公共云底层网络被发送到第三方覆盖网络中的租户应用的分组进行目的地地址翻译的处理。
图9概念性地图示利用其实现本发明的一些实施例的电子系统。
具体实施方式
在公共云中,服务提供者控制在其上运行访客vm的底层虚拟化基础设施并且不将虚拟化基础设施暴露于最终用户。由此,为了使服务提供者以外的实体为最终用户的应用提供网络和安全服务,必须直接在访客vm上提供此类服务,而无需底层虚拟化基础设施的支持。
这与在本地(例如,在私有云网络上)如何提供虚拟联网服务形成对比,其中通过直接利用虚拟化软件(例如,超级监督者)递送虚拟联网特征来提供服务。一些实施例提供数据路径以支持针对公共云中的访客的虚拟联网。在一些实施例中,访客利用不提供不同命名空间的访客操作系统,诸如microsoftwindows。虽然下面通过参考windows访客操作系统提供了若干示例,但是应当理解的是,本发明不限于这个示例性操作系统。
在一些实施例中,分组处理操作(例如,分类操作、转发动作等)由作为软件转发元件操作的受管理的转发元件(mfe)执行。openvswitch(ovs)是基于流条目的软件转发元件的示例。在一些实施例中,mfe在托管虚拟机的主机机器或用作分组的源和目的地的其它数据计算节点上(例如,在这种主机的虚拟化软件中)操作。
mfe可以被用于为由本地服务提供者托管的访客vm实现数据路径。图1图示了在本地或(私有云)网络中实现的mfe。在本地网络中,租户可以访问主机中由服务提供者提供的转发元件和虚拟化软件。
如图所示,本地主机105包括创建访客vm110-115的虚拟化软件130。vm是诸如计算机之类的机器的软件实现。本地主机包括软件交换机120。主机软件交换机120通常不是基于流条目的交换机。在这个示例中,访客提供了mfe扩展模块125,该模块为租户vm110-115提供基于流条目的功能(诸如ovs功能)。
由于主机105是本地主机,因此租户可以访问主机的虚拟化软件130(如133所示)和软件交换机120(如140所示)。虚拟化软件130为mfe扩展125提供钩子以处置来自vm110-115的分组,vm110-115连接到主机软件交换机120。mfe扩展模块125(在这个示例中是第三方驱动程序)充当软件交换机120的扩展,以便为vm110-115提供基于流条目的分组交换(例如,为了让vm在它们之间进行通信,以便与服务提供者网络145通信)。
i.为公共云网络中的覆盖和底层服务提供数据路径
在诸如amazonwebservices(aws)或microsoftazure之类的公共云环境中,虚拟化软件由云服务提供者控制,并且诸如mfe扩展125之类的第三方驱动程序无权访问虚拟化软件或主机mfe。为了向公共云环境中的vm提供mfe服务(例如,基于流的分组转发),一些实施例提供了能够在不访问主机的虚拟化软件的情况下工作的新数据路径。在一些实施例中,新的数据路径被实现为内核驱动程序。为了促进核心mfe功能跨公共云和本地云环境的更轻松重用,数据路径提供了交换机实施方式,在本文被称为mfe扩展与之接口连接的基本交换机,从而模拟由云服务提供者提供的mfe交换机的行为。
a.为公共云中的覆盖服务提供数据路径
一些实施例在vm中创建两个分开的虚拟适配器,以便为公共云中的vm提供覆盖服务。一个虚拟适配器被vm用于访问第三方覆盖网络,而另一个虚拟适配器被用于访问公共云服务提供者的网络。在整个说明书中,术语底层网络是指服务提供者的网络,而术语底层网络接口卡(nic)是指由虚拟化软件暴露的虚拟nic,以支持访客vm的网卡。
图2概念性地图示了在一些实施例中用于由第三方为公共云网络中的vm提供覆盖服务的系统。第三方是指无法访问公共云网络中主机机器的虚拟化软件的实体。第三方可以是不隶属于公共云服务提供者的供应商、租户等。
虽然图2是软件图,但是主机205也被示为具有硬件290,以便表示作为硬件实体的物理网络接口卡(pnic)。该图示出了租户vm210,其在由公共云服务提供者提供的主机205上托管。由于租户无法访问公共云中主机机器的虚拟化软件,因此在每个租户vm210中实现了提供第三方逻辑网络的设施,其中一个在图2中示出。
逻辑网络是物理网络的抽象并且可以为服务(诸如将网络层数据分组封装和解封装为帧、帧同步、介质访问控制等)提供虚拟层2(或数据链路层)。逻辑网络可以跨越一个或多个物理网络并且可以独立于物理网络的底层物理拓扑和组织进行组织。
租户vm210执行租户应用的集合(例如,web服务器、数据库服务器、应用服务器等)250。租户vm210还执行第三方应用255的集合。第三方应用的示例包括被用于创建租户逻辑网络(本文被称为覆盖网络)并为vm210强制实施网络和安全策略的不同网络管理器代理或守护进程。vm还包括网络堆栈230,诸如tcp/ip堆栈。
vm还包括mfe内核驱动程序215、用于访问第三方覆盖网络的第一虚拟适配器235和用于访问底层(或公共云)网络的第二虚拟适配器240。在一些实施例中,mfe内核驱动程序215和虚拟适配器235-240由网络管理器应用255配置。
在一些实施例中,mfe内核驱动程序215是ovs内核驱动程序。在一些实施例中,第一虚拟适配器是虚拟接口(vif),在本文中被称为覆盖虚拟适配器。在一些实施例中,第二虚拟适配器是隧道端点,诸如虚拟可扩展局域网(vxlan)隧道端点(vtep),在本文中被称为底层虚拟适配器。
vif是网络接口的抽象,其允许应用访问独立于所涉及的物理接口的接口。覆盖网络是一种在计算环境中实现多租户的网络虚拟化技术。vtep被用于将最终设备连接到vxlan片段并执行vxlan封装和解封装。在一些实施例中,第二虚拟适配器是用于其它类型的覆盖网络(诸如通用网络虚拟化封装(geneve)或使用通用路由封装的网络虚拟化(nvgre))的隧道端点。vxlan是层3(l3)网络上的l2覆盖方案。vxlan将以太网l2帧封装在ip中(mac-in-udp封装)并允许vm成为在分开的物理l3网络中操作的虚拟化l2子网的一部分。类似地,nvgre使用通用路由封装(gre)在l3网络上隧道化l2分组。
基于存储在路由表290中的值,来自网络堆栈230的所有分组被发送到覆盖虚拟适配器235或者底层虚拟适配器240。mfe内核驱动程序215在接收和传输路径上在虚拟适配器235-240和pnic245之间转发分组。
vm的路由表290被配置为使得与底层虚拟适配器不在同一l2子网中的所有流量使用覆盖虚拟适配器作为出口接口。换句话说,注定去往与底层网络适配器的子网不同的网络的任何流量都将从覆盖网络适配器发送出去。同一子网中的所有设备都具有相同的网络前缀。网络前缀以无类域间路由(cidr)表示法表示,该表示法表述网络前缀,后面跟着斜杠字符(“/”),后面跟着前缀长度(以位为单位)。例如,在互联网协议版本4(ipv4)中,ip地址包括32位,并且172.16.0.1/20指示为子网分配了ip地址的20位并且剩余的12位被用于识别子网上的各个目的地。
路由表290是通过为覆盖虚拟适配器指派比底层虚拟适配器较低的接口度量来配置的。接口量度是指派给特定接口的路由的值,以识别与使用通过特定接口的路由相关联的成本。用于路由的度量随接口度量而变,这意味着较低的接口度量翻译成较低的路由度量,这进而使该路由优于具有较高路由度量的路由。通过覆盖虚拟适配器的默认路由比经由底层虚拟适配器的默认路由具有较高的优先级。因此,默认情况下,所有不是底层虚拟适配器的子网一部分的流量都从覆盖虚拟适配器发送出去。
图2中的租户vm210所使用的访客操作系统是不支持多个命名空间的操作系统,诸如windows。例如,访客操作系统可以是windows,而虚拟化软件130可以是microsofthyper-v。另一方面,诸如linux之类的操作系统允许使用多个命名空间。命名空间是抽象的容器或环境,创建该容器或环境是为了保持唯一标识符或符号的逻辑分组。在命名空间中定义的标识符(诸如ip地址)仅与那个命名空间相关联,而在其它命名空间中则无法识别。
分开的命名空间提供路由表分离。在诸如linux之类的操作系统中,可以有两个不同的命名空间并且在租户应用使用的命名空间中创建覆盖虚拟适配器并且在物理nic和网络管理器应用使用的另一个命名空间中创建覆盖虚拟适配器。使用两个分开的命名空间极大地简化了路由问题,因为应用仅看到一个接口并且默认情况下在路由表中挑选覆盖虚拟适配器。在图2的实施例中,访客操作系统不提供多个命名空间,因此使用单个路由表。
路由表290暴露应用编程接口(api)和命令以将度量的特性赋予与接口对应的路由。在初始化期间,设置路由表,使得一旦创建了覆盖虚拟适配器235和底层虚拟适配器240,就赋予覆盖虚拟适配器较高的优先级。例如,为底层虚拟适配器的度量指派比任何可能的度量都大的数字(例如,999)。覆盖虚拟适配器度量被指派比底层虚拟适配器度量低的数字(例如,1、10、100等)。
由于覆盖虚拟适配器235属于第三方管理的覆盖网络空间,因此不能按原样使用覆盖虚拟适配器来到达在云服务提供者管理的底层网络空间260中的云服务提供者端点。为了使用覆盖虚拟适配器访问底层服务端点,一些实施例学习租户应用想要直接通过vm访问的服务端点ip地址。在由第三方网络管理器预配置的层3(l3)逻辑路由器中配置逻辑路由,以经由连接到底层网络空间的逻辑路由器上的逻辑接口将流量从覆盖虚拟适配器指引到底层端点,下一跳为底层下一跳。底层虚拟适配器负责底层网络空间中的地址解析协议(arp)等。
对于覆盖服务,数据路径必须支持隧道协议,因此要求底层虚拟适配器和/或mfe215对传输分组执行隧道分组封装,并对接收到的被隧道的分组执行隧道分组解封装。底层nic245上的所有底层联网配置(诸如ip地址和路由配置)都被转移到底层虚拟适配器240。覆盖虚拟适配器235的联网配置由第三方网络管理器代理(例如,网络管理器应用255之一)或由vm的用户控制。
在图2的示例中,存在三种不同类型的通信路径。第一种类型的通信路径是在租户vm210中的租户应用250与同一覆盖网络上的其它租户vm中的租户应用之间的路径。这种路径使用第三方覆盖网络的ip地址,并且vm之间传送的分组由覆盖网络报头封装和解封装。这种路径从租户应用250穿过网络堆栈230,到达覆盖虚拟适配器235,到达底层虚拟适配器240(如216所示),再到达pnic245(如217所示)。
第二种类型的通信路径是租户应用250与底层网络260中的实体(或节点)之间的路径。租户应用250使用由第三方覆盖网络定义的ip地址,并且底层网络实体使用由公共云提供者的网络定义的ip地址。从租户应用250发送到服务提供者网络260中的实体的分组要求源网络地址翻译(snat)。回复分组经受un-snat操作。从服务提供者网络260中的实体发起并寻址到租户应用250的分组要求目的地网络地址翻译(dnat)。回复分组经受un-dnat操作。在这种路径中传送的分组不要求覆盖网络封装和解封装。这种路径从租户应用250穿过网络堆栈230,到达覆盖虚拟适配器235,再到达pnic245(如218所示)。
第三种类型的通信路径是网络管理器应用255与服务提供者网络260中的实体之间的路径。在这种路径中交换的分组使用服务提供者网络的ip地址。在这种路径中无需对分组进行地址翻译或封装/解封装。这种路径从网络管理器应用255穿过网络堆栈230,到达底层虚拟适配器240,再到达pnic245(如217所示)。这些路径的进一步细节在下面参考图3进行描述。
为了适当地转发来自虚拟适配器的分组,在一些实施例中,mfe驱动程序包括两个桥。图3概念性地图示了一些实施例中的mfe内核驱动程序395,其包括传输桥315和集成桥310以支持覆盖服务。覆盖虚拟适配器(例如,图2中的覆盖虚拟适配器235)被配置为mfe集成桥310上的端口330。底层虚拟适配器(例如,图2中的底层虚拟适配器240)被配置为mfe传输桥315上的端口335。网络管理器应用225通过底层虚拟适配器335访问底层网络260(如由网络管理器通道385所示),而无需通过覆盖网络适配器330。
在两个桥中的每个桥上创建端口341-342,以创建用于在覆盖网络适配器330(即,集成桥310上的端口330)到位于传输桥315上的底层nic端口370之间的流量的传输。在一些实施例中,端口341-342是用于将两个桥彼此连接的接插(patch)端口。
基于用户选定的隧道协议,在集成桥上创建一个或多个隧道端口340(在本文中被称为覆盖端口),其负责分别对来自端口330和到端口330的分组上的隧道报头进行封装和解封装。第三方网络管理器局部控制面(lcp)代理和中央控制面(ccp)可以对通过用户空间守护进程(例如,网络管理器应用255)的数据路径流进行编程。分布式防火墙(dfw)规则由网络管理器应用255进行编程,以便为租户应用250分组流量强制实施安全策略。
上面参考图2描述的三种类型的通信路径出现在图3中。第一通信路径是vm210中的租户应用250和同一覆盖网络上的其它租户应用之间的路径。这条路径来自(或到达)租户应用250并经过网络堆栈230、覆盖虚拟适配器(即,端口330,其可以是vif)、mfe集成桥310、覆盖端口340、底层虚拟适配器(即,端口335,其可以是vtep)、mfe传输桥315、nic端口370和物理nic245。然后,该分组被传送到(或来自)同一主机205上或者另一个主机上的另一个租户应用。取决于实施方式以及源租户应用和目的地租户应用是在同一主机上还是不同主机上,分组可以通过或者可以不通过服务提供者网络260。
第二通信路径在vm210中的租户应用250与底层网络260中的实体之间。这条路径来自(或到达)租户应用250,并通过网络堆栈230、端口330、mfe集成桥310、接插端口341和342、mfe传输桥315、nic端口370和物理nic245,到达(或来自)服务提供者网络260中的实体。
第三通信路径在网络管理器应用255与服务提供者网络260中的实体之间。这条路径来自(或到达)网络管理器应用255,并通过网络堆栈230、端口335、mfe传输桥315、nic端口370和物理nic245,到达(或来自)服务提供者网络260中的实体。
b.为公共云中的底层服务提供数据路径
一些实施例提供新的数据路径,以将网络安全和管理策略应用于访问底层服务的用户应用。这些策略被应用于数据路径上。创建单个虚拟适配器,该虚拟适配器绑定到对应的底层nic。在一些实施例中,这个虚拟适配器模拟vif的行为。底层nic上的所有网络配置(诸如ip地址和路由配置)都被转移到虚拟适配器上,以提供对底层服务的访问。
图4概念性地图示了一些实施例中的mfe内核驱动程序495,其包括传输桥415和集成桥410以支持底层服务。mfe用户空间守护进程(例如,网络管理器应用255)被用于配置mfe桥。为了将底层nic用于底层服务,创建两个mfe桥,传输桥415和集成桥410。底层nic端口470是传输桥415的一部分,而端口430(例如,vif)是集成桥410的一部分。
在两个桥中的每一个桥上创建接插端口441-442,以创建用于在集成桥410上的端口430与位于传输桥415上的底层nic端口470之间的流量的传输。第三方网络管理器lcp代理和ccp负责对数据路径上的流进行编程,这确定从端口430流出的流量的分组转发行为。dfw规则也由网络管理器应用455进行编程,以强制实施期望的安全策略。
在图4的实施例中,租户应用250不在第三方覆盖网络上。代替地,第三方网络管理器(例如,网络管理器应用455)的服务被用于为租户应用250提供诸如dfw之类的安全性。租户应用250和网络管理器应用455使用服务提供者网络260的ip地址空间。因此,不需要执行snat或dnat以在租户应用250和服务提供者网络中的实体之间交换分组。也不需要执行封装/解封装操作。如图所示,租户应用250和网络管理器应用455都使用相同的虚拟适配器,即mfe集成桥410上的端口430。
ii.mfe驱动程序在公共云和本地云环境中的重用
在一些实施例中,内核驱动程序是ovs驱动程序。ovs驱动程序(在本文被称为ovsim)是网络驱动程序接口规范(ndis)中间内核驱动程序,其重用图1中所示的mfe扩展125功能的大部分。在这些实施例中,ovsim提供ndis协议和ndis微型端口驱动程序功能。ndis是用于nic的api。它由microsoft和3comcorporation联合开发,并且主要用在microsoftwindows中。ovsfm是ndis中间驱动程序,其被用于创建绑定到windows访客vm的底层nic的虚拟微型端口适配器。
图5概念性地图示了在一些实施例中用于执行windows访客操作系统的vm501的ovsim驱动程序505的架构。ovsim驱动程序505包括ovs基本驱动程序530和ovs转发扩展595。ovs基本驱动程序暴露协议驱动程序525和微型端口驱动程序接口510-515。基本交换机520是层2转发部件。ovs扩展595暴露在公共云中从本地(私有)云(图1中示为mfe扩展125)重用的分组处理和动作的核心ovs功能。
如图所示,ovs基本驱动程序530包括两个虚拟适配器。一个虚拟适配器515是在vm中创建以模拟vif行为的覆盖虚拟适配器。另一个虚拟适配器510是在vm中创建以模拟vtep的底层虚拟适配器。基本交换机520提供层2转发功能,以及ovs基本驱动程序530和ovs扩展595之间的接口580。
vm用户空间551中的ovs守护进程530被用于创建用户空间配置,诸如向其添加虚拟微型端口和底层网络接口的ovs桥。用户空间部件的其它功能包括ovs守护进程配置器531、到ovs的内核部分的接口532、网络设备参数设置533和netlink套接字模拟534。netlink是用于在用户空间和内核空间中运行的进程之间进行进程间通信的接口。
在安装了ovsim505后,可以管理通过虚拟微型端口510-515传输的所有分组,以提供联网和安全策略。使用ovs流在ovs数据路径和用户空间551中配置这些策略。
a.ovs基本驱动程序实施方式
ovs基本驱动程序530是两个驱动程序的组合,协议驱动程序525作为下边缘,而微型端口驱动程序作为其上边缘。微型端口驱动程序使用微型端口边缘暴露一个或多个虚拟微型端口适配器510-515,以与更高层协议驱动程序(诸如tcp/ip)(例如,图2和图3中的网络堆栈230)接口。驱动程序的协议边缘被用于与vtep微型端口适配器510接口,该适配器绑定到底层nic。基本驱动程序本身的协议和微型端口边缘之间的绑定是特定于实施方式的,不受ndis控制。
一旦将驱动程序加载到操作系统中,先前绑定到底层nic的所有更高级别的协议(诸如tcp/ip)都将绑定到该驱动程序创建的虚拟微型端口适配器。先前与底层nic相关联的所有联网配置都与虚拟微型端口适配器相关联。
ovsim配置由被称为通知对象的用户空间部件控制,该部件作为系统数据链接库(dll)暴露于windows操作系统。一旦用户发起了驱动程序负载,通知对象dll就负责创建ovs基本驱动程序加载在内核552中所需的协议和微型端口驱动程序配置。通知对象部件负责创建ovsim内核驱动程序所需的虚拟微型端口适配器配置、向驱动程序发送有关网络配置的改变的通知,并解除较高层协议驱动程序与底层nic的微型端口驱动程序的绑定并将其绑定到新创建的虚拟微型端口驱动程序。通知对象使用由windows操作系统提供的com和inetcfg接口来发起网络配置改变,诸如添加或移除虚拟微型端口。此外,通知对象部件提供了用户界面,以根据期望添加或移除虚拟微型端口适配器。
一旦驱动程序已加载,基于由通知对象部件创建的配置,ovs基本驱动程序的协议边缘就负责创建和引导虚拟微型端口适配器。基于底层nic的操作模式的类型(覆盖或底层),在内核中适当地初始化虚拟微型端口。
b.基本交换机实施方式
基本交换机520是提供层2转发功能的部件。基本交换机维护与ovs基本驱动程序暴露的每个适配器接口对应的端口的列表。该驱动程序为底层nic以及绑定到底层nic的虚拟微型端口暴露接口。对于每个适配器接口(底层或覆盖),在基本交换机520上创建对应的端口。基本交换机部件的主要作用是在其接收的分组中查找目的地端口,并将该分组输出到目的地端口(如果该端口存在的话)。
如果分组具有不属于基本交换机端口列表的一部分的目的地端口,那么分组被丢弃并且向调用者发送回通知。此外,基本交换机还用作ovs基本驱动程序530和ovs扩展595之间的接口。基本交换机520在传输和接收路径上接收来自ovs基本驱动程序的分组,并将分组发送到ovs扩展595,以确定要对分组采取的动作并基于这些操作将分组输出回ovs基本驱动程序530。
在传输路径上,微型端口适配器将分组输入到基本交换机520中,该基本交换机将分组发送到ovs扩展595以进行分组处理。基于对分组所应用的动作,ovs扩展595将分组返回到基本交换机520,基本交换机520或者将分组转发到与底层nic对应的目的地端口或者丢弃分组。类似地,在接收路径上,协议边缘将分组输入到基本交换机520中,并且由基本交换机520基于ovs扩展595对分组所做出的决定采取适当的动作。分组或者被转发到对应的虚拟微型端口,或者被丢弃。
基本交换机520模拟microsofthyper-v交换机的行为,并提供与hyper-v交换机相似到道ovs扩展595的接口。这个模型使得容易将来自本地云(例如,图1中所示的mfe扩展125)的ovs的ovs扩展功能的核心进行重用。ovs基本驱动程序中底层nic或虚拟微型端口适配器的添加或移除反映在基本交换机端口列表中。
c.ovs扩展实施方式
ovs扩展595部件为windows上的ovs提供了核心ovs数据路径功能。在一些实施例中,ovs扩展595还被用作到本地云(例如,以上参考图1描述的mfe扩展125)中的hyper-v可扩展虚拟交换机的ndis转发扩展内核驱动程序。ovs转发扩展595提供功能,诸如切换和数据路径管理、隧道化、事件通知等。
由ovs扩展595部件提供的功能包括netlink消息实现581(包括netlink解析器和netlink套接字)、通过接口驱动程序571与ovs用户空间551部件接口连接、端口管理和端口表582、流表583、分组处理584和连接跟踪585。
核心ovs扩展功能的大部分被重用于为公共云和本地云创建的数据路径。本地云中的ovs扩展被用作驱动程序,而在公共云中,ovs扩展被用作为ovsim和基本交换机模块提供核心ovs功能的部件。
基本交换机提供类似于hyper-v虚拟交换机的功能。与本地云中使用ndis与hyper-v虚拟交换机接口连接相比,ovs扩展直接与基本交换机直接接口连接。来自虚拟微型端口或底层nic的所有分组都被输入到基本交换机,然后是ovs扩展。基于由ovs扩展确定的动作,分组被输出到对应的基本交换机端口。
iii.在第三方逻辑网络与公共云网络之间交换分组
如以上参考图2和图3所述,一些实施例在公共云提供者主机机器上托管的vm中提供三条不同的通信路径。图6a概念性地图示了一些实施例的用于将从在公共云提供者主机机器上托管的vm发起的分组转发到覆盖网络或底层网络上的其它实体的高级处理601。在一些实施例中,该处理由mfe内核驱动程序(诸如分别图2和图3中的mfe内核驱动程序215和395)执行。
如图所示,处理在mfe内核驱动程序处接收(在605处)从vm外部发起的分组。例如,处理在图2中的mfe内核驱动程序215处或在图3中的mfe内核驱动程序395处从网络堆栈230接收分组。然后,处理确定(在610处)是否在mfe内核驱动程序的底层虚拟适配器处从vm中的网络管理器应用接收到分组。例如,处理确定是否分别在图2或图3中的底层虚拟适配器240或333处通过网络堆栈230从网络管理器应用255接收到分组。如果是,那么处理前进到650,如下所述。
否则,在图2中的覆盖网络适配器235(或图3中的330)处接收分组。处理确定(在615处)分组是否从vm中的租户应用寻址到底层网络中的实体。例如,处理确定分组是否从租户应用#0250被接收到并被寻址到服务提供者网络#0260ip地址空间中的服务器或节点。如果是,那么处理前进到630,如下所述。否则,分组是从vm210中的租户应用250发送到另一个vm中的覆盖网络上的租户应用的分组。例如,分组是在图2中的覆盖虚拟适配器235(或图3中的330)处从租户应用250接收到的分组。因此,处理对分组执行(在620处)覆盖网络封装。例如,在图3中的端口330处接收到的分组被发送到mfe集成桥310,mfe集成桥310对分组执行封装。
然后,处理将分组发送(在625处)到pnic,以将分组转发到覆盖网络目的地。例如,参考图2,处理将分组从覆盖虚拟适配器235转发到底层虚拟适配器240(如216所示),再转发到pnic245(如217所示),以将分组发送到覆盖网络目的地。而且,参考图3,处理将分组从mfe集成桥310、覆盖端口340、端口335、mfe传输桥315和nic端口370转发到pnic245,以将分组发送到覆盖网络目的地。然后处理结束。
当处理确定分组是从覆盖网络上的租户应用接收到的并且该分组被寻址到底层网络中的实体时,处理确定(在630处)分组是否是从租户应用发送到底层网络实体的回复分组。例如,如果租户应用是web服务器,那么租户应用可以发送分组作为对从公共云(即,底层网络)ip地址空间中的实体接收的请求的回复。
如果是,那么处理前进到下面描述的645。否则,处理对分组执行(在635处)snat。例如,由图3中的mfe传输桥315对分组执行snat。下面参考图7描述对分组执行snat的细节。然后,处理向pnic发送(在640处)分组,以转发到底层网络。例如,参考图2,处理将分组转发到pnic245以向底层网络目的地发送。而且,参考图3,处理通过nic端口370将分组从(执行snat操作的)mfe传输桥315转发到245,以向服务提供者网络260中被寻址的实体发送。然后处理结束。
当处理确定该分组是回复分组时,处理对分组执行(在645处)un-dnat操作。下面将进一步描述un-dnat操作的细节。然后,处理向pnic发送(在647处)分组,以转发到底层网络。然后处理结束。
当在底层虚拟适配器处从网络管理器应用接收到分组时,处理将分组发送(在645处)到pnic以转发到底层网络目的地。例如,参考图2,处理将分组从底层虚拟适配器240转发到pnic245(如217所示)以转发到底层网络目的地。而且,参考图3,处理将分组从端口335通过mfe传输桥315和nic端口370转发到pnic245,以转发到底层网络目的地。由于源实体和目的地实体两者都使用底层网络地址空间的ip地址,因此不对分组执行snat/dnat或封装/解封装。然后处理结束。
图6b概念性地图示了一些实施例的用于将从在公共云提供者主机机器上托管的vm外部发起的分组转发到vm中的实体的高级处理602。在一些实施例中,处理由mfe内核驱动程序(诸如分别图2和图3中的mfe内核驱动程序215和395)执行。
如图所示,处理在mfe内核驱动程序处接收(在655处)从vm外部发起的分组。然后,处理确定(在657处)分组是否从底层网络中的实体被接收到并且被寻址到vm中的网络管理器应用。如果是,那么处理前进到695,如下所述。否则,处理确定(在660处)分组是否从底层网络中的实体被接收到并且被寻址到vm中的租户应用。
如果是,那么处理前进到672,如下所述。否则,分组从覆盖网络上的实体被接收并被寻址到vm中的租户应用。因此,处理对分组执行(在665处)覆盖网络解封装。例如,在nic端口370处从pnic245接收到的分组通过mfe传输桥315、端口335和覆盖端口340发送到集成桥,该集成桥对分组执行覆盖网络解封装。
处理将分组通过覆盖虚拟适配器发送(在670处)到被寻址的租户应用。例如,参考图3,处理通过端口330(其为覆盖虚拟适配器)和网络堆栈230将来自mfe集成桥310(其执行解封装)的分组转发到目的地租户应用250。然后处理结束。
当分组从底层网络中的实体被接收到并被寻址到vm中的租户应用时,处理确定(在672处)该分组是否是底层网络实体已经响应于来自租户应用的请求而发送的回复分组。如果是,那么处理前进到685,如下所述。否则,处理对分组执行(在675处)dnat。例如,由图3中的mfe传输桥315对分组执行dnat。下面参考图8描述对分组执行dnat的细节。
然后,该处理将分组通过覆盖虚拟适配器发送(在680处)到被寻址的租户应用。例如,参考图2,处理将分组从覆盖虚拟适配器235和网络堆栈230转发到目的地租户应用250。而且,参考图3,处理将分组从mfe集成桥310、端口330和网络堆栈230转发到目标租户应用250。然后处理结束。
当分组从底层网络中的实体被接收到并且该分组是发送到租户应用的回复分组时,该处理对分组执行(在685处)un-snat操作。下面参考图8描述un-snat操作的细节。然后,处理将分组通过覆盖虚拟适配器发送(在690处)到被寻址的租户应用。例如,参考图2,处理将分组从覆盖虚拟适配器235和网络堆栈230转发到目的地租户应用250。而且,参考图3,处理将分组从mfe集成桥310、端口330和网络堆栈230转发到目的地租户应用250。然后处理结束。
当分组从底层网络中的实体被接收到并且被寻址到vm中的网络管理器应用时,处理将分组通过底层虚拟网络适配器发送(在695处)到被寻址的网络管理器应用,而无需解封装或网络地址翻译。例如,参考图2,处理通过底层虚拟适配器240和网络堆栈230将从pnic245(如217所示)接收到的分组转发到目的地网络管理器应用255。而且,参考图3,处理通过nic端口370将从pnic245接收到的分组转发到mfe传输桥315、端口335、网络堆栈230到目的地网络管理器应用255。然后处理结束。
公共云网络和第三方覆盖网络具有不同的ip地址。因此,公共云的底层网络无法识别覆盖网络中的地址,反之亦然。对于在覆盖网络上的图2和图3中的租户应用250与底层网络260中的实体之间交换的分组,一些实施例执行网络地址翻译(nat)。
一些实施例对从租户应用发送的分组执行源网络地址翻译(snat),以从底层虚拟适配器出口到公共云网络。snat被用于将传出分组的源ip地址(以及相应地通过un-snat操作的传入分组的目的地ip地址)从第三方提供的覆盖网络的ip地址修改为公共云网络的ip地址。
例如,从图2中的租户应用250通过网络堆栈230和覆盖虚拟适配器235发送到公共云网络260中的目的地的分组是由覆盖虚拟适配器翻译的源网络地址。类似地,从图3中的租户应用250通过网络堆栈230、端口330、mfe集成桥310、接插端口341和342、mfe传输桥315和nic端口370发送到pnic245再到公共云网络260中的目的地的分组是由mfe集成桥310翻译的源网络地址。
每个分组的源ip地址从始发租户应用的源地址翻译成vm210的底层ip地址。对从底层端点返回到租户应用的逻辑ip地址的返回流量执行un-snat操作(如下文进一步参考图8所讨论的)。
图7概念性地图示了在一些实施例中的用于对从租户应用从第三方覆盖网络被发送到公共云底层网络中的目的地的的分组进行源地址翻译的处理700。处理示出了上面参考图6a-图6b讨论的snat和un-dnat操作的细节。经受snat的分组是从第三方覆盖网络上的租户应用被发起(即,不是回复分组)并被发送到公共云底层网络中的目的地的分组。
如图所示,处理在公共云的底层网络的虚拟适配器处从第三方覆盖网络的虚拟适配器接收(在705处)分组。例如,图2中的处理在覆盖虚拟适配器235处接收通过网络堆栈230从租户应用250发送的分组。类似地,图3中的处理在端口330处接收通过网络堆栈230从租户应用250发送的分组。
然后,处理确定(在710处)分组是否被寻址到底层网络中的目的地ip地址。如果是,那么处理前进到745,如下所述。否则,处理确定(在715处)分组是否是租户应用响应于先前从底层网络地址空间中的实体接收到的请求而发送的回复分组。如果是,那么处理前进到735,如下所述。
否则,处理对分组报头执行(在720处)snat,以将分组的源ip地址替换为vm的底层网络ip地址。例如,图3中的mfe传输桥315执行snat操作。在一些实施例中,处理还用唯一地识别第三方覆盖网络中的源ip地址的号码来替换(在725处)分组的源端口号。为了将回复分组发送到正确的目的地,一些实施例将唯一的号码指派给使用第三方覆盖网络的每个租户应用用于网络地址翻译目的。这个号码被用于替换被发送到底层网络的分组的源端口。对于回复分组,这个唯一的号码在un-snat操作期间用于识别覆盖网络中租户应用的ip地址。
然后,处理将分组从覆盖虚拟适配器转发(在730处)到pnic,以将分组发送到底层网络中的目的地地址。例如,参考图2,处理将分组转发到pnic245以发送到底层网络目的地。而且,参考图3,处理通过nic端口370将分组从mfe传输桥315(其执行snat操作)转发到245,以发送到服务提供者网络260中的被寻址的实体。然后处理结束。
当从租户应用被寻址到底层网络中的实体的分组是回复分组时,处理对分组报头执行(在735处)un-dnat操作,以用先前从底层网络实体作为目的地地址接收的地址替换该分组的源ip地址。例如,图3中的mfe传输桥315执行un-dnat操作。然后,处理将分组转发(在740处)到pnic,以发送到底层网络中的目的地实体。例如,处理将分组从传输桥315(其执行un-dnat操作)和nic端口370转发到pnic245,以将分组转发到底层网络目的地。然后处理结束。
当从租户应用接收到未被寻址到底层网络中的目的地的分组时,处理封装(在745处)分组并将其发送到覆盖网络目的地而无需网络地址翻译。例如,图3中的mfe集成桥310封装分组并通过覆盖端口340、端口335、mfe传输桥315和nic端口370将分组发送到pnic245,以转发到覆盖网络目的地。然后处理结束。
对于在底层端点连接到的vm中托管的应用,底层逻辑接口上不是覆盖流量的传入流量(即,未在第三方覆盖网络上的实体之间交换的传入分组)经受目的地网络地址翻译(dnat)。对于其中连接是源自vm外部的传入流量,执行dnat。目的地地址被翻译成vif的逻辑ip地址。对应的返回流量是如上面参考图7所描述的被翻译的源地址。在一些实施例中,允许用户配置在vm中托管的应用的列表,对于这些应用,传入流量可以经受源和目的地网络地址翻译。
图8概念性地图示了在一些实施例中用于对从公共云底层网络发送到第三方覆盖网络中的租户应用的分组进行目的地地址翻译(dnat)的处理800。处理示出了上面参考图6a-图6b讨论的dnat和un-snat操作的细节。经受dnat的分组是源自底层网络的ip地址并被发送到第三方覆盖网络上的租户应用的分组。
如图所示,处理在mfe内核驱动程序处从底层网络接收(在805处)分组。例如,处理分别在图2或图3中的mfe内核驱动程序215或395处从公共云网络290接收分组。然后,处理确定(在810处)分组是否被寻址到网络管理器应用。如果是,那么处理前进到840,如下所述。
否则,处理确定(在815处)分组是否是由底层网络中的实体响应于覆盖网络上的租户应用的请求而发送的回复分组。如果是,那么处理前进到830,如下所述。
否则,处理对分组执行(在820处)dnat。例如,图3中的mfe传输桥315执行dnat操作。对于底层端点连接到的vm中托管的应用,底层逻辑接口上不是覆盖流量的传入流量经受dnat。对于这种其中连接是源自vm外部的传入流量,通过将分组报头中指定的目的地地址替换为覆盖虚拟适配器的逻辑ip地址,对分组执行dnat。对对应的返回流量执行un-dnat操作(如上面参考图7所描述的)。一些实施例配置在vm中托管的应用的列表,对于这些应用,传入流量可以经受dnat和un-dnat操作。然后,处理通过覆盖虚拟适配器和网络堆栈将分组转发(在825处)到第三方覆盖网络中的目的地租户应用。例如,执行dnat操作的mfe传输桥通过接插端口342和341将分组发送到mfe集成桥310。mfe集成桥310进而通过端口330(其是覆盖虚拟适配器)通过网络堆栈230将分组发送到目的地租户应用250。然后处理结束。
当从底层网络实体被寻址到租户应用的分组是回复分组时,处理对分组执行(在830处)un-snat操作。例如,图3中的mfe传输桥315执行un-snat操作。在一些实施例中,un-snat操作包括使用在分组报头中指定的目的地端口号来识别目的地租户应用。如以上参考操作720和725所描述的,唯一地识别租户应用的号码被用作从租户应用发送到底层网络目的地的分组的源端口号。因此,回复分组将这个号码用作回复分组中的目的地端口号。mfe内核驱动程序在回复分组中使用这个唯一的号码来识别目的地租户应用。
un-snat操作将在分组报头中指定的目的地ip地址替换为目的地租户应用的已识别出的ip地址。然后,处理通过覆盖虚拟适配器和网络堆栈将分组转发到覆盖网络中的目的地租户应用。例如,执行un-snat操作的mfe传输桥通过接插端口342和341将分组发送到mfe集成桥310。mfe集成桥310进而通过端口330(其是覆盖虚拟适配器)通过网络堆栈230将分组发送到目的地租户应用250。然后处理结束。
当从底层网络接收到的分组没有被寻址到租户应用时,处理将分组转发(在840处)到目的地网络管理器应用,而无需网络地址翻译或解封装。然后处理结束。
iv.电子系统
许多上述特征和应用被实现为被指定为记录在计算机可读存储介质(也称为计算机可读介质)上的指令集的软件处理。当这些指令由一个或多个处理单元(例如,一个或多个处理器、处理器的核或其它处理单元)执行时,它们使(一个或多个)处理单元执行指令中指示的动作。计算机可读介质的示例包括但不限于cd-rom、闪存驱动器、ram芯片、硬盘驱动器、eprom等。计算机可读介质不包括无线地或通过有线连接传递的载波和电子信号。
在本说明书中,术语“软件”旨在包括驻留在只读存储器中的固件或存储在磁性存储装置中的应用,其可以被读入存储器以供处理器处理。而且,在一些实施例中,可以将多个软件发明实现为更大程序的子部分,同时保留不同的软件发明。在一些实施例中,多个软件发明也可以被实现为分开的程序。最后,一起实现这里描述的软件发明的分开的程序的任意组合都在本发明的范围内。在一些实施例中,软件程序在被安装以在一个或多个电子系统上操作时,定义了一个或多个执行和进行软件程序的操作的具体机器实施方式。
图9概念性地图示了利用其实现本发明的一些实施例的电子系统900。电子系统900可以被用于执行上述控制、虚拟化或操作系统应用中的任何一个。电子系统900可以是计算机(例如,台式计算机、个人计算机、平板计算机、服务器计算机、大型机、刀片计算机等)、电话、pda或任何其它种类的电子设备。这样的电子系统包括各种类型的计算机可读介质以及用于各种其它类型的计算机可读介质的接口。电子系统900包括总线905、(一个或多个)处理单元910、系统存储器920、只读存储器(rom)930、永久存储设备935、输入设备940和输出设备945。
总线905共同地表示通信连接电子系统900的众多内部设备的所有系统、外设和芯片组总线。例如,总线905将(一个或多个)处理单元910与只读存储器930、系统存储器920、永久存储设备935通信地连接。
从这些各种存储器单元中,(一个或多个)处理单元910检索要执行的指令和要处理的数据,以便执行本发明的处理。(一个或多个)处理单元在不同实施例中可以是单个处理器或多核处理器。
只读存储器930存储由(一个或多个)处理单元910和电子系统的其它模块所需的静态数据和指令。另一方面,永久存储设备935是读和写存储器设备。这个设备是即使当电子系统900关闭时也存储指令和数据的非易失性存储单元。本发明的一些实施例使用大容量存储设备(诸如磁或光盘及其对应的盘驱动器)作为永久存储设备935。
其它实施例使用可移除存储设备(诸如软盘、闪存驱动器等)作为永久存储设备。与永久存储设备935一样,系统存储器920是读和写存储器设备。但是,与存储设备935不同,系统存储器是易失性读和写存储器,诸如随机存取存储器。系统存储器存储处理器在运行时需要的一些指令和数据。在一些实施例中,本发明的处理被存储在系统存储器920、永久存储设备935和/或只读存储器930中。从这些各种存储器单元中,(一个或多个)处理单元910检索要执行的指令和要处理的数据,以便执行一些实施例的处理。
总线905还连接到输入和输出设备940和945。输入设备使用户能够传递信息和选择到电子系统的命令。输入设备940包括字母数字键盘和定点设备(也称为“光标控制设备”)。输出设备945显示由电子系统生成的图像。输出设备包括打印机和显示设备,诸如阴极射线管(crt)或液晶显示器(lcd)。一些实施例包括诸如用作输入和输出设备两者的触摸屏的设备。
最后,如在图9中所示,总线905还通过网络适配器(未示出)将电子系统900耦合到网络925。以这种方式,计算机可以是计算机的网络(诸如局域网(“lan”)、广域网(“wan”)、内联网、或诸如互联网之类的网络的网络)的一部分。电子系统900的任何或所有部件可以与本发明结合使用。
一些实施例包括电子部件,诸如微处理器、在机器可读或计算机可读介质(可替代地称为计算机可读存储介质、机器可读介质或机器可读存储介质)中存储计算机程序指令的存储设备和存储器。这种计算机可读介质的一些示例包括ram、rom、只读压缩盘(cd-rom)、可记录压缩盘(cd-r)、可重写压缩盘(cd-rw)、只读数字多功能盘(例如,dvd-rom,双层dvd-rom)、各种可记录/可重写dvd(例如,dvd-ram、dvd-rw、dvd+rw等)、闪存存储器(例如,sd卡、小型sd卡、微型sd卡等)、磁和/或固态硬盘驱动器、只读和可记录
虽然以上讨论主要指执行软件的微处理器或多核处理器,但是一些实施例通过一个或多个集成电路来执行,诸如专用集成电路(asic)或现场可编程门阵列(fpga)。在一些实施例中,这种集成电路执行在该电路自身上存储的指令。
如在本说明书中所使用的,术语“计算机”、“服务器”、“处理器”、以及“存储器”都是指电子或其它技术设备。这些术语不包括人或人群。为了本说明书的目的,术语显示或正在显示意味着在电子设备上显示。如本说明书中所使用的,术语“计算机可读介质”、“多个计算机可读介质”和“机器可读介质”被完全限制为以由计算机可读的形式存储信息的、有形的、物理的对象。这些术语不包括任何无线信号、有线下载信号、以及任何其它短暂或暂时性信号。
虽然本发明已经参考许多具体细节进行了描述,但是本领域普通技术人员将认识到的是,在不脱离本发明的精神的情况下,本发明可以以其它具体形式实施。此外,多个图概念性地图示了处理。这些处理的具体操作可能没有以与所示出和描述的确切次序执行。具体操作可能没有在一系列连续的操作中执行,并且不同的具体操作可能在不同的实施例中执行。此外,处理可以利用若干子处理来实现,或者作为更大的宏处理的一部分来实现。
贯穿本说明书提到包括虚拟机(vm)的计算和网络环境。但是,虚拟机只是数据计算节点(dcn)或数据计算端节点(也被称为可寻址节点)的一个示例。dcn可以包括非虚拟化物理主机机器、虚拟机、在主机操作系统之上运行而不需要超级监督者或分开的操作系统的容器、以及超级监督者内核网络接口模块。
在一些实施例中,vm使用由虚拟化软件(例如,超级监督者、虚拟机监视器等)虚拟化的主机的资源与在主机上其自己的访客操作系统一起操作。租户(即,vm的所有者)可以选定在访客操作系统之上要操作哪些应用。另一方面,一些容器是在主机操作系统之上运行而不需要超级监督者或分开的访客操作系统的结构。在一些实施例中,主机操作系统使用命名空间将容器彼此隔离,并且因此提供在不同容器内操作的不同应用组的操作系统级隔离。这种隔离类似于在虚拟化系统硬件的超级监督者虚拟化环境中提供的vm隔离,并且因此可以被视为隔离在不同容器中操作的不同应用组的一种虚拟化形式。这种容器比vm更轻巧。
在一些实施例中,超级监督者内核网络接口模块是包括具有超级监督者内核网络接口和接收/传输线程的网络堆栈的非vmdcn。超级监督者内核网络接口模块的一个示例是作为vmware公司的esxitm超级监督者的一部分的vmknic模块。
本领域普通技术人员将认识到的是,虽然本说明书提到vm,但是给出的示例可以是任何类型的dcn,包括物理主机机器、vm、非vm容器和超级监督者内核网络接口模块。事实上,在一些实施例中,示例网络可以包括不同类型的dcn的组合。
因此,鉴于上述,本领域普通技术人员将理解的是,本发明不受前述说明性细节的限制,而是由所附权利要求来定义。