k8s网桥插件实现方法、装置、电子设备和可读存储介质与流程

文档序号:33001741发布日期:2023-01-18 01:26阅读:40来源:国知局
k8s网桥插件实现方法、装置、电子设备和可读存储介质与流程

1.本发明涉及网络技术领域,具体而言,涉及一种k8s网桥插件实现方法、装置、电子设备和可读存储介质。


背景技术:

2.在kubernetes的网络模型中,最小的网络单位是pod。pod的网络设计原则是ip-per-pod,即pod中container共享同一套网络协议栈,具有相同的网络命名空间。pod内的container通过localhost+port访问,类似于liunx中进程访问的方式。kubernetes对集群网络的设计原则包括如下几点:所有容器都可以不用nat(network address translation,网络地址转换)和别的容器通信;所有节点都可以不用nat和所有容器通信,反之亦然;容器的地址和外部看到的地址是同一个地址;同一pod内,容器之间通信通过pod-ip+容器映射port进行。
3.传统的k8s技术应用在攻防靶场时,k8s namespace相当于一个集群网络环境(一个独立的子网环境),而每个pod相当于一台运行容器的虚拟主机。然而根据传统的k8s pod技术,pod为最小的网络单位,pod内的容器共享pod-ip资源,并没有属于自己单独的ip地址。这就造成了无法使用k8s技术模拟真实环境中主机运行容器,每个容器都有自己ip的靶标虚拟环境。


技术实现要素:

4.本发明的目的包括,例如,提供了一种k8s网桥插件实现方法、装置、电子设备和可读存储介质,其能够模拟非k8s集群中主机加容器的环境,且能被k8s直接纳管。
5.本发明的实施例可以这样实现:
6.第一方面,本发明提供一种k8s网桥插件实现方法,应用于k8s集群中的节点,所述方法包括:
7.调用网桥插件以进行pod的虚拟网桥配置与生成,并为对应的docker容器配置固定ip并进行vlan划分;
8.在生成pod时,调用所述网桥插件为所述pod添加所述虚拟网桥、vlan标签和网段;
9.在为所述pod添加容器时,为所述容器配置所添加的所述虚拟网桥以及所述固定ip、划分的vlan的标签,其中,所述容器的固定ip和所述虚拟网桥网关ip在同一网段内。
10.在可选的实施方式中,所述k8s集群中具有pod虚拟网络资源共享接口容器,所述pod虚拟网络资源共享接口容器的容器端口映射至所述pod中。
11.在可选的实施方式中,为所述pod添加的所述虚拟网桥、vlan标签和网段包括多组。
12.在可选的实施方式中,所述方法还包括:
13.将所述pod的虚拟网桥配置信息以及所述docker容器的固定ip、vlan划分信息通过服务接口发送至存储系统进行存储。
14.在可选的实施方式中,所述方法还包括:
15.在接收到用户终端发送的运程连接登录请求时,向所述用户终端反馈所述docker容器的固定ip信息;
16.在所述用户终端成功登录所述docker容器后,调用网络诊断工具获得相同vlan的docker容器的ip地址以及不同vlan的docker容器的ip地址,以验证是否对docker容器进行了组网和vlan划分配置。
17.在可选的实施方式中,所述方法还包括:
18.在接收到用户终端发送的已有生产环境或研发环境中的容器生成镜像时,执行用于生成pod的配置文件的编写;
19.运行编写的配置文件,以将已有的主机和容器环境以pod的形式平移至所述k8s集群中。
20.在可选的实施方式中,所述执行用于生成pod的配置文件的编写的步骤,包括:
21.基于所述已有生产环境或研发环境中的容器镜像信息,获得所述已有生产环境或研发环境中容器所使用的容器网桥信息和容器网络信息;
22.将所述容器网桥信息作为pod网桥信息,将所述容器网络信息作为使用其镜像信息重新生成容器时的网络信息,以编写用于生成pod的配置文件。
23.第二方面,本发明提供一种k8s网桥插件实现装置,应用于k8s集群中的节点,所述装置包括:
24.调用模块,用于调用网桥插件以进行pod的虚拟网桥配置与生成,并为对应的docker容器配置固定ip并进行vlan划分;
25.生成模块,用于在生成pod时,调用所述网桥插件为所述pod添加所述虚拟网桥、vlan标签和网段;
26.添加模块,用于在为所述pod添加容器时,为所述容器配置所添加的所述虚拟网桥以及所述固定ip、划分的vlan的标签,其中,所述容器的固定ip和所述虚拟网桥网关ip在同一网段内。
27.第三方面,本发明提供一种电子设备,所述电子设备包括:存储器和至少一个处理器,所述存储器中存储有指令;所述至少一个处理器调用所述存储器中的所述指令,以使得所述电子设备执行如前述实施方式中任意一项所述的k8s网桥插件实现方法。
28.第四方面,本发明提供一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,所述指令被处理器执行时实现如前述实施方式中任一项所述k8s网桥插件实现的方法。
29.本发明实施例的有益效果包括,例如:
30.本技术提供一种k8s网桥插件实现方法、装置、电子设备和可读存储介质,通过调用网桥插件以进行pod的虚拟网桥配置与生成,并为对应的docker容器配置固定ip并进行vlan划分。在生成pod时,调用网桥插件为pod添加虚拟网桥、vlan标签和网段。在为pod添加容器时,为容器配置所添加的虚拟网桥以及所述固定ip、划分的vlan的标签,其中,容器的固定ip和虚拟网桥网关ip在同一网段内。本方案中,可为每个运行在k8s集群中的pod生成虚拟网桥,并借助虚拟网桥为pod内的容器进行ip分配,模拟了非k8s集群中主机加容器的环境,并且符合k8s所使用的容器网络规范,能够被k8s直接纳管。
附图说明
31.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
32.图1为本技术实施例提供的k8s网桥插件实现方法的流程图;
33.图2为本技术实施例提供的k8s网桥插件实现方法的另一流程图;
34.图3为本技术实施例提供的k8s网桥插件实现方法中,验证方法的流程图;
35.图4为本技术实施例提供的k8s网桥插件实现方法中,平移方法的流程图;
36.图5为图4中步骤s301包含的子步骤的流程图;
37.图6为本技术实施例提供的电子设备的结构框图;
38.图7为本技术实施例提供的k8s网桥插件实现装置的功能模块框图。
39.图标:110-存储介质;120-处理器;130-k8s网桥插件实现装置;131-调用模块;132-生成模块;133-添加模块;140-通信接口。
具体实施方式
40.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
41.因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
42.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
43.需要说明的是,在不冲突的情况下,本发明的实施例中的特征可以相互结合。
44.以下首先对本技术中所涉及到的部分技术用语进行解释:
45.k8s:kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,kubernetes的目标是让部署容器化的应用简单并且高效(powerful),kubernetes提供了应用部署、规划、更新、维护的一种机制。
46.容器:容器是一种沙盒技术,主要目的是为了将应用运行在其中,与外界隔离,及方便这个沙盒可以被转移到其它宿主机器。本质上,它是一个特殊的进程。通过名称空间(namespace)、控制组(control groups)、切根(chroot)技术把资源、文件、设备、状态和配置划分到一个独立的空间。
47.namespace:namespace又叫k8s命名空间,kubernetes支持多个虚拟集群,它们底层依赖于同一个物理集群,这些虚拟集群被称为命名空间。
48.pod:pod是kubernetes调度的最小单元。一个pod可以包含一个或多个容器,因此它可以被看作是内部容器的逻辑宿主机。pod的设计理念是为了支持多个容器在一个pod中
共享网络和文件系统。
49.openvswitch:openvswitch简称ovs,ovs是一个高质量、多层的虚拟交换软件。它的目的是通过编程扩展支持大规模网络自动化,同时还支持标准的管理接口和协议。
50.pod网桥:pod网桥是本发明通过openvswich为运行在k8s中的pod添加的虚拟网桥,该网桥将pod虚拟网卡和pod内的容器网卡相连接,并且为pod内指定容器分配固定ip与vlan,促使指定容器之间形成独立的局域网,并且可以与k8s网络兼容通信。最终达到模仿主机内运行容器环境的目的。
51.目前,为了使k8s集群中每个容器都有自己独立ip所采用的技术方包括,如单容器pod,一个k8s pod中只运行一个容器,这样的话就可以保证每个容器都有单独ip地址。或者是,k8s虚拟化,将kvm虚拟机作为k8s的容器单元,在kvm虚拟机内运行虚拟环境或者容器环境,这样的话虚拟机内的网络环境很传统主机内网络环境一样。
52.但是,现有技术中所采用的单容器技术,在一个应用多个容器服务的情况下,无法将原有应用平移进入单个pod中。在一个k8s namspace中,单个应用多pod部署会造成资源浪费以及网络环境混乱不好维护。
53.此外,现有技术中所采用的k8s虚拟化,相比于直接使用容器部署,其所使用的虚拟机部署会严重浪费物理资源,而且虚拟机内的资源无法被k8s直接纳管,增加集群复杂度与运维成本。
54.为了解决现有技术中所存在的问题,本技术提供了一种k8s网桥插件实现方案,通过该方案可为每个运行在k8s集群中的pod生成虚拟网桥,并借助虚拟网桥为pod内的容器进行ip分配,模拟了非k8s集群中主机加容器的环境,并且符合k8s所使用的容器网络规范,能够被k8s直接纳管。
55.请参阅图1,为本技术实施例提供的k8s网桥插件实现方法的流程图,该k8s网桥插件实现方法有关的流程所定义的方法步骤可以由电子设备所实现,例如,该电子设备可以是k8s集群中的节点。下面将对图1所示的具体流程进行详细阐述。
56.s101,调用网桥插件以进行pod的虚拟网桥配置与生成,并为对应的docker容器配置固定ip并进行vlan划分。
57.s102,在生成pod时,调用所述网桥插件为所述pod添加所述虚拟网桥、vlan标签和网段。
58.s103,在为所述pod添加容器时,为所述容器配置所添加的所述虚拟网桥以及所述固定ip、划分的vlan的标签,其中,所述容器的固定ip和所述虚拟网桥网关ip在同一网段内。
59.本实施例中,可使用网桥插件为k8s集群中的每个pod进行虚拟网桥的配置,该虚拟网桥可连接pod虚拟网卡与pod内容器网卡,从而将pod内容器网络组合成为一个局域网。
60.本实施例中,网桥插件可运行在k8s集群的节点上,可通过操控openv switch进行pod的虚拟网桥的生成与配置。该网桥插件的操作接口可通过kubectl(操作k8s集群的命令行工具)工具进行调取。并且,还可进行docker容器的固定ip配置以及vlan(virtual local area network,虚拟局域网)划分等操作。
61.本实施例中,首先可编写通过kubectl生成pod的yaml文件。yaml是一种可读性高,用来表达数据序列化的格式,可以简单表达出清单、散列表、标量等数据形态。
62.例如,编写的yaml文件的内容可包括如为vpc1-pod添加name为br0、网关地址为192.168.56.1/24的pod网桥,为vpc1-pod中的nginx容器添加固定ip:192.168.56.2,为vpc1-pod中的redis容器添加固定ip:192.168.56.3等。
63.可以使用k8s的kubectl运行上述yaml文件以生成pod。kubectl命令在运行配置好的yaml文件时,可调用本实施例中的网桥插件并操作openvswitch生成对应的虚拟网桥,并且为对应的docker容器配置固定ip和vlan划分。
64.在使用kubectl生成pod时,可以通过所使用的yml文件或者命令行参数对pod进行配置,可以起用网桥插件为其生成虚拟网桥+网段(网关地址/子网掩码)+vlan标签。当然,vlan标签也可不填,默认为0。
65.在基于yaml文件或者命令行配置来控制pod不使用虚拟网桥的情况下,将默认使用原始的pod-ip资源共享技术,也即,所有的docker容器共享一个pod ip。
66.本实施例中,为pod添加的所述虚拟网桥、vlan标签和网段包括多组。
67.在使用kubectl为pod添加容器时,可以为容器配置已添加的虚拟网桥以及容器固定ip地址+vlan标签(vlan标签也可不填,默认为0)。但是,容器ip地址必须和虚拟网桥网关ip在同一网段内。
68.在本实施例中,k8s集群中具有pod虚拟网络资源共享接口容器,所述pod虚拟网络资源共享接口容器的容器端口映射至所述pod中。
69.本实施例中,不论pod是否起用网桥插件为其生成虚拟网桥,也不论pod内容器是否被使用该网桥插件进行固定ip配置,k8s原始的pod虚拟网络资源共享接口容器paxe都存在,并且将容器端口映射至pod。
70.请参阅图2,在pod与docker容器配置完成后,本实施例中的方法还可包括以下步骤:
71.s104,将所述pod的虚拟网桥配置信息以及所述docker容器的固定ip、vlan划分信息通过服务接口发送至存储系统进行存储。
72.其中,所述的存储系统可以是键值对数据存储系统etcd。可以将容器的ip地址等信息由其他存储系统进行统一纳管。
73.在用户使用kubectl查询对应的pod时,可以获得pod中虚拟网桥name、虚拟网桥ip、容器ip等信息。
74.本实施例所提供的k8s网桥插件实现方法,扩展原有k8s中pod的网络模式,添加了为单个容器配置固定ip和vlan划分的功能,完全模拟了非k8s集群中主机加容器的环境。弥补了利用原有k8s进行网络攻防靶场网络环境仿真时不能通过pod模拟主机加容器环境的缺陷。
75.请参阅图3,在上述基础上,本实施例所提供的k8s网桥插件实现方法还可包括以下步骤:
76.s201,在接收到用户终端发送的运程连接登录请求时,向所述用户终端反馈所述docker容器的固定ip信息。
77.s202,在所述用户终端成功登录所述docker容器后,调用网络诊断工具获得相同vlan的docker容器的ip地址以及不同vlan的docker容器的ip地址,以验证是否对docker容器进行了组网和vlan划分配置。
78.本实施例中,用户可以通过ssh(secure shell,安全外壳协议)远程连接或者kubectl(docker)等方式登入上述已生成的docker容器,使用ip add等命令查看容器的固定ip地址等。
79.用户在成功登录docker容器的情况下,可以通过网络诊断工具以获得生成的相同vlan(或者相同网段)的容器ip地址和不同vlan(或者不同网段)的容器的ip地址。通过这种方式,可以验证本实施例中的网桥插件对容器进行了组网以及vlan的划分。
80.进一步地,请参阅图4,本实施例中,k8s网桥插件实现方法还可包括以下步骤:
81.s301,在接收到用户终端发送的已有生产环境或研发环境中的容器生成镜像时,执行用于生成pod的配置文件的编写。
82.s302,运行编写的配置文件,以将已有的主机和容器环境以pod的形式平移至所述k8s集群中。
83.本实施例中,编写的配置文件可为yaml文件,该yaml文件的文件格式可与上述的用于生成pod的文件格式相同。可使用kubectl运行所编写的配置文件,可以将原本的主机+容器环境以pod的形式平移至k8s集群中。
84.请参阅图5,本实施例中,在执行用于生成pod的配置文件的编写时,可以通过以下方式实现:
85.s3011,基于所述已有生产环境或研发环境中的容器镜像信息,获得所述已有生产环境或研发环境中容器所使用的容器网桥信息和容器网络信息。
86.s3012,将所述容器网桥信息作为pod网桥信息,将所述容器网络信息作为使用其镜像信息重新生成容器时的网络信息,以编写用于生成pod的配置文件。
87.本实施例中,已有生产环境或研发环境中容器所使用的容器网桥信息包括如网桥名称、网关地址等。将已有生产环境或研发环境中容器所使用的容器网桥信息作为所要生成的pod的pod网桥信息。
88.此外,已有生产环境或研发环境所使用的容器网络信息包括如ip地址和vlan标签等。将已有生产环境或研发环境中的容器网络信息作为重新生成容器时的网络信息。
89.通过运行基于上述方式编写的配置文件,可以实现协助企业将已有的非k8s集群中的容器环境平移至k8s集群中的目的。
90.本实施例所提供的k8s网桥插件实现方法,扩展原有k8s中pod的网络模式,增添了为单个容器配置固定ip与vlan划分的功能。完全模拟了非k8s集群中主机+容器的环境。弥补了利用原有k8s进行网络攻防靶场网络环境仿真时不能通过pod模拟主机+容器环境的缺陷。可以协助企业将已有的非k8s集群中的容器环境平移至k8s集群。
91.通过对k8s pod中的network namespace进行修改,可以配置pod内容器是共享pod-ip还是通过pod内虚拟网桥为其分配专属ip。该配置不但可以满足虚拟仿真攻防靶场的网络需求,而且可以增强k8s对传统网络服务的兼容性,为企业将已有网络应用迁移到k8s集群提供便利。
92.请参阅图6,为本技术实施例提供的电子设备的示例性组件示意图,该电子设备可以是k8s集群中的节点等。该电子设备可包括存储介质110、处理器120、k8s网桥插件实现装置130及通信接口140。本实施例中,存储介质110与处理器120均位于电子设备中且二者分离设置。然而,应当理解的是,存储介质110也可以是独立于电子设备之外,且可以由处理器
120通过总线接口来访问。可替换地,存储介质110也可以集成到处理器120中,例如,可以是高速缓存和/或通用寄存器。
93.k8s网桥插件实现装置130可以理解为上述电子设备,或电子设备的处理器120,也可以理解为独立于上述电子设备或处理器120之外的在电子设备控制下实现上述k8s网桥插件实现方法的软件功能模块。
94.如图7所示,上述k8s网桥插件实现装置130可以包括调用模块131、生成模块132和添加模块133。下面分别对该k8s网桥插件实现装置130的各个功能模块的功能进行详细阐述。
95.调用模块131,用于调用网桥插件以进行pod的虚拟网桥配置与生成,并为对应的docker容器配置固定ip并进行vlan划分;
96.可以理解,该调用模块131可以用于执行上述步骤s101,关于该调用模块131的详细实现方式可以参照上述对步骤s101有关的内容。
97.生成模块132,用于在生成pod时,调用所述网桥插件为所述pod添加所述虚拟网桥、vlan标签和网段;
98.可以理解,该生成模块132可以用于执行上述步骤s102,关于该生成模块132的详细实现方式可以参照上述对步骤s102有关的内容。
99.添加模块133,用于在为所述pod添加容器时,为所述容器配置所添加的所述虚拟网桥以及所述固定ip、划分的vlan的标签,其中,所述容器的固定ip和所述虚拟网桥网关ip在同一网段内。
100.可以理解,该添加模块133可以用于执行上述步骤s103,关于该添加模块133的详细实现方式可以参照上述对步骤s103有关的内容。
101.在一种可能的实施方式中,所述k8s集群中具有pod虚拟网络资源共享接口容器,所述pod虚拟网络资源共享接口容器的容器端口映射至所述pod中。
102.在一种可能的实施方式中,为所述pod添加的所述虚拟网桥、vlan标签和网段包括多组。
103.在一种可能的实施方式中,所述k8s网桥插件实现装置130还包括存储模块,该存储模块可以用于:
104.将所述pod的虚拟网桥配置信息以及所述docker容器的固定ip、vlan划分信息通过服务接口发送至存储系统进行存储。
105.在一种可能的实施方式中,所述k8s网桥插件实现装置130还包括验证模块,该验证模块可以用于:
106.在接收到用户终端发送的运程连接登录请求时,向所述用户终端反馈所述docker容器的固定ip信息;
107.在所述用户终端成功登录所述docker容器后,调用网络诊断工具获得相同vlan的docker容器的ip地址以及不同vlan的docker容器的ip地址,以验证是否对docker容器进行了组网和vlan划分配置。
108.在一种可能的实施方式中,所述k8s网桥插件实现装置130还包括平移模块,该平移模块可以用于:
109.在接收到用户终端发送的已有生产环境或研发环境中的容器生成镜像时,执行用
于生成pod的配置文件的编写;
110.运行编写的配置文件,以将已有的主机和容器环境以pod的形式平移至所述k8s集群中。
111.在一种可能的实施方式中,上述平移模块具体可以用于:
112.基于所述已有生产环境或研发环境中的容器镜像信息,获得所述已有生产环境或研发环境中容器所使用的容器网桥信息和容器网络信息;
113.将所述容器网桥信息作为pod网桥信息,将所述容器网络信息作为使用其镜像信息重新生成容器时的网络信息,以编写用于生成pod的配置文件。
114.关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
115.进一步地,本技术实施例还提供一种计算机可读存储介质,计算机可读存储介质存储有机器可执行指令,机器可执行指令被执行时实现上述实施例提供的k8s网桥插件实现方法。
116.具体地,该计算机可读存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该计算机可读存储介质上的计算机程序被运行时,能够执行上述k8s网桥插件实现方法。关于计算机可读存储介质中的及其可执行指令被运行时,所涉及的过程,可以参照上述方法实施例中的相关说明,这里不再详述。
117.综上所述,本技术实施例提供的k8s网桥插件实现方法、装置、电子设备和可读存储介质,通过调用网桥插件以进行pod的虚拟网桥配置与生成,并为对应的docker容器配置固定ip并进行vlan划分。在生成pod时,调用网桥插件为pod添加虚拟网桥、vlan标签和网段。在为pod添加容器时,为容器配置所添加的虚拟网桥以及所述固定ip、划分的vlan的标签,其中,容器的固定ip和虚拟网桥网关ip在同一网段内。本方案中,可为每个运行在k8s集群中的pod生成虚拟网桥,并借助虚拟网桥为pod内的容器进行ip分配,模拟了非k8s集群中主机加容器的环境,并且符合k8s所使用的容器网络规范,能够被k8s直接纳管。
118.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1