技术领域
[0001] 本公开涉及具有工作负载的一致源因特网协议地址的高可用性出口存取。
相关背景技术
[0002] 软件定义的联网(SDN)涉及通过数据中心(例如,本地(on‑premise)数据中心或云数据中心)的物理网络基础设施进行通信的多个主机。多个物理主机所连接到的物理网络可被称为底层网络。每一主机具有一或多个虚拟化端点,例如虚拟机(VM)、容器、Docker容器、数据计算节点、隔离用户空间实例、命名空间容器及/或其它虚拟计算实例(VCI),它们连接到逻辑覆盖网络,且可通过逻辑覆盖网络进行通信。例如,在主机上运行的VM及/或容器可使用由主机使用隧道协议建立的覆盖网络彼此通信。
[0003] 容器是依靠虚拟隔离来部署及运行访问共享操作系统(OS)内核的应用程序的封装。容器化应用程序,也称为容器化工作负载或“工作负载”,可包含封装到一或多个容器群组(称为pod)中的一或多个相关应用程序的集合。容器化工作负载在容器编排平台上运行,所述平台实现运行具有工作负载及服务的容器所需的大部分操作工作的自动化。此操作工作包含管理容器生命周期所需的广泛事物,包含但不限于供应、部署、缩放(放大及缩小)、联网及负载平衡。
[0004] 软件是使此类容器化工作负载的部署及操作自动化的实例开源容器编排平台。具体来说,Kubernetes可用于创建互连节点的集群,包含(1)运行容器化工作负载的一或多个工作节点(例如,在工作平面中),及(2)在其上运行控制集群的控制平面组件的一或多个控制平面节点(例如,在控制平面中)。控制平面组件做出关于集群的全局决策(例如,调度),且可检测及响应集群事件(例如,当工作负载部署的预期复制未被满足时启动新的pod)。如本文所使用,节点可为物理机,或者经配置以在运行管理程序的物理机上运行的VM。
[0005] 作为SDN的部分,数据中心中的任意一组VCI可通过将它们连接到逻辑交换机来使其跨逻辑层2(L2)覆盖网络进行通信。逻辑交换机是由每一节点(例如,主机或VM)上的一组虚拟交换机共同实施的物理交换机的抽象,所述节点具有连接到逻辑交换机的VCI。每一节点上的虚拟交换机作为由每一节点上的管理程序或OS以软件实施的受管边缘交换机操作。虚拟交换机为在节点上运行的VCI提供分组转发及联网功能。具体来说,每一虚拟交换机使用基于硬件的交换技术在同一节点或不同节点上的VCI之间连接及传输数据。
[0006] 此外,在一些情况下,封装到一或多个容器群组中的一或多个应用程序可部署在单个VM或物理机上。从网络的角度来看,pod内的容器共享相同的网络命名空间,这意味着它们共享相同的因特网协议(IP)地址或与pod相关联的IP地址。
[0007] 例如容器联网接口(CNI)插件的网络插件可用于创建虚拟网络接口,所述虚拟网络接口可由pod用于在数据中心中的SDN基础设施的相应逻辑网络上通信。具体来说,网络插件可为将网络接口(称为pod接口)配置到容器网络命名空间中的运行时可执行文件。网络插件经进一步配置以将网络地址(例如,IP地址)指派给每一创建的网络接口(例如,针对每一pod),且还可添加与接口相关的路由。集群内的pod可使用它们相应的IP地址彼此通信。例如,从源pod发送到目的地pod的分组可包含源pod的源IP地址及目的地pod的目的地IP地址,使得分组通过网络从源pod适当地路由到目的地pod。
[0008] 节点的pod之间的通信可经由使用在节点中实施的虚拟交换机来完成。每一虚拟交换机可包含在pod之间提供逻辑连接点的一或多个虚拟端口(Vport)。例如,第一pod的pod接口及第二pod的pod接口可连接到由它们相应节点的虚拟交换机提供的Vport以允许第一pod与第二pod之间的通信。在这种上下文中,“连接到”是指传送网络业务(例如个别网络分组,或者分组描述符、指针、识别符等)以便在软件组件之间实施虚拟数据路径的能力。
[0009] 虽然集群内的pod可使用它们相应的IP地址彼此通信,但pod的IP地址不一定可在集群外部路由。因此,可对从集群内的pod发送到集群外部的目的地的出口分组执行源网络地址转换(SNAT)。具体来说,从集群内的pod发送的出口分组可包含可在集群内路由的pod的IP地址(例如,10.1.1.2)作为源IP地址,此类IP地址被称为基于仅可在集群内路由的内部IP地址的pod的内部IP地址。可例如在充当用于集群外部通信的pod的出口网关的节点(称为出口节点)处对出口分组执行SNAT。SNAT将内部IP地址转换为出口IP地址(例如,192.168.1.1),其中出口IP地址可在集群外部路由。因此,分组中的源IP地址从内部IP地址改变为出口IP地址。
[0010] 出口IP地址可为运行pod的节点的IP地址。因此,对于在同一节点上运行的所有pod,每一pod的内部IP地址的SNAT(每一pod具有不同内部IP地址)将导致转换到相同出口IP地址。此外,在给定pod的多个实例(例如,副本)(pod的实例也被称为pod实例)(例如对应于特定应用程序/工作负载)在不同节点上运行的情况下,在不同节点上运行的pod实例的内部IP地址的SNAT将导致转换到不同出口IP地址。虽然这种SNAT允许pod与集群外部的目的地建立外部连接,但转换可能给使用源IP地址来识别客户端应用程序的防火墙或应用程序造成困难。
[0011] 例如,由于在同一节点上运行的不同应用程序的pod与相同出口IP地址相关联,因此来自不同应用程序的集群外部的所有出口分组将具有相同源IP地址。因此,如果防火墙策略由集群外部的防火墙基于出口分组标头内的源IP地址应用于此类出口分组,那么相同策略可应用于所有出口分组,即使它们与不同应用程序相关联也如此。因此,将不同防火墙策略指派给不同应用程序可能不可行,这是不合意的。
[0012] 作为另一实例,由于在不同节点上运行的相同应用程序/工作负载的多个pod实例与不同出口IP地址相关联,因此来自相同应用程序/工作负载的集群外部的不同出口分组可具有不同源IP地址。因此,为了基于源IP地址将防火墙策略应用于与相同应用程序/工作负载相关联的所有出口分组,可能需要将防火墙策略应用于每一不同出口IP地址。此外,由于pod可在节点之间移动,因此pod的出口IP地址将相应地改变。因此,防火墙策略可能不断地需要随着改变的出口IP地址进行更新,这可能是不可行或不可取的。
具体实施方式
[0023] 本文的某些实施例提供用于将出口IP地址分配给工作负载(例如,pod)的技术。
[0024] 在某些实施例中,一组多个出口IP地址被唯一地分配给一或多个pod,所述一或多个pod在本文称为出口pod集。在某些实施例中,在出口pod集中存在多个pod的情况下,多个pod可共享一些特性,例如在相同命名空间中、是副本pod(例如,用于相同应用程序)、与特定标签相关联及/或类似者。在出口pod集中存在多个pod的情况下,多个pod不一定在同一节点上运行,且可在不同节点上运行。
[0025] 不同组的多个出口IP地址被分配给不同出口pod集。例如,出口IP地址192.168.0.200、192.168.1.200及192.168.2.200可被分配给第一出口pod集,且出口IP地址192.168.0.201、192.168.1.201及192.168.2.201可被分配给第二出口pod集。因此,在一些实施例中,在任何给定时间,没有出口IP地址被分配给多于一个出口pod集。
[0026] 因此,基于将出口IP地址唯一地分配给出口pod集,来自不同出口pod集的出口分组在执行SNAT之后将具有不同出口IP地址。因此,例如防火墙及应用程序的组件能够使用源IP地址来区分来自不同出口pod集的出口分组。例如,假设用于第一应用程序的第一pod在第一节点上运行,且用于第二应用程序的第二pod在第一节点上运行。此外,假设第一pod是第一出口pod集的部分,且第二pod是第二出口pod集的部分。因此,即使第一及第二pod在相同第一节点上运行,它们也将具有不同出口IP地址,从而允许基于源IP地址来区分来自第一及第二pod的出口分组。
[0027] 作为另一实例,假设用于第一应用程序的第一pod在第一节点上运行,且用于第一应用程序的第二pod在第二节点上运行。此外,假设第一pod及第二pod是同一出口pod集的部分。因此,即使与相同第一应用程序相关联的第一及第二pod在不同节点上运行,它们也将具有相同出口IP地址。因此,单个出口IP地址可用于识别第一应用程序,即使存在与第一应用程序相关联的不同pod及节点也如此。
[0028] 此外,在一些实施例中,一组多个出口IP地址中的每一出口IP地址可属于不同子网。子网或子网络是因特网协议(IP)网络的逻辑分区。在某些方面,属于子网的节点被指派来自与子网相关联的给定无类域间路由(CIDR)块的IP地址。IP地址可为节点耦合到的物理网络的IP地址,或者节点耦合到的逻辑网络的IP地址。给定子网的节点可共享相同连接性、安全性及可用性要求。
[0029] 因此,每一出口pod集可被分配用于多个子网的出口IP地址。在某些实施例中,在任何给定时间,多个出口IP地址中的仅一者被用作出口pod集的活动出口IP地址。出口IP地址需要在出口pod集的出口节点所定位的子网内是可路由的。因此,在一些情况下,出口pod集的出口节点的IP地址需要与出口pod集的出口IP地址在同一子网中。通过将多个子网中的出口IP地址分配给出口pod集,出口pod集的出口节点可位于多个子网中的任何者中。具体来说,并非集群的所有节点都可在同一子网中,且代替地,集群的节点可跨多个子网分布。因此,为出口pod集选择出口节点可跨跨越多个子网的节点进行负载平衡,因此即使给定子网的所有节点都出现故障也能提供高可用性。
[0030] 在一些实施例中,每一出口pod集与单个出口IP地址相关联。在一些实施例中,可选择节点来充当出口pod集的出口节点,即使所述节点在与出口pod集的出口IP地址不同的子网中具有IP地址也如此。具体来说,到出口IP地址的静态路由可在路由出口节点的子网的业务的路由器处配置。因此,出口IP地址在出口节点的子网内变得可路由。因此,为出口pod集选择出口节点可跨跨越多个子网的节点进行负载平衡,因此即使给定子网的所有节点都出现故障也能提供高可用性。
[0031] 图1描绘可在其中实施本公开的实施例的联网环境100中的实例物理及虚拟网络组件。
[0032] 联网环境100包含数据中心101。数据中心101包含一或多个主机102、管理网络192、数据网络170、网络控制器174、网络管理器176及容器控制平面178。数据网络170及管理网络192可被实施为单独物理网络或相同物理网络上的单独虚拟局域网(VLAN)。
[0033] 主机102可通信地连接到数据网络170及管理网络192。数据网络170及管理网络192也被称为物理或“底层”网络,且可为所论述的单独物理网络或相同物理网络。如本文所使用,术语“底层”可与“物理”同义,且是指联网环境100的物理组件。如本文所使用,术语“覆盖”可与“逻辑”同义使用,且是指至少部分在联网环境100内实施的逻辑网络。
[0034] 主机102可为位于数据中心中的任意位置的同一机架上或不同机架上的地理上共定位的服务器。主机102可经配置以提供虚拟化层,也称为管理程序106,其将硬件平台的处理器、存储器、存储装置及联网资源抽象成多个VM 1041到104x(本文统称为“VM 104”,且本文个别称为“VM 104”)。
[0035] 主机102可构建在服务器级硬件平台108上,例如x86架构平台。主机102的硬件平台108可包含计算装置的组件,例如一或多个处理器(CPU)116、系统存储器118、一或多个网络接口(例如,物理网络接口卡(PNIC)120)、存储装置122及其它组件(未展示)。CPU 116经配置以执行指令,例如执行本文描述的一或多个操作且可存储在存储器及存储系统中的可执行指令。网络接口使主机102能够经由物理网络(例如管理网络192及数据网络170)与其它装置通信。
[0036] 在某些实施例中,管理程序106实施一或多个逻辑交换机作为虚拟交换机140。虚拟交换机140可为虚拟分布式交换机(VDS)。在这种情况下,每一主机102可实施对应于VDS的单独虚拟交换机,但是每一主机102处的虚拟交换机140可像跨主机102的单个虚拟分布式交换机(未展示)一样被管理。
[0037] 在主机102上运行的VM 104中的每一者可包含虚拟接口,通常称为虚拟网络接口卡(VNIC),例如VNIC 146,其负责在VM 104与管理程序106之间交换分组。VNIC 146可连接到由虚拟交换机140提供的Vport 144。虚拟交换机140还具有连接到PNIC 120的Vport 142,例如以允许VM 104经由数据网络170及/或管理网络192与主机102外部的虚拟或物理计算装置通信。
[0038] 每一VM 104还可实施虚拟交换机148以将入口分组转发到在VM 104内运行的各种实体。此类虚拟交换机148可在VM 104的客户OS138上运行,而不是由管理程序实施,且可例如由在VM 104的客户OS138上运行的代理110编程。例如,在每一VM 104内运行的各种实体可包含含有容器130的pod 154。取决于实施例,虚拟交换机148可经配置有Open vSwitch(OVS),这是实施虚拟交换机以实现网络自动化同时仍然支持标准管理接口及协议的开源项目。尽管图1中未展示,但在pod 154在主机102的OS上运行而不是在VM 104的客户OS138上运行的情况下,虚拟交换机148可在主机102的OS上运行。
[0039] 具体来说,每一VM 104实施支持客户OS138的安装的虚拟硬件平台,客户OS138能够执行一或多个应用程序。客户OS138可为标准的商用操作系统。客户OS的实例包含Microsoft Windows、Linux及/或类似者。
[0040] 每一VM 104可包含容器引擎136,容器引擎136安装在VM 104中且在客户OS138的控制下作为客户应用程序运行。容器引擎136是通过在VM 104内的客户OS138或主机102的OS上提供OS级虚拟化层来实现虚拟实例(本文可互换地称为“容器”)的部署及管理的进程。容器130是在OS级别上实现虚拟化的软件实例。即,通过容器化,客户OS138或者主机102的OS(如果容器直接部署在主机102的OS上)的内核经配置以提供多个隔离的用户空间实例,称为容器。从与容器130中的每一者通信的最终用户的角度来看,容器130表现为唯一的服务器。然而,从在其上执行容器的OS的角度来看,容器是由OS调度及分派的用户进程。尽管图1中未展示,但在pod 154在主机102的OS上运行而不是在VM 104的客户OS138上运行的情况下,容器引擎136可在主机102的OS上运行。
[0041] 容器130将应用程序(例如应用程序132)封装为单个可执行软件包,所述软件包将应用程序代码与运行应用程序代码所需的所有相关配置文件、库及依赖项捆绑在一起。应用程序132可为任何软件程序,例如文字处理程序或游戏服务器。
[0042] 在某些实施例中,数据中心101包含容器控制平面178。容器控制平面178是编排控制平面,例如 其用以使用容器130在节点集群的节点(例如,主机102或VM 104)上部署及管理其应用程序及/或服务。例如,Kubernetes可将容器化应用程序部署为节点集群上的容器130及控制平面178。每一节点集群的控制平面178管理计算、存储及存储器资源以运行容器130。此外,控制平面可支持使用容器130在集群上部署及管理应用程序(或服务)。在一些情况下,控制平面将应用程序部署为在主机102上运行的容器130的pod 154,在VM内抑或直接在主机的OS上(未展示)。也可考虑基于容器技术的其它类型的基于容器的集群,例如 集群。尽管论述其中pod 154作为节点在VM中运行且容器引擎136、代理
110及虚拟交换机148在VM 104的客户OS138上运行的某些实施例,但是本文论述的技术也适用于作为节点直接在主机102的OS上运行的pod 154。例如,主机102可不包含管理程序
106,且可代替地包含标准操作系统。此外,虚拟交换机140、代理110及容器引擎136接着可在主机102的OS上运行。
[0043] 为了将分组转发到pod 154及其容器130并由其接收,pod 154中的每一者可设置有网络接口,例如pod接口165。pod接口165与一或多个IP地址相关联,使得pod 154及pod 154内的每一容器130可通过一或多个IP地址寻址。因此,在创建每一pod 154之后,网络插件124经配置以为新创建的pod 154建立联网,从而使pod 154的新容器130能够发送及接收业务。如所展示,pod接口1651经配置用于pod 1541并附接到pod1541。其它pod接口(例如pod接口1652)可经配置用于不同现有pod 154并附接到不同现有pod 154。
[0044] 网络插件124可包含在每一节点上执行以为pod提供联网及安全功能性的一组模块。另外,代理110可在每一节点上执行以(i)配置转发元件及(ii)处置故障排除请求。
[0045] 网络插件124及相关联功能性的额外细节在2022年8月30日申请的标题为“容器集群的连接跟踪(CONNECTION TRACKING FOR CONTAINER CLUSTER)”的第17/006,846号美国申请案中公开,所述申请案的全部内容以引用的方式并入本文中。
[0046] 数据中心101包含网络管理平面及网络控制平面。管理平面及控制平面各自可被实施为单个实体(例如,在物理或虚拟计算实例上运行的应用程序),或者被实施为分布式或集群应用程序或组件。在替代实施例中,组合的管理器/控制器应用程序、服务器集群或分布式应用程序可实施管理及控制功能两者。在所展示的实施例中,网络管理器176至少部分实施网络管理平面,且网络控制器174至少部分实施网络控制平面。
[0047] 网络控制平面是软件定义的网络(SDN)基础设施的组件,且确定逻辑覆盖网络拓扑并维护关于例如逻辑交换机、逻辑路由器、端点等的网络实体的信息。逻辑拓扑信息由控制平面转换成物理网络配置数据,所述数据接着被传送到主机102的网络元件。网络控制器174通常表示在数据中心101内实施软件定义的网络(例如逻辑覆盖网络)的网络控制平面。
网络控制器174可为在数据中心中的各种主机上执行的多个网络控制器中的一者,所述多个网络控制器以分布式方式一起实施网络控制平面的功能。网络控制器174可为在数据中心101中的服务器中、在数据中心101外部(例如,例如在公共云中)驻留并执行的计算机程序,或替代地,网络控制器174可作为主机102中的一者中的虚拟设施(例如,VM)运行。网络控制器174从网络中的端点收集关于网络的信息及将所述信息分布到所述端点。网络控制器174可经由管理网络192(例如通过控制平面协议)与主机102通信。在某些实施例中,网络控制器174实施中央控制平面(CCP),其结合管理程序106与在主机102上运行的本地控制平面组件(例如代理)进行交互及协作。
[0048] 网络管理器176是在联网环境100中的服务器中执行的计算机程序,或替代地,网络管理器176可在VM 104中运行,例如在主机102中的一者中运行。网络管理器176经由管理网络192与主机102通信。网络管理器176可从用户(例如管理员)或自动编排平台(未展示)接收网络配置输入,并产生指定逻辑覆盖网络配置的所要状态数据。例如,逻辑网络配置可定义VCI与逻辑交换机的逻辑端口之间的连接。网络管理器176经配置以例如经由网页接口或应用程序编程接口(API)从管理员或其它实体接收输入,并实行数据中心101的管理任务,包含集中式网络管理及为用户提供聚合系统视图。
[0049] 在图2中说明用于运行容器化工作负载的实例性的基于容器的集群。应注意,图2的框图是基于容器的集群的逻辑表示,且未展示各种组件在物理系统上实施及运行的位置。虽然图2中展示的实例性的基于容器的集群是Kubernetes(K8S)集群203,但在其它实例中,基于容器的集群可为基于容器技术的另一种类型的基于容器的集群,例如 集群。
[0050] 当Kubernetes用于部署应用程序时,集群(例如图2中说明的K8S集群203)由工作节点204及控制平面178的组合形成。工作节点204可对应于图1的VM 104或主机102。在某些实施例中,控制平面178的组件在称为控制平面节点的节点上运行,所述节点例如VM或物理机。工作节点204由控制平面178管理,控制平面178管理工作节点204的计算、存储及存储器资源,例如将资源指派给pod 154。尽管容器130的pod 154被展示在集群203上运行,但是pod可不被认为是集群基础设施的部分,而是作为在集群203上运行的容器化工作负载。
[0051] 每一工作节点204包含kubelet 206,kubelet 206是确保一或多个pod 154根据pod的定义规范(例如在工作负载定义清单中定义)在工作节点204中运行的代理。每一pod154可包含一或多个容器130。工作节点204可用于使用容器130执行各种应用程序及软件进程。此外,每一工作节点204包含kube代理208。Kube代理208是维护工作节点204上的网络规则的Kubernetes网络代理。这些网络规则允许从K8S集群203内部及/或外部的网络会话到pod 154的网络通信。
[0052] 控制平面178包含例如应用程序编程接口(API)服务器214、集群存储库(etcd)216、控制器218及调度器220的组件。控制平面178的组件做出关于K8S集群203的全局决策(例如,调度),以及检测及响应集群事件(例如,当工作负载部署的副本字段未被满足时启动新的pod 154)。
[0053] API服务器214作为到K8S集群203的网关操作。因而,命令行接口、网页用户接口、用户及/或服务通过API服务器214与K8S集群203通信。Kubernetes API服务器214的一个实例是kube‑apiserver,其经设计以水平缩放—即,这个组件通过部署更多实例来缩放。可运行kube‑apiserver的若干实例,且可在那些实例之间平衡业务。
[0054] 集群存储库(etcd)216是数据存储库,例如一致且高度可用的键值存储库,其用作所有K8S集群203数据的后备存储库。
[0055] 控制器218是在K8S集群203中运行及管理控制器进程的控制平面178组件。例如,控制平面178可具有(例如,四个)称为控制器进程的控制回路,其观察集群203的状态并尝试修改集群203的当前状态以匹配集群203的预期状态。在某些实施例中,控制器218的控制器进程经配置以监测外部存储装置以发现对集群203的状态的改变。
[0056] 调度器220是经配置以将新的pod 154分配给工作节点204的控制平面178组件。另外,调度器218可经配置以跨工作节点204分布资源及/或工作负载。资源可指处理器资源、存储器资源、网络资源及/或类似者。调度器218可观察工作节点204以了解每一工作节点204处置其工作负载的情况,并将可用资源与工作节点204匹配。调度器218接着可将新创建的容器130调度到工作节点204中的一或多者。
[0057] 换句话说,控制平面178管理及控制集群203的每一组件。控制平面178处置集群203内的大多数(如果不是全部的话)操作,且其组件定义及控制集群203的配置及状态数据。控制平面178配置及运行容器化应用程序的部署、管理及维护。
[0058] 图3是多个子网中的节点204(例如,图1的主机102或VM 104)的实例集群的框图。节点204例如根据关于图1描述的连接耦合到网络170。图3说明三个单独子网301到303。尽管说明三个子网,但是集群的节点204可在更少或更多数量的子网中。此外,在子网301到
303中的每一者中可存在集群的一或多个节点204。
[0059] 子网301中的节点204被指派来自CIDR块192.168.1.X/24的IP地址。例如,节点204a被指派IP地址192.168.1.10。子网302中的节点204被指派来自CIDR块192.168.33.X/
24的IP地址。例如,节点204b被指派IP地址192.168.33.10。子网303中的节点204被指派来自CIDR块192.168.65.X/24的IP地址。例如,节点204c被指派IP地址192.168.65.10。
[0060] 每一节点204包含图1的虚拟交换机148。例如,节点204a、204b及204c分别包含虚拟交换机148a、148b及148c。节点204a、204b及204c分别运行pod 154a、154b及154c。Pod 154a被指派内部IP地址10.1.1.2。Pod 154b被指派内部IP地址10.1.1.3。Pod 154c被指派内部IP地址10.1.1.4。
[0061] 在某些实施例中,pod 154a到154c的内部IP地址不可在网络170上路由。因此,为了使不同节点204上的pod 154能够彼此通信,虚拟交换机148经配置以使用封装在节点之间用隧道传输分组。例如,pod 154a可将分组发送到pod 154b。所述分组可包含具有源IP地址10.1.1.2(即,pod 154a的IP地址)及目的地IP地址10.1.1.3(即,pod 154b的IP地址)的标头。来自pod 154a的分组由虚拟交换机148a接收。虚拟交换机148a确定(例如,使用转发表)IP地址10.1.1.3在节点204a上不可达,且代替地在节点204b上可达。因此,虚拟交换机148a将分组用隧道传输到节点204b。具体来说,虚拟交换机148a用外部标头封装分组,所述外部标头具有源IP地址192.168.1.10(即,虚拟交换机148a驻留在其上的节点204a的IP地址)及目的地IP地址192.168.33.10(即,目的地IP地址10.1.1.3在其上可达的节点204b的IP地址)。封装分组进一步包含原始分组以及其标头,称为封装分组的内部标头。封装分组在网络170上发送,网络170将分组路由到节点204b。节点204b处的虚拟交换机148b对经封装分组进行解封,这意味着其移除外部标头以检索内部分组。虚拟交换机148b接着基于标头中的目的地IP地址10.1.1.3将分组发送到pod 154b。
[0062] 在某些方面,虚拟交换机148还能够执行网关功能,并对从集群内的pod 154发送到集群外部的目的地的出口分组执行SNAT。例如,假设节点204b是pod 154a的出口节点。因此,pod 154a可产生具有标头的出口分组,所述标头具有源IP地址10.1.1.2及集群外部的目的地的目的地IP地址。虚拟交换机148a基于分组的目的地IP地址确定(例如,使用转发表)分组是出口分组,且节点204b是pod 154a的出口节点。因此,虚拟交换机148a将分组用隧道传输到节点204b。如所论述,封装分组具有节点204b的目的地IP地址。在节点204b的虚拟交换机148b处接收封装分组,虚拟交换机148b对分组进行解封,并对分组执行SNAT。在实例中,虚拟交换机148b将源IP地址从10.1.1.2转换为pod 154a的出口IP地址,且接着将分组发送出集群。
[0063] 如所论述,在某些实施例中,多个出口IP地址被唯一地分配给出口pod集。例如,如所展示,pod 154a及154c被分配给被分配出口IP地址192.168.1.1、192.168.33.1及192.168.65.1的第一出口pod集。此外,pod 154b被分配给被分配出口IP地址192.168.1.2、
192.168.33.2及192.168.65.2的第二出口pod集。在实例中,针对集群的每一子网301到
303,为每一出口pod集分配出口IP地址。然而,应注意,在一些实施例中,可仅针对集群的子网中的一个子网为出口pod集分配出口IP地址。
[0064] 图4展示描绘为出口pod集配置出口节点的方法400的流程图。在实例中,如图3中展示,为包含pod 154a及pod 154c的第一出口pod集选择出口节点。关于图3描述方法400的实例。
[0065] 在402,为出口pod集选择出口节点。在与出口pod集的pod相同的集群中的节点(例如,所有节点)中选择出口节点。
[0066] 在某些实施例中,在集群中的所有可用节点中随机选择出口节点。在某些实施例中,使用某种负载平衡技术(例如轮询)在集群中的所有可用节点中选择出口节点。例如,控制器(例如,图2的控制器218)经配置以选择出口节点。可用节点可为处于健康状态的节点,其可操作且可经由集群的底层网络到达,这与不可用节点形成对比,所述不可用节点可断电、不起作用、具有网络故障等。
[0067] 在某些实施例中,节点的可用性进一步基于其节点是出口节点的出口pod集的数量。例如,可存在阈值出口节点数量,借此节点一旦经配置为出口节点达到阈值出口节点数量,其就被认为不可用。例如,在阈值出口节点数量为3,且节点经配置为少于三个出口pod集的出口节点的情况下,所述节点仍然被认为是可用的。在阈值出口节点数量为3,且节点经配置为三个出口pod集的出口节点的情况下,所述节点被认为是不可用的。
[0068] 在某些实施例中,集群的节点执行领导选举以选择出口节点。与出口pod集相关联的多个出口IP地址可按照例如由管理员确定的优先顺序排序。例如,对于第一出口pod集,顺序是1)192.168.1.1,2)192.168.33.1,及3)192.168.65.1。在某些实施例中,基于分配给出口节点pod集的多个出口IP地址的优先顺序,为出口pod集选择出口节点。具体来说,(例如,由例如控制器218的控制器)按照优先顺序确定在与第一出口IP地址相同的子网中的集群中是否存在任何可用节点。在第一出口pod集的实例中,基于第一出口IP地址192.168.1.1在子网301的CIDR块中来确定子网301中是否存在任何可用节点(CIDR块:
192.168.1.X/24)。
[0069] 如果按照优先顺序在与第一出口IP地址相同的子网中存在一或多个可用节点,那么例如由控制器(例如,随机地、使用轮询、基于负载平衡等)选择一或多个可用节点中的一者作为出口节点。此外,第一出口IP地址例如由控制器设置为出口pod集的活动出口IP地址。
[0070] 如果按照优先顺序在与第一出口IP地址相同的子网中不存在一或多个可用节点,那么例如由控制器按照优先顺序确定在与第二出口IP地址相同的子网中的集群中是否存在任何可用节点。因此,例如由控制器按照优先顺序确定在与第二出口IP地址相同的子网中是否存在一或多个可用节点以供选择为出口节点。因此,可循序检查子网是否存在可用节点,直到基于出口pod集的多个出口IP地址的顺序发现可用节点以配置为出口pod集的出口节点为止。
[0071] 在实例中,节点204b被选择为第一出口pod集的出口节点。
[0072] 在404,基于所选出口节点确定与出口pod集相关联的多个出口IP地址中的活动出口IP地址。例如,活动出口IP地址是与所选出口节点位于同一子网中的多个出口IP地址中的一者。在实例中,所选节点204b具有IP地址192.168.33.10,其位于具有CIDR块192.168.33.X/24的子网302中。出口IP地址192.168.33.1位于CIDR块192.168.33.X/24中,且因此是为第一出口pod集确定的活动出口IP地址。
[0073] 在406,所选出口节点经配置以接收目的地IP地址被设置为出口pod集的所确定活动出口IP地址的分组。例如,网络170的路由器经配置以将指向出口IP地址192.168.33.1的业务路由到节点204b。
[0074] 在某些实施例中,出口节点经由地址解析协议(ARP)或邻居发现协议(NDP)通告所确定的活动出口IP地址,并响应对活动出口IP地址的ARP/NDP查询。例如,节点204b通告其与子网302中的出口IP地址192.168.33.1的关联,使得指向出口IP地址192.168.33.1的业务被路由到子网302中的节点204b。
[0075] 在某些实施例中,例如在不允许ARP/NDP的云环境中,活动出口IP地址可经编程地配置为出口节点的辅助IP地址。例如,节点204b可与IP地址192.168.33.10及IP地址192.168.33.1相关联。
[0076] 在某些实施例中,为了向用户通知出口pod集的活动出口IP地址及出口节点,此类信息可经由控制平面178(例如经由API服务器214)报告给用户。
[0077] 因此,方法400为出口pod集配置出口节点。接着,可封装来自出口pod集的出口分组,其中封装分组的目的地IP地址被设置为出口pod集的活动出口IP地址。因此,封装分组被路由到出口节点。此外,出口节点上的虚拟交换机使用封装分组中的目的地IP地址来执行SNAT。具体来说,虚拟交换机对封装分组进行解封,并将原始分组的源IP地址转换为封装分组的目的地IP地址,借此使原始分组可在与出口节点相同的子网中路由。
[0078] 继续所述实例,节点204b的虚拟交换机148b经配置以为pod 154a执行SNAT。具体来说,pod 154a产生具有标头的出口分组,所述标头具有源IP地址10.1.1.2及集群外部的目的地的目的地IP地址。虚拟交换机148a基于分组的目的地IP地址确定(例如,使用转发表)分组是出口分组,且节点204b是pod 154a的出口节点。因此,虚拟交换机148a将分组用隧道传输到节点204b。如所论述,封装分组具有被设置为与节点204b相关联的活动出口IP地址192.168.33.1的目的地IP地址。在节点204b的虚拟交换机148b处接收封装分组,虚拟交换机148b对分组进行解封,并对分组执行SNAT。在实例中,虚拟交换机148b将源IP地址从10.1.1.2转换为封装分组的目的地IP地址192.168.33.1,其是pod 154a的活动出口IP地址,且接着将分组发送出集群。
[0079] 图5是多个子网中的节点204(例如,图1的主机102或VM 104)的实例集群的框图。图5与图3相同,区别仅在于每一出口pod集仅被分配单个出口IP地址,如所展示。例如,如所展示,pod 154a及154c被分配给被分配出口IP地址192.168.33.1的第一出口pod集。此外,pod 154b被分配给被分配出口IP地址192.168.1.2的第二出口pod集。
[0080] 图6展示描绘为出口pod集配置出口节点的方法600的流程图。在实例中,如图5中展示,为包含pod 154a及pod 154c的第一出口pod集选择出口节点。关于图5描述方法600的实例。
[0081] 在602,为出口pod集选择出口节点。在与出口pod集的pod相同的集群中的节点(例如,所有节点)中选择出口节点。
[0082] 在某些实施例中,在集群中的所有可用节点中随机选择出口节点。在某些实施例中,使用某种负载平衡技术(例如轮询)在集群中的所有可用节点中选择出口节点。例如,控制器(例如,图2的控制器218)经配置以选择出口节点。
[0083] 在某些实施例中,被选择为出口pod集的出口节点的集群中的节点与分配给出口pod集的单个出口IP地址位于不同子网中。例如,节点204a可被选择为被分配出口IP地址192.168.33.1的第一出口pod集的出口节点。节点204a位于子网301中,且在子网301的CIDR块192.168.1.X/24中具有IP地址192.168.1.10。值得注意的是,出口IP地址192.168.33.1不在节点204a的子网301的CIDR块192.168.1.X/24中。
[0084] 在604,所选出口节点经配置以接收目的地IP地址被设置为出口pod集的单个出口IP地址的分组。例如,网络170的路由器经配置以将指向出口IP地址192.168.33.1的业务路由到子网301中的节点204a,即使出口IP地址192.168.33.1不在子网301的CIDR块中也如此。具体来说,在网络170的路由器处配置用于单个出口IP地址的静态路由以将指向单个出口IP地址的业务路由到所选出口节点。在某些实施例中,路由器经编程地配置有静态路由,例如在云环境中。在某些实施例中,路由器经由例如边界网关协议(BGP)的路由协议配置有静态路由。与方法400不同,方法600可能要求底层网络(例如,网络170)支持路由配置或动态路由协议,且因此在一些平台中可能不起作用。
[0085] 在某些实施例中,为了向用户通知出口pod集的出口节点,可将此类信息经由控制平面178(例如经由API服务器214)报告给用户。
[0086] 因此,方法600为出口pod集配置出口节点。接着,可封装来自出口pod集的出口分组,其中封装分组的目的地IP地址被设置为出口pod集的活动出口IP地址。因此,封装分组被路由到出口节点。此外,出口节点上的虚拟交换机使用封装分组中的目的地IP地址来执行SNAT。具体来说,虚拟交换机对封装分组进行解封,并将原始分组的源IP地址转换为封装分组的目的地IP地址,借此使原始分组可在与出口节点相同的子网中路由。
[0087] 继续所述实例,节点204a的虚拟交换机148a经配置以为pod 154c执行SNAT。具体来说,pod 154c产生具有标头的出口分组,所述标头具有源IP地址10.1.1.4及集群外部的目的地的目的地IP地址。虚拟交换机148c基于分组的目的地IP地址确定(例如,使用转发表)分组是出口分组,且节点204a是pod 154c的出口节点。因此,虚拟交换机148c将分组用隧道传输到节点204a。如所论述,封装分组具有被设置为与节点204a相关联的活动出口IP地址192.168.33.1的目的地IP地址。在节点204a的虚拟交换机148a处接收封装分组,虚拟交换机148a对分组进行解封,并对分组执行SNAT。在实例中,虚拟交换机148a将源IP地址从10.1.1.4转换为封装分组的目的地IP地址192.168.33.1,其是pod 154c的活动出口IP地址,且接着将分组发送出集群。
[0088] 应理解,对于本文描述的任何过程,在与本文的教示一致的各种实施例的范围内,可存在以类似或替代顺序或并行执行的额外或更少的步骤,除非另有说明。
[0089] 本文描述的各种实施例可采用涉及存储在计算机系统中的数据的各种计算机实施操作。例如,这些操作可能需要对物理量进行物理操纵—通常但不一定,这些量可能采取电或磁信号的形式,其中它们或它们的表示能够被存储、传输、组合、比较或以其它方式操纵。此外,这种操纵通常用术语表示,例如产生、识别、确定或比较。本文描述的形成一或多个实施例的部分的任何操作可为有用的机器操作。另外,一或多个实施例还涉及一种用于执行这些操作的装置或设备。所述设备可为特定所需目的而特别构造,或其可为由存储在计算机中的计算机程序选择性地激活或配置的通用计算机。特定来说,各种通用机器可与根据本文的教示写入的计算机程序一起使用,或构造更专门设备来执行所需操作可为更方便的。
[0090] 本文描述的各种实施例可用其它计算机系统配置来实践,包含手持装置、微处理器系统、基于微处理器或可编程的消费电子产品、小型计算机、主机计算机及类似者。
[0091] 一或多个实施例可被实施为一或多个计算机程序,或被实施为体现在一或多个计算机可读媒体中的一或多个计算机程序模块。术语计算机可读媒体是指可存储数据的任何数据存储装置,所述数据随后可输入到计算机系统中—计算机可读媒体可基于任何现有的或随后开发的技术以用于以使计算机程序能够由计算机读取的方式来体现计算机程序。计算机可读媒体的实例包含硬盘驱动器、网络附接存储装置(NAS)、只读存储器、随机存取存储器(例如快闪存储器装置)、CD(光盘)‑CD‑ROM、CD‑R、或CD‑RW、DVD(数字多功能光盘)、磁带以及其它光学及非光学数据存储装置。计算机可读媒体也可分布在网络耦合的计算机系统上,使得以分布的方式存储及执行计算机可读代码。
[0092] 尽管为了便于理解,已较为详细地描述一或多个实施例,但应明白,可在权利要求书的范围内进行某些改变及修改。因此,所描述的实施例被认为是说明性的且不是限制性的,且权利要求书的范围不限于本文给出的细节,而是可在权利要求书的范围及等效物内进行修改。在权利要求书中,元件及/或步骤并不暗示任何特定操作顺序,除非在权利要求书中明确说明。
[0093] 根据各种实施例的虚拟化系统可被实施为托管实施例、非托管实施例或倾向于模糊两者之间的区别的实施例,这都是可设想的。此外,各种虚拟化操作可全部或部分在硬件中实施。例如,硬件实施方案可采用查找表来修改存储存取请求以保护非磁盘数据。
[0094] 如上文描述的某些实施例涉及主机计算机的顶部上的硬件抽象层。硬件抽象层允许多个上下文共享硬件资源。在一个实施例中,这些上下文彼此隔离,每一上下文具有在其中运行的至少一个用户应用程序。因此,硬件抽象层提供在上下文之间进行资源隔离及分配的益处。在前述实施例中,虚拟机被用作上下文的实例,且管理程序被用作硬件抽象层的实例。如上文描述,每一虚拟机包含至少一个应用程序在其中运行的客户操作系统。应注意,这些实施例还可适用于其它上下文实例,例如不包含客户操作系统的容器,在本文称为“无OS容器”(参见例如www.docker.com)。无OS容器实施操作系统级虚拟化,其中在主机计算机上的操作系统的内核的顶部上提供抽象层。抽象层支持多个无OS容器,每一无OS容器包含应用程序及其依赖项。每一无OS容器在主机操作系统上的用户空间中作为隔离进程运行,并与其它容器共享内核。无OS容器依靠内核的功能性来利用资源隔离(CPU、存储器、块I/O、网络等)及单独命名空间,并完全隔离应用程序对操作环境的视图。通过使用无OS容器,可隔离资源,限制服务,并供应进程以具有操作系统的私有视图,具有它们自己的进程ID空间、文件系统结构及网络接口。多个容器可共享同一内核,但是每一容器可经约束以仅使用一定量的资源,例如CPU、存储器及I/O。如本文使用的术语“虚拟化计算实例”意味着涵盖VM及无OS容器两者。
[0095] 无论虚拟化程度如何,许多变化、修改、添加及改进都是可能的。因此,虚拟化软件可包含执行虚拟化功能的主机、控制台或客户操作系统的组件。可为本文描述为单个实例的组件、操作或结构提供多个实例。各种组件、操作及数据存储之间的边界在某种程度上是任意的,且在特定说明性配置的上下文中说明特定操作。功能性的其它分配是可设想的,且可落入本公开的范围内。一般来说,在实例配置中作为单独组件呈现的结构及功能性可被实施为组合结构或组件。类似地,作为单个组件呈现的结构及功能性可被实施为单独组件。这些及其它变化、修改、添加及改进可落入所附权利要求书的范围内。