在容器中运行虚拟机的网络实现方法、系统、设备及介质与流程

文档序号:35573488发布日期:2023-09-24 08:56阅读:50来源:国知局
在容器中运行虚拟机的网络实现方法、系统、设备及介质与流程

本发明涉及容器,具体地说是一种在容器中运行虚拟机的网络实现方法、系统、设备及介质。


背景技术:

1、kubevirt是目前主流的kubernetes平台纳管虚拟机的技术,每个kubevirt虚拟机对应于kubernetes的一个vmi对象和一个pod对象,每个kubevirt虚拟机对应的pod中都会启动单独的virt-launcher进程和libvirtd进程,virt-launcher进程监听kubevirt虚拟机vmi对象的配置变化,更新虚拟机xml配置并下发到pod内的libvirtd进程,libvirtd进程根据虚拟机xml配置管理虚拟机qemu进程的生命周期。

2、由于kubernetes本身对pod网络一些规范(cni)要求,kubevirt虚拟机的tap端口在pod所属网络命名空间中,无法直接连通pod所在的节点,也无法与节点上cni的数据面模块连接,比如无法与kuve-ovn cni的ovs网桥连接。

3、目前,kubevirt提供了连接cni数据面模块的绑定方法支持masquerade、bridge、passt、slirp、sriov等技术,由于masquerade、passt、slirp三种技术在虚拟机内都无法配置真实的ip地址,也无法支持trunk,不满足标准的虚拟机网络要求;sriov技术要求节点网卡支持sriov,配置非常复杂且对硬件要求较高,无法通用。所以kubevirt虚拟机连接cni数据面模块比较通用的绑定方法是bridge技术。

4、如附图1所示,现有技术中bridge技术的应用,具体为:在虚拟机所属的pod内创建一个linux网桥和一个veth pair设备,pod内虚拟机的tap端口和veth pair设备的一个端口连接到linux网桥上,veth pair设备的另一个端口连接到节点cni的数据面模块,这样pod内虚拟机的tap端口就可以和节点上cni数据面模块网络打通,pod内虚拟机就可以通过节点cni数据面模块与容器平台其他pod或者虚拟机连通。

5、然而,在bridge技术中,虚拟机网络与所在节点的cni数据面模块之间会额外经过pod内的linux网桥,也会经过pod网络命名空间的 netfilter 等非必要的内核网络协议栈路径,过长的网络链路和没必要的内核网络协议栈处理大大地增加了网络延迟和降低了网络效率。

6、故如何在不改变kubevirt原有架构以及符合kubernetes对pod网络的规范(cni)要求前提下,实现减少虚拟机网络与所在节点的cni数据面模块之间的数据链路长度,并跳过pod网络命名空间的 netfilter 等非必要的内核网络协议栈处理,避免网络延迟,提高网络效率是目前亟待解决的技术问题。


技术实现思路

1、本发明的技术任务是提供一种在容器中运行虚拟机的网络实现方法、系统、设备及介质,来解决如何在不改变kubevirt原有架构以及符合kubernetes对pod网络的规范(cni)要求前提下,实现减少虚拟机网络与所在节点的cni数据面模块之间的数据链路长度,并跳过pod网络命名空间的 netfilter 等非必要的内核网络协议栈处理,避免网络延迟,提高网络效率的问题。

2、本发明的技术任务是按以下方式实现的,一种在容器中运行虚拟机的网络实现方法,该方法应用于kubernetes平台纳管虚拟机,具体如下:

3、基于容器中运行虚拟机的网卡配置创建ebpf插件;

4、将ebpf插件配置到容器内虚拟机的tap端口上,用于拦截虚拟机tap端口的ingress流量并重定向至容器内veth pair设备的端口;

5、将ebpf插件配置到容器内veth pair设备的端口上,用于拦截容器内veth pair设备的端口的ingress流量并重定向至虚拟机tap端口。

6、作为优选,基于容器中运行虚拟机的网卡配置创建ebpf插件具体如下:

7、在拥有独立网络命名空间的pod内运行一台虚拟机,虚拟机拥有一张或多张网卡,虚拟机的每张网卡在pod内都有一个一一对应且能与网卡通信的tap端口,虚拟机的一个或多个tap端口位于pod网络命名空间中;

8、虚拟机的每个tap端口都与一个veth pair设备一一对应,每个veth pair设备均设有veth pair设备第一端口和veth pair设备第二端口两个端口;其中,veth pair设备第一端口位于pod所属节点的默认网络命名空间中,并与pod所属节点的cni数据面模块连接;veth pair设备第二端口位于pod网络命名空间中;

9、基于虚拟机的一个或多个tap端口以及一个或多个tap端口对应的veth pair设备第二端口创建ebpf插件;其中,虚拟机的一个或多个tap端口与一个或多个tap端口对应的veth pair设备第二端口的关联关系存储在ebpf插件的ebpf map中。

10、更优地,ebpf插件拦截虚拟机tap端口的ingress流量并重定向至容器内vethpair设备端口时,将虚拟机tap端口的部分ingress流量拦截并重定向至容器内veth pair设备端口或将虚拟机tap端口的所有ingress流量拦截并重定向至容器内veth pair设备端口;

11、ebpf插件拦截容器内veth pair设备端口的ingress流量并重定向至虚拟机tap端口时,将容器内veth pair设备端口的部分ingress流量拦截并重定向至所述虚拟机tap端口或将容器内veth pair设备端口的所有ingress流量拦截并重定向至虚拟机tap端口。

12、更优地,ebpf插件的ebpf map存储虚拟机的一个或多个tap端口与一个或多个tap端口对应的veth pair设备第二端口的关联关系具体为:

13、将虚拟机的一个或多个tap端口名称作为键,并将一个或多个tap端口对应的vethpair设备第二端口名称作为值,组成第一键值对;

14、将虚拟机的一个或多个tap端口对应的veth pair设备第二端口名称作为键,将一个或多个tap端口名称作为值,组成第二键值对;

15、将第一键值对和第一键值对合并存储到ebpf插件的ebpf map中。

16、作为优选,将ebpf插件配置到容器内虚拟机的tap端口上,用于拦截所述虚拟机tap端口的ingress流量并重定向至容器内veth pair设备端口具体如下:

17、在虚拟机的一个或多个tap端口上配置ebpf插件,ebpf插件用于将虚拟机一个或多个tap端口的ingress流量拦截并重定向至虚拟机一个或多个tap端口对应的veth pair设备第二端口;其中,虚拟机一个或多个tap端口的ingress流量是指一个或多个tap端口对应虚拟机网卡的上行流量。

18、作为优选,将ebpf插件配置到容器内veth pair设备端口上,用于拦截容器内vethpair设备端口的ingress流量并重定向至虚拟机tap端口具体如下:

19、在虚拟机的一个或多个tap端口对应的veth pair设备第二端口上配置的ebpf插件用于将一个或多个tap端口对应veth pair设备第二端口的ingress流量拦截并重定向至所述一个或多个tap端口;其中,一个或多个tap端口对应veth pair设备第二端口的ingress流量是指一个或多个tap端口对应虚拟机网卡的下行流量;

20、ebpf插件执行拦截并重定向动作是通过ebpf插件ebpf map中存储的键值对查询目的端口的,具体为:以配置ebpf插件的tap端口名称或者veth pair设备第二端口名称作为键在ebpf插件ebpf map中找到对应的值,以ebpf插件ebpf map中找到对应的值作为目的端口名称。

21、一种在容器中运行虚拟机的网络实现系统,该系统用于实现上述的在容器中运行虚拟机的网络实现方法,该系统包括网络插件配置模块、监听模块以及pod配置模块;

22、其中,网络插件配置模块用于创建ebpf插件,ebpf插件用于将虚拟机一个或多个tap端口的ingress流量拦截并重定向至虚拟机一个或多个tap端口对应的veth pair设备第二端口;

23、监听模块用于通过kubernetes的watch api监听pod及虚拟机的资源变动情况;

24、pod配置模块用于通过监听模块监听到节点上新增运行虚拟机的pod时,基于新增运行于pod内的虚拟机,通过网络插件配置模块对运行于pod内虚拟机创建ebpf插件,并通过网络插件配置模块调用ebpf接口在操作系统内核中将ebpf插件配置到pod内虚拟机的一个或多个tap端口上以及配置到虚拟机一个或多个tap端口对应的veth pair设备第二端口上。

25、作为优选,所述pod配置模块通过监听模块监听到节点上删除运行虚拟机的pod时, pod配置模块通过网络插件配置模块调用ebpf接口在操作系统内核中将ebpf插件从虚拟机的一个或多个tap端口以及虚拟机一个或多个tap端口对应的veth pair设备第二端口上移除,并删除ebpf插件。

26、一种电子设备,包括:存储器和至少一个处理器;

27、其中,所述存储器上存储有计算机程序;

28、所述至少一个处理器执行所述存储器存储的计算机程序,使得所述至少一个处理器执行如上述的在容器中运行虚拟机的网络实现方法。

29、一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序可被处理器执行以实现如上述的在容器中运行虚拟机的网络实现方法。

30、其中,ebpf(extended berkeley packet filter)是一种可以在linux系统内核中运行用户程序的技术,允许在不修改内核代码或者加载内核模块的情况下实现特定的功能,在网络数据包收发过程中,ebpf提供了许多hook点,可以对网络数据包进行捕获、过滤、修改或重定向等操作。

31、ebpf map是一个驻留在内核中的以键值对形式存储的数据结构,提供了用户态和内核态的数据交换、数据存储、多程序共享数据等功能。

32、kubernetes是一个开源的容器编排引擎,是目前最主流的容器管理平台。

33、pod是一个或者多个容器的组合,是kubernetes能够创建、调度、管理的最小部署单元,这些容器共享存储、网络和命名空间,以及如何运行的规范。

34、veth pair(全称是virtual ethernet pair)是一个成对的端口,所有从这对端口一端进入的数据包都将从另一端出来,反之也是一样。

35、本发明的在容器中运行虚拟机的网络实现方法、系统、设备及介质具有以下优点:

36、(一)本发明通过ebpf技术将容器内虚拟机的tap端口与连接cni数据面模块的veth pair设备端口网络打通,且不会增加虚拟机网络与cni数据面模块之间的数据链路长度,并跳过了容器网络命名空间的内核网络协议栈处理,从而减少了虚拟机的网络延迟和提高了网络效率;

37、(二)本发明在不改变kubevirt原有架构,以及符合kubernetes对pod网络的规范(cni)要求前提下,通过linux ebpf技术将pod内虚拟机的tap端口与pod所在节点的cni数据面模块网络打通,这种技术不会增加虚拟机网络与所在节点的cni数据面模块之间的数据链路长度,并跳过了pod网络命名空间的netfilter 等非必要的内核网络协议栈处理,从而大大地减少了容器内虚拟机的网络延迟和提高了网络效率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1