发明内容
针对当前虚拟机和容器混合部署特别是嵌套部署场景,本发明提出了一种虚拟机与容器混合嵌套架构的虚拟网络管理方法。实现虚拟机网络与容器网络的统一融合管理。
本发明综合了集中式与分布式控制器的优点,采用两级控制器结构,将控制平面部分功能下沉到hypervisor服务器上的本地控制器里,集中式控制器负责全局数据维护以及与第三方运管平台接口,本地控制器负责本地虚拟机交换机上的流表维护,能够有效降低全局集中式控制器的压力,提升虚拟网络管理的性能。
具体操作步骤为:
1)在服务器内部引入本地网络控制器(local controller),简称LC;
2)服务器上的虚拟机和容器均连接到内部的虚拟交换机(virtual switch-L0);
3)对于容器运行在虚拟机上的嵌套场景,容器网卡连接到虚拟机内的虚拟交换机(virtual switch-L1);
4)LC从统一网络控制器(Unified Network Controller,简称UNC)中获取必要的全局信息,如各租户虚拟机、容器的基本信息及其物理分布等;
5)创建虚拟机或容器时,LC根据本地虚拟机、容器的基本信息向virtual switch-L0下发流表,打通本地虚拟机或容器的进出通道,租户之间用vlan隔离;
6)当虚拟机或容器删除时,LC删除virtual switch-L0上与该虚拟机相关的流表;
7)当虚拟机或容器发生迁移时,LC删除迁移前宿主机上virtual switch-L0上与该虚拟机相关的流表,迁移完成后由目标宿主机的LC重新下发相关流表;
8)对于容器运行在虚拟机内的嵌套场景,在虚拟机内创建、删除、迁移容器时,宿主机的LC将向virtual switch-L0下发或删除相应流表,而虚拟机内的虚拟交换机virtualswitch-L1则为普通二层交换模式;
9)虚拟机或容器跨节点通信时,virtual switch-L0将根据租户网络的类型将其封装为其对应的格式发送出去,如vlan类型的网络封装为vlan报文、vxlan类型的网络则封装为vxlan报文;
10)若租户网络为vlan类型,则首先需要进行物理网络的vlan配置;
11)若租户网络为vxlan类型,则各服务器之间的vxlan全连接隧道由UNC负责建立。
由于UNC本身并不负责虚拟机和容器的虚拟化管理工作,因此UNC需要与第三方云管平台交互,接管其虚拟网络管理服务,并监听虚拟机和容器的创建、删除、迁移等事件。
当创建虚拟机时,UNC将该虚拟机相关的信息以及当前租户网络的其他相关虚拟机及容器的基本信息及分布情况通告给该虚拟机所在hypervisor服务器上的LC,由该LC向其本地虚拟交换机virtual switch-L0下发流表,打通该虚拟机到租户网络内其它虚拟机或容器的通信通道。此外,还需要将该虚拟机的信息及分布情况通告给本租网络户内其它虚拟机或容器所在的hypervisor服务器上的LC,由这些LC向其本地虚拟交换机virtualswitch-L0下发流表,打通这些虚拟机到新建虚拟机的通信通道,至此新建虚拟机与租户网络内其它虚拟机或容器的双向通信通道就建立起来了。
当删除虚拟机时,UNC将该虚拟机相关的信息通告给租户网络内所有虚拟机或容器所在的hypervisor服务器上的LC,由这些LC删除本地虚拟交换机virtual switch-L0上与该虚拟机相关的流表。
但虚拟机迁移时,UNC将该虚拟机迁移前的相关位置信息通告给租户网络内所有虚拟机或容器所在的hypervisor服务器上的LC,由这些LC删除本地虚拟交换机virtualswitch-L0上与该虚拟机相关的流表,同时将虚拟机迁移后的位置信息通告给迁移后目标hypervisor服务器上的LC和租户网络内其它虚拟机和容器所在的hypervisor服务器上的LC,由这些LC向各自的本地虚拟交换机virtual switch-L0上添加与该虚拟机相关的流表。
容器的创建、删除、迁移流程与上述虚拟机的创建、删除、迁移流程基本类似,此处不再赘述,下面介绍一下容器运行在虚拟机内的嵌套虚拟化场景。
当创建嵌套容器时,首先需新建虚拟机,其创建过程如上所述,当虚拟机创建完成后,在该虚拟机内部创建容器(由容器管理平台创建,如kubernetes),UNC监听容器创建事件,将容器相关的信息以及当前租户网络的其他容器和虚拟机信息通告给其所在的hypervisor服务器上的LC,由该LC向其本地虚拟交换机virtual switch-L0下发流表,打通该容器到租户网络内其它虚拟机或容器的通信通道。此外,还需要将该容器的信息及分布情况通告给本租户网络内其它虚拟机或容器所在的hypervisor服务器上的LC,由这些LC向其本地虚拟交换机virtual switch-L0下发流表,打通这些虚拟机到新建虚拟机的通信通道,至此新建虚拟机与租户网络内其它虚拟机或容器的双向通信通道就建立起来了。
容器运行在虚拟机内的嵌套虚拟化场景下的容器删除和迁移与非嵌套环境下的流程基本一致,此处不再赘述。
租户内虚拟机或容器之间的通信过程也分为多种场景,具体包括如下:
1)虚拟机内容器之间的通信。由于虚拟机内的容器属于同一租户,因此又可分为两种情况,一是通信双方位于同一子网,则可直接通过virtual switch-L1进行通信,另一种是双方位于不同子网(不同子网之间无法直接通信,需经过网关),则需通过virtual switch-L0将报文送到网关,再由网关将报文目的mac地址改为目标容器网卡的mac地址后送回virtual switch-L0,并由virtual switch-L0送到virtual switch-L1,并最终交到目标容器。
2)虚拟机内的容器与同hypervisor服务器上的虚拟机或容器之间的通信。与1)类似,也分为同子网和不同子网两种情况,若源和目的属于同一子网内,则可直接通过virtual switch-L0上的相关流表转发直接建立通信,若源和目的属于不同子网,则报文首先由virtual switch-L0送给网关,由网关将目的mac改为目标虚拟机或容器的mac后送回virtual switch-L0,再由virtual switch-L0根据流表转发送到具体虚拟机或容器。
3)同hypervisor服务器上虚拟机与虚拟机之间、虚拟机与容器之间、容器与容器之间的通信。通信过程与2)类似,不再赘述。
4)跨节点通信。跨节点通信与不跨节点通信本质过程是一样的,最大的区别就是,在不跨节点通信时,源和目的之间直接通过本地的虚拟机网络建立通信,无需额外封装(如vlan和vxlan封装),而夸节点通信时,无论源和目的是否位于同一子网,均需要经过额外的封装才能建立通信过程,除此之外其它过程基本一致。
本发明还提供了一种虚拟机与容器混合嵌套架构的虚拟网络管理***,主要包括集中式控制器和分布式控制器。
集中式控制器负责维护全局信息并与第三方云管平台交互获取虚拟机、容器等相关信息及分布情况,监听虚拟机和容器的相关事件,如创建、删除、迁移等。
分布式控制器(或本地控制器)负责从集中式控制器中获取相关信息并维护本地虚拟机或容器相关的转发流表。
虚拟化服务器内由两级虚拟机交换机连接构成内部虚拟网络连接,第L0级虚拟交换机virtual switch-L0为流表转发模式,运行在hypervisor上,第L1级虚拟交换机virtual switch-L1为普通转发模式,运行在虚拟机内部。
虚拟机和容器的租户隔离由第L0虚拟交换机virtual switch-L0在各虚拟端口上用vlan隔离实现,第L1级交换机virtual switch-L1上的各容器由于属于同租户容器,故不做隔离。
虚拟机或容器创建时,UNC将虚拟机或容器基本信息与分布位置信息通告给所在租户网络内的所有hypervisor服务器上的LC,由各LC维护本地虚拟交换机virtualswitch-L0上新建虚拟机或容器与租户网络内其它虚拟机和容器的通信流表。
虚拟机或容器删除时,UNC将虚拟机或容器相关的信息通告给租户网络内所有hypervisor服务器上的LC,由各LC删除本地虚拟交换机virtual switch-L0上与该虚拟机或容器相关的流表。
虚拟机或容器迁移时,UNC将虚拟机或容器迁移前的相关信息通告给租户网络内所有hypervisor服务器上的LC,由各LC删除本地虚拟交换机virtual switch-L0上与该虚拟机或容器相关的流表,此外UNC将虚拟机或容器迁移后的相关信息通告给租户网络内所有hypervisor服务器上的LC,由各LC维护本地虚拟交换机virtual switch-L0上该虚拟机或容器与租户网络内其它虚拟机和容器的通信流表。
本发明的有益效果是
1)虚拟机与容器同等对待,能够实现虚拟机与容器的统一网络管理;
2)支持容器运行在虚拟机内的嵌套虚拟化场景的虚拟网络管理;
3)控制平面部分下层到hypervisor服务器上,能够提升虚拟网络管理性能。
具体实施方式
下面对本发明的内容进行更加详细的阐述:
虚拟机与容器的混合部署分为以下几种场景:1)虚拟机运行在物理服务器上;2)容器运行在物理服务器上;3)容器嵌套运行在虚拟机中;4)虚拟机嵌套运行在容器中;5)虚拟机嵌套运行在虚拟机中;6)容器嵌套运行在容器中。从当前云计算业务的需求及应用的价值来看,1和2属于最典型的应用场景,场景3可满足某些特殊的应用需求,例如对资源隔离性和安全性要求较高的容器可考虑部署在独立的虚拟机里面,而4、5、6的场景当前实际应用较少,其应用价值也不大,暂时可以不必考虑,本发明提出的统一网络管理方法主要是针对1、2、3场景,如图1所示。
本发明所提出的统一网络管理方法,包括:
12)在服务器内部引入本地网络控制器(local controller),简称LC;
13)服务器上的虚拟机和容器均连接到内部的虚拟交换机(virtual switch-L0);
14)对于容器运行在虚拟机上的嵌套场景,容器网卡连接到虚拟机内的虚拟交换机(virtual switch-L1);
15)LC从统一网络控制器(Unified Network Controller,简称UNC)中获取必要的全局信息,如各租户虚拟机、容器的基本信息及其物理分布等;
16)创建虚拟机或容器时,LC根据本地虚拟机、容器的基本信息向virtual switch-L0下发流表,打通本地虚拟机或容器的进出通道,租户之间用vlan隔离;
17)当虚拟机或容器删除时,LC删除virtual switch-L0上与该虚拟机相关的流表;
18)当虚拟机或容器发生迁移时,LC删除迁移前宿主机上virtual switch-L0上与该虚拟机相关的流表,迁移完成后由目标宿主机的LC重新下发相关流表;
19)对于容器运行在虚拟机内的嵌套场景,在虚拟机内创建、删除、迁移容器时,宿主机的LC将向virtual switch-L0下发或删除相应流表,而虚拟机内的虚拟交换机virtualswitch-L1则为普通二层交换模式;
20)虚拟机或容器跨节点通信时,virtual switch-L0将根据租户网络的类型将其封装为其对应的格式发送出去,如vlan类型的网络封装为vlan报文、vxlan类型的网络则封装为vxlan报文;
21)若租户网络为vlan类型,则首先需要进行物理网络的vlan配置;
22)若租户网络为vxlan类型,则各服务器之间的vxlan全连接隧道由UNC负责建立。
图2是服务器内部虚拟网络的连接关系,hypervisor服务器上的容器和虚拟机均通过tap口或虚拟口(如veth)连接到本地虚拟交换机virtual switch-L0,virtualswitch-L0工作在流表转发模式,其流表规则由本地控制器LC下发。虚拟机内的容器则通过tap口虚拟口(如veth)连接到虚拟机内部的虚拟交换机virtual switch-L1,virtualswitch-L1工作在普通L2转发模式(因为一个虚拟机内的容器属于一个租户,因此虚拟机内的容器之间无需vlan隔离),由于虚拟机的tap挂接到virtual switch-L0上了,因此virtual switch-L0与virtual switch-L1连通,由于hypervisor服务器上可能存在多个租户的虚拟机或容器,因此在virtual switch-L0的虚拟端口上需开启租户虚拟机或容器的vlan隔离,给不同租户分配一个唯一的本地vlan号,当虚拟机或容器跨物理节点通信时,需要将报文中的本地vlan号替换为实际物理网络的vlan号(vlan封装)或vxlan的vni(vxlan封装)。
图3是统一虚拟网络管理***的总体架构,与传统虚拟网络解决方案(如neutron)不同的是,本发明采用的是集中式与分布式相结合的控制平面,***中维护一个全局的中央控制器UNC,UNC负责维护数据中心网络的全局信息及虚拟机和容器的基本信息(调用相关接口从第三方平台获取,如openstack或kubernetes等),此外还在各hypervisor服务器上开启一个轻量级的本地控制器LC,LC负责维护虚拟交换机virtual switch-L0上本地虚拟机和容器相关的流表规则,隐藏LC需要从UNC获取足够的全局信息,如租户的容器与虚拟机基本信息及分布情况等。
本发明所提的统一虚拟机网络管理方法,将虚拟机与容器一视同仁、同等对待,提供了容器与虚拟机融合的虚拟网络管理能力,并且能够支持容器运行在虚拟机内的嵌套虚拟化场景,丰富了虚拟化的应用场景。