CN110601949A - 一种多虚拟设备容器组网方法 - Google Patents
一种多虚拟设备容器组网方法 Download PDFInfo
- Publication number
- CN110601949A CN110601949A CN201910853433.4A CN201910853433A CN110601949A CN 110601949 A CN110601949 A CN 110601949A CN 201910853433 A CN201910853433 A CN 201910853433A CN 110601949 A CN110601949 A CN 110601949A
- Authority
- CN
- China
- Prior art keywords
- network
- container
- command
- module
- vni
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/46—Interconnection of networks
- H04L12/4641—Virtual LANs, VLANs, e.g. virtual private networks [VPN]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/06—Management of faults, events, alarms or notifications
- H04L41/0654—Management of faults, events, alarms or notifications using network fault recovery
- H04L41/0663—Performing the actions predefined by failover planning, e.g. switching to standby network elements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/06—Management of faults, events, alarms or notifications
- H04L41/0677—Localisation of faults
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45591—Monitoring or debugging support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种多虚拟设备容器组网方法,目的是解决虚拟网桥设备上的单点故障问题,并对不同容器网络进行隔离从而迅速定位故障。技术方案是先搭建由控制节点和容器运行节点组成的容器网络底层环境:在容器网络底层环境中搭建组网系统,即在容器运行节点安装虚拟网桥组件、组网组件,在控制节点安装中心数据库;组网组件包括对外接口、容器加入退出网络模块、网络信息处理模块、VNI分配模块、网络主机列表更新模块五个子模块;组网组件、虚拟网桥组件相互配合,完成创建网络、删除网络、容器加入网络、容器退出网络这些组网的工作。采用本发明可避免一个功能单元的故障影响到其他功能单元,并能将可能的网络故障迅速定位。
Description
技术领域
本发明涉及网络技术领域,特别涉及一种容器虚拟组网方法。
背景技术
随着云计算、虚拟化技术的快速发展,容器技术应用越来越广泛,容器因其轻量级、易部署、便于弹性伸缩等优点,成为新一代云计算基础设施的基础单元。容器是从镜像创建的应用运行实例,容器为应用提供了一个轻量级的沙箱环境,可以用来隔离应用;容器中提供有单独的网络命名空间,可以独立连接到网络中。容器组网是把大量、多样的容器接入网络,以实现不同主机之间所有运行容器的互联互通。容器组网是容器云环境中各类功能重构的黏合剂,需要在容器环境下提供高性能、灵活便捷、安全隔离和动态适应等能力,对云计算基础设施的功能重构意义重大。
Overlay网络,根据Sasu Tarkoma在《Overlay Network:Toward InformationNetworking》(《覆盖网络:面向信息网络化》)一书中的定义:是创建在另一种网络之上的计算机网络。
二层网络,是TCP/IP网络的第二层网络,即数据链路层网络,以太网是主流的二层网络规范,二层网络采用物理设备的物理地址(Mac地址)进行寻址及网络通信,二层网络的协议数据为二层数据帧。
三层网络,是TCP/IP网络的第三层网络,是二层网络的上一层网络,又称IP网络,三层网络通过IP地址进行寻址,三层网络的协议数据为IP报文。IP报文从一个设备发送到另一个设备时需要先封装在二层数据帧中,在二层数据帧中填写发送设备和接收设备的物理地址,然后再通过二层网络发送出去。IP报文可以通过路由器进行转发,从而穿越多个二层网络,在被路由器转发时需要重新封装二层数据帧并设置新的物理地址。
二层网络被路由器隔离而局限在较小的物理范围内,三层网络则不受物理范围限制。容器Overlay组网技术在已有的底层网络基础上,通过隧道封装方式将二层数据帧封装到UDP协议,利用UDP协议穿越底层网络,发送到其他网络节点,实现跨越三层网络组建虚拟的二层网络。由于这种虚拟二层网络不再被物理设备限制,可以在更大的范围进行组网,因此也称为虚拟大二层网络。
容器Overlay网络能够跨越三层网络,提供完整的二层网络模拟,具备较好的IP迁移能力,便于网络隔离和私有网络设置,因此Overlay组网方法成为主流的容器组网技术之一。
vxlan(Virtual Extensible Local Area Network,虚拟化可扩展局域网)是用于容器Overlay组网的一种底层隧道封装技术。vxlan技术最初由VMware、思科等公司联合推出,目前已经由网络标准化组织IETF(国际互联网工程任务组)在标准RFC7348中进行规范。vxlan具有成熟度高、通用性好、硬件支持完善、性能好等优势,是当前容器Overlay组网使用最多的底层隧道技术。用于执行vxlan功能的虚拟设备称为vxlan虚拟设备。
veth pair(虚拟网卡对)是Linux内核模块提供的一种虚拟设备,包含两个相互连接的虚拟网卡(veth设备),是容器组网中将容器连接到主机或虚拟网桥的设备。
OpenvSwitch是一种用于创建虚拟网桥的开源软件。相较于linux内核的网桥模块,OpenvSwitch提供了更多的功能,更丰富的实用工具,更便于定制和测试。利用OpenvSwitch软件提供的命令接口,可以创建虚拟网桥、vxlan虚拟设备等虚拟设备,能够通过配置将这些虚拟设备连接起来,以及设置这些虚拟设备的数据转发行为。
etcd是一个开源的键值数据库软件,数据以键值对的形式保存。etcd支持分布式集群部署,并具有消息通知功能,可用于分布式软件的数据存储和消息分发。
目前主要的容器Overlay组网方法有Flannel、OVN(Open Virtual Network)、Weave、Docker overlay等。除了提供基本的虚拟大二层网络通信外,不同组网方法提供的功能有较大差别。其中OVN是OpenvSwitch项目组提供的一套组网方法,采用专用的中心数据库进行配置管理,能够支撑大规模的生产级网络需求,并提供了私有子网功能、跨主机IP漂移能力。Flannel是另一种主流的大规模容器Overlay组网方案,Flannel对不同主机中运行的容器进行了IP地址划分,提供了较高的组网性能,但不提供私有子网功能和跨主机IP漂移能力。Weave、docker overlay主要用于小规模容器组网。
OVN网络的特征在于:每个主机中只有一个虚拟网桥设备,通过SDN(Soft DefinedNetwork软件定义网络)的方式对虚拟网桥设备的流表进行配置,利用流表完成容器的子网划分、转发路径查找,实现网络数据转发和隔离处理。
OVN的组网过程如下:
第一步,搭建容器网络底层环境。容器网络底层环境由若干主机节点构成,这些主机节点能够实现三层网络互通(即IP层互通)。主机节点根据功能不同分为两类:控制节点和容器运行节点。控制节点用于安装中心数据库;容器运行节点用于运行容器。
第二步,搭建组网系统。组网系统运行在底层环境提供的主机节点中,利用底层环境提供的三层互通网络进行数据通信。组网系统由虚拟网桥组件(OpenVSwitch)、组网组件和中心数据库组成。虚拟网桥组件部署在每一个容器运行节点,用于提供虚拟网桥设备、vxlan虚拟设备,以及支撑这些虚拟设备执行需要的功能。组网组件是运行在每个容器运行节点中的代理,用于向虚拟网桥组件发送命令以创建和配置虚拟设备。中心数据库部署在控制节点,用于保存全局配置。
第三步,组网组件向虚拟网桥组件发送创建虚拟设备的命令,由虚拟网桥组件在每个容器运行节点创建一个虚拟网桥(虚拟网桥是虚拟设备,是运行中的一堆数据,提供类似真实设备的数据交换功能)和一个vxlan虚拟设备,并通过虚拟网桥组件(创建、配置虚拟网桥的软件)的配置,将vxlan虚拟设备连接到虚拟网桥上。
各主机中的虚拟网桥和vxlan虚拟设备组成一个覆盖所有容器运行节点的互联结构。其中虚拟网桥提供容器运行节点内部各容器的网络互联,vxlan虚拟设备将分布在各容器运行节点的虚拟网桥连接起来,实现容器的跨主机互联。
OVN提供私有子网功能,能够创建多个虚拟容器网络,不同的容器可以根据需要加入不同的容器网络。所有容器网络都以这个互联结构为基础实现内部容器的相互连联通。OVN通过虚拟网桥中的流表配置进行转发控制和隔离控制,实现不同容器网络的相互隔离。
第四步,组网组件接收用户组网命令,计算网络配置,并在虚拟网桥中配置流表。各虚拟网桥通过流表对连接在互联结构中的容器的数据转发和数据隔离进行控制,完成容器组网。
其中创建网络和删除网络的处理主要是进行容器网络信息的记录和删除。被记录的容器网络信息在容器加入、退出该网络时作为网络配置的依据。容器加入退出网络的处理主要通过配置虚拟网桥中的流表实现,根据容器加入的网络不同,配置不同的流表项,指示容器网络数据经过虚拟网桥的处理方式和转发方向。具体方法为:
4.1组网组件从键盘接收用户组网命令。若组网命令是创建网络命令,转4.2;若组网命令是删除网络命令,转4.3;若组网命令是容器加入网络命令,转4.4;若组网命令是容器退出网络命令,转4.5;
4.2若组网组件收到创建网络命令,则将命令参数中包含的网络名、网络IP地址段组合成容器网络信息,并将容器网络信息保存到中心数据库。存储格式为:网络名、网络IP地址段;转第4.1步;
4.3若组网组件收到删除网络命令,则根据命令参数中的网络名,检查该网络中是否有容器在运行,如果有容器在运行,向用户返回错误信息,转4.1;如果已经没有容器在运行,则从中心数据库中删除网络名所对应容器网络的网络信息,转4.1。
4.4若组网组件收到容器加入网络命令,则创建veth pair设备,虚拟网桥组件利用veth pair设备将容器连接到容器运行节点中的虚拟网桥上,组网组件配置虚拟网桥中的流表。数据从容器发往虚拟网桥后,虚拟网桥内部通过流表控制数据的转发处理。配置流表的过程是:
4.4.1根据容器加入的具体容器网络名不同,中心数据库为容器的数据转发分配不同的虚拟隧道编号(用于标识容器所在的容器网络),组网组件将虚拟隧道编号配置到0号流表中。0号流表有Na项,Na为连接在虚拟网桥中的容器数,包括3个域,分别为:表号、输入端口、动作。
比如流表项:0、d537240069fa147、load:0x1->metadata,转表19。表示,表号为0、输入端口为d537240069fa147、动作为load:0x1->metadata,转表19。该流表项的含义为:对输入端口为d537240069fa147的数据包进行转发处理,其中d537240069fa147是虚拟网桥中连接容器的端口;数据包转发处理的动作包括:记录容器的虚拟隧道编号1(即0x1)到变量metadata,然后将数据包转到19号流表进行处理。
4.4.2组网组件在19号流表中配置数据转发的地址解析。19号流表有Nb项,Nb为当前主机中容器所在的各容器网络中包含的容器数之和,每一项包括4个域,分别为:表号、metadata、容器IP、动作。
比如流表项:19、0x1、11.10.1.2、Mac:02:e9:06:22:9d:c6,转表32。表示表号为19、metadata为0x1、容器IP为11.10.1.2、动作为Mac:02:e9:06:22:9d:c6,转表32。该流表项的含义为:对metadata(匹配步骤4.4.1中记录的虚拟隧道编号)为1(即0x1),目的IP为11.10.1.2的数据包进行转发处理;数据转发处理的动作包括:将数据包的目的Mac地址设置为02:e9:06:22:9d:c6,并转到32号流表。由于只匹配metadata为1的数据,该流表项只会处理虚拟隧道编号为1的容器网络数据,从而实现不同容器网络间的隔离。
4.4.3在32号流表中为数据转发配置输出端口号(这里的输出端口号为内部变量,不是虚拟网桥上的端口)。32号流表有Nb项,每一项包括4个域,分别为:表号、metadata、目的Mac、动作。
比如流表项:32、0x1、02:e9:06:22:9d:c6、load:0x3->REG15,转表33。表示表号为32、metadata为0x1、目的Mac为02:e9:06:22:9d:c6、动作为load:0x3->REG15,转表33。该流表项的含义为:对metadata为1(即0x1),目的Mac为02:e9:06:22:9d:c6的数据包进行转发处理;数据转发处理的动作包括:记录输出端口号3到变量REG15,并转到33号流表处理。
4.4.4在33号流表中为数据转发配置输出的网桥端口。33号流表有Nc项,Nc为步骤4.4.3中为各容器网络分配的输出端口号数目之和,每一项包括4各域,分别为:表号、metadata、REG15、动作。
比如流表项:33、0x1、0x3、oad:0x1->NXM_NX_TUN_ID[0..23],output:ovn-c2c1f2-0。表示表号为33、metadata为0x1、REG15为0x3、动作为load:0x1->NXM_NX_TUN_ID[0..23],output:ovn-c2c1f2-0。该流表项的含义为:对metadata为1(即0x1),REG15为3(即0x3)的数据包进行转发处理;数据转发处理的动作包括:将虚拟隧道编号写到数据包的协议ID字段的第0-23位,然后将数据从虚拟网桥的ovn-c2c1f2-0端口转发出去,该端口连接的是vxlan虚拟设备,数据将由该vxlan虚拟设备发送到其他容器运行节点中的目的容器。
4.5若组网组件收到容器退出网络命令,则从虚拟网桥的所有流表中删除与该容器相关的所有流表配置,并将容器从虚拟网桥中删除。
OVN容器网络在容器运行节点内,将所有容器网络的数据转发处理集中在一个虚拟网桥上,所有容器网络的数据转发处理都利用虚拟网桥的流表进行配置,各种流表的项数及其庞大。这种组网方案使得虚拟网桥成为容器运行节点内的故障单点。无论容器网络的哪个逻辑单元发生故障都需要检查同一个虚拟网桥的所有流表,而这些流表中都混杂了各个容器网络的配置,难以快速找到故障点,且流表配置出错时容易相互影响、相互干扰。
发明内容
本发明要解决的技术问题是:通过为不同的容器网络分别创建虚拟网络设备(包括虚拟网桥、vxlan虚拟设备、端口等),利用多个虚拟网络设备,尽可能避免虚拟网桥设备上的单点故障,使容器网络更加健壮;利用分散的虚拟网络设备,对不同容器网络进行隔离,当网络发生故障时能根据故障所在的容器网络,直接检查对应的虚拟网络设备,从而迅速定位故障。
为解决上述技术问题,本发明提出一种多虚拟设备容器组网方法。为不同的容器网络、不同的主机、不同的跨主机连接,分别提供相互独立的虚拟网络设备。为不同的容器网络、不同的主机分别创建独立的虚拟网桥设备;在具体的虚拟网桥上,为与其他主机的跨主机连接,分别创建独立的vxlan虚拟设备。不同容器网络、不同主机、不同网络功能所用的虚拟网络设备高度解耦,避免一个功能单元的故障影响到其他功能单元,并能将网络处理过程、可能的网络故障迅速定位到具体的虚拟网络设备,简化故障定位、排查过程。
本发明与OVN都采用OpenVSwitch作为虚拟网桥组件,都提供私有子网功能(能够创建多个容器网络)和IP地址漂移能力。但设计了与OVN不同的多虚拟设备机制,通过多个虚拟设备实现不通容器网络的隔离。
本发明包括以下步骤:
第一步,搭建容器网络底层环境。容器网络底层环境由多个主机节点构成,这些主机节点通过三层网络连在一起,能够实现三层互通(即IP层互通)。主机节点根据功能不同分为两种:控制节点(共M个)和容器运行节点(共N个)。控制节点用于安装中心数据库;容器运行节点用于运行容器。容器组网方法即对容器运行节点中运行的容器进行组网。M和N均为正整数。
第二步,在容器网络底层环境中搭建组网系统。即在容器运行节点安装虚拟网桥组件、组网组件,在控制节点安装中心数据库。
在M个控制节点采用分布式存贮的方式部署中心数据库,中心数据库采用开源数据库etcd(3.0或3.0以上版本,网址:https://etcd.io),etcd具备消息通知功能且可在多个节点上运行使得中心数据库分布式运行在M个控制节点。中心数据库中保存各容器网络的全局信息,供组网组件进行信息查询,并能在数据发生变化时通知组网组件。中心数据库保存的全局信息包括:容器网络信息、容器网络主机列表、容器网络VNI(Virtual NetworkIdentify虚拟网络标识,用于标识不同的容器网络)分配记录、已分配VNI集合总共四类。这些全局信息通过键值对的方式保存在数据库,其中键为一个字符串,用于索引及区分不同的数据记录,值为具体的数据信息。
容器网络信息包含K条容器数据记录(对应K个容器网络,一条数据记录对应一个容器网络)。这些数据记录的键为“netInfo/”和容器网络名组成的字符串,比如:“netInfo/net1”。值中包含容器网络名、网络VNI、网络中运行的容器,容器网络名是字符串,表示容器网络的名称;网络VNI是整数,表示容器网络的VNI;网络中运行的容器是由逗号分开的R个字符串,表示R个容器名称,R为正整数。比如:{name:“net1”,VNI:1,containers:[“container1”,“container2”]}。其中,name:“net1”表示这是容器网络net1的容器网络信息;VNI:1表示容器网络net1的VNI值为1;containers:[“container1”,“container2”]表示容器网络net1中运行有两个容器container1和container2。
容器网络主机列表包含K条主机数据记录(对应K个容器网络)。这些数据记录的键为“netlist/”和容器网络名组成的字符串,比如:“netlist/net1”。值为主机列表中与容器网络名所指容器网络相关联的容器运行节点的IP地址,比如:[“10.144.0.1”,“10.145.16.2”],表示容器网络net1关联两个容器运行节点,其IP地址分别为10.144.0.1和10.145.16.2。
容器网络VNI分配记录包含K条VNI数据记录(对应K个容器网络)。这些数据记录的键为“VNI/”和容器网络名组成的字符串,比如:“VNI/net1”。值为分配给容器网络的VNI值。比如123,表示分配给容器网络net1的VNI值为123。
已分配VNI集合在中心数据库中只有一条数据记录,键为字符串“VNISet”。值为所有已分配VNI的集合,表示已分配VNI的集合中的VNI值已经分配给了已经存在的容器网络;比如{1,2,123},表示1、2、123这三个VNI值已经分配给了已经存在的另外3个容器网络,新的容器网络需要分配其他值。
在N个容器运行节点部署组网组件和虚拟网桥组件。
虚拟网桥组件采用开源的OpenvSwitch(2.10或2.10以上版本,网址:http://www.openvswitch.org),与组网组件、容器相连。虚拟网桥组件负责在容器运行节点创建虚拟网桥设备、vxlan虚拟设备,并通过内部配置,将虚拟网桥设备、vxlan虚拟设备、容器连接起来。虚拟网桥组件从组网组件接收创建、删除、配置、查询虚拟网桥、vxlan虚拟设备、端口命令,根据命令创建、配置、删除、查询虚拟网络设备并将容器连接到虚拟网络设备以完成组网,并向组网组件发送命令执行结果。
组网组件部署在容器运行节点内,与所属容器运行节点的虚拟网桥组件相连(与节点外的组网组件及虚拟网桥组件不相连),并与控制节点的中心数据库通过主机节点间的三层网络通信。组网组件通过命令行或键盘接收用户发送的组网命令,根据组网命令生成容器网络信息;将容器网络信息保存到中心数据库;向虚拟网桥组件发送创建、删除、配置、查询虚拟网桥、vxlan虚拟设备、端口命令。
组网组件包括:对外接口、容器加入退出网络模块、网络信息处理模块、VNI分配模块、网络主机列表更新模块五个子模块。
对外接口与容器加入退出网络模块、网络信息处理模块相连,负责从键盘或文件接收用户的组网命令。若接收到容器加入、退出网络命令,将容器名、要加入(退出)的网络名发送给容器加入退出网络模块;若接收到创建网络、删除网络命令,从命令中解析要添加及删除的容器网络,然后向网络信息处理模块发送添加、删除网络信息命令,并从容器网络信息处理模块接收返回的错误码。
容器加入退出网络模块与对外接口、网络信息处理模块、VNI分配模块、网络主机列表更新模块、虚拟网桥组件相连。容器加入退出网络模块负责处理容器加入、退出网络。容器加入退出网络模块从对外接口接收容器名、要加入(退出)的网络名;向网络信息处理模块发送查询容器网络信息命令,从网络信息处理模块接收容器网络信息;向VNI分配模块发送获取VNI命令,从VNI分配模块接收返回的VNI值、虚拟网桥名;向网络主机列表管理模块发送查询主机列表命令,从网络主机列表管理模块接收网络主机列表。根据容器名、容器网络信息和VNI值、虚拟网桥名、网络主机列表,计算容器加入退出时需要进行的虚拟网络设备配置、连接,以及需要变更的容器网络信息。向虚拟网桥组件发送创建、删除、配置、查询虚拟网桥、vxlan虚拟设备、端口命令;向网络信息处理模块发送更新容器网络信息命令;向网络主机列表管理模块发送更新网络主机列表命令。
网络信息处理模块与对外接口、容器加入退出网络模块、VNI分配模块、中心数据库相连。负责记录、保存容器网络信息,供容器加入退出网络模块、对外接口查询。网络信息处理模块存贮各容器网络的容器网络信息,作为中心数据库中保存的容器网络信息的缓存,在启动时从中心数据库载入数据,在数据发生变化时保存到中心数据库。网络信息处理模块从对外接口接收添加、删除容器网络信息命令,向VNI分配模块发送回收VNI命令,向对外接口返回错误码;从容器加入退出网络模块接收查询、更新容器网络信息命令,向容器加入退出网络模块返回容器网络信息。
VNI分配模块与容器加入退出网络模块、网络信息处理模块、网络主机列表更新模块、中心数据库相连。VNI分配模块给容器网络分配VNI。VNI分配模块存贮有一个已分配VNI集合,作为中心数据库中保存的已分配VNI集合的缓存。已分配VNI集合用于避免给不同容器网络分配重复的VNI。VNI分配模块从容器加入退出网络模块、网络主机列表更新模块接收获取VNI命令,根据命令中提供的网络名,比如netABC,从中心数据库查询网络名对应的VNI分配记录,即查询键为VNI/netABC的键值对的值。如果值存在,说明该VNI值已经分配给了容器网络netABC,向容器加入退出模块返回该VNI值;如果该值不存在,则为容器网络netABC分配VNI值(新VNI取值1到10000,且为已分配VNI集合中不存在的值),生成网络名对应的VNI分配记录(即键为VNI/netABC,值为新VNI值的键值对)保存到中心数据库,然后将新VNI值添加到已分配VNI集合,将更新后的已分配VNI集合保存到中心数据库,并向容器加入退出模块返回该新VNI值。VNI分配模块从网络信息管理模块接收回收VNI命令,收回分配给某个容器网络的VNI值,即在中心数据库中删除该网络名对应的VNI分配记录,在已分配VNI集合中删除该VNI值,并将更新后的已分配VNI集合保存到中心数据库。
网络主机列表更新模块与容器加入退出网络模块、VNI分配模块、中心数据库、虚拟网桥组件相连,网络主机列表更新模块包含各容器网络相关联的网络主机列表,网络主机列表包含网络名、不同容器运行节点的ip地址序列2个域,作为中心数据库中保存的容器网络主机列表的缓存;其中网络名为容器网络名称,不同容器运行节点的ip地址序列为不同容器运行节点的ip地址,与同一表项中的网络名对应的容器网络关联;例如结构为{net1:[ip1,ip2],net2:[ip1,ip3]}的网络主机列表中共2个表项,其中net1、net2为网络名,ip1、ip2、ip3为不同容器运行节点的ip地址,示例中表示:存在两个容器网络net1和net2,其中与net1关联的主机为ip1、ip2两个容器运行节点;与net2关联的主机为ip1、ip3两个容器运行节点。对于某个容器网络netC,其相关联的网络主机列表为符合以下要求的容器运行节点所组成的列表:容器运行节点中运行的容器里面存在至少一个容器属于容器网络netC。网络主机列表中记录的内容为容器运行节点的IP地址。网络主机列表更新模块负责记录、更新各容器网络相关联的网络主机列表,并负责将这些网络主机列表保存到中心数据库。网络主机列表更新模块从容器加入退出网络模块接收查询、更新网络主机列表命令,根据命令参数中的容器网络名查询关联的网络主机列表,向容器加入退出网络模块返回网络主机列表,或根据命令参数中的网络主机列表,在网络主机列表中添加或删除主机;向中心数据库发送保存、查询网络主机列表命令,从中心数据库中接收网络主机列表;向中心数据库发送监听网络主机列表命令,当中心数据库中被监听的网络主机列表发生变化时,从中心数据库接收网络主机列表更新消息,更新模块内的网络主机列表,并向虚拟网桥组件发送创建、删除、配置、查询虚拟网桥、vxlan虚拟设备、端口命令,调整虚拟设备的连接。
第三步,对外接口接收用户输入的组网命令。组网命令包括创建网络、删除网络、容器加入网络、容器退出网络。多个容器运行节点并行工作,均按以下流程进行组网处理。称接收到组网命令的容器运行节点为当前主机。
3.1对外接口从键盘或文件接收用户输入的组网命令。若组网命令是创建网络命令,转3.2;若组网命令是删除网络命令,转3.3;若组网命令是容器加入网络命令,转3.4;若组网命令是容器退出网络命令,转3.5。
3.2此时对外接口接收到创建网络命令,创建网络命令的格式为:创建网络–n网络名–ips使用的IP网段。按以下步骤创建网络:
3.2.1对外接口根据创建网络命令构建添加容器网络信息命令,添加容器网络信息命令中包括网络名、使用的IP网段,网络名等于创建网络命令中的网络名、使用的IP网段等于创建网络命令中使用的IP网段;向网络信息处理模块发送添加容器网络信息命令。
3.2.2网络信息处理模块利用添加容器网络信息命令中的网络名、网络使用的IP网段生成容器网络信息记录,并添加到网络信息处理模块内的容器网络信息中。
3.2.3网络信息处理模块将容器网络信息保存到中心数据库。转3.1。
3.3此时对外接口接收到删除网络命令,删除网络命令的格式为:删除网络–n网络名。令网络名为netD,按以下步骤删除网络:
3.3.1对外接口向网络信息处理模块发送删除容器网络信息命令,命令中包括网络名netD。
3.3.2网络信息处理模块检查网络netD中是否有容器在运行。如果netD中有容器在运行,转3.3.3;如果netD中没有容器运行,转3.3.4。
3.3.3网络信息处理模块向对外接口返回错误码,对外接口将错误码输出,告知用户netD不能删除。转3.1。
3.3.4网络信息处理模块向VNI分配模块发送回收VNI命令,命令参数为网络名netD。
3.3.5网络信息处理模块在网络信息处理模块内的容器网络信息中删除netD的容器网络信息记录,并将中心数据库中netD的容器网络信息记录删除。转3.1。
3.4此时组网命令是容器加入网络命令,容器加入网络命令的格式为:加入网络-n网络名-c容器名。令容器名为conA,容器要加入的网络名为netX,执行步骤如下:
3.4.1对外接口将容器名conA、要加入的网络名netX转发给容器加入退出网络模块。
3.4.2容器加入退出网络模块向VNI分配模块发送获取VNI命令,命令参数为netX。
3.4.3VNI分配模块在中心数据库中查询netX对应的VNI值,假设为k1,将k1与字符串BR拼接,得到容器网络netX在当前容器运行节点中对应的虚拟网桥名BRk1,将VNI值k1和虚拟网桥名BRk1返回给容器加入退出网络模块。
3.4.4容器加入退出网络模块向虚拟网桥组件发送查询虚拟网桥命令,查询网桥BRk1是否存在。
3.4.5如果容器加入退出网络模块从虚拟网桥组件接收到“TRUE”,说明网桥BRk1存在,转3.4.7。否则容器加入退出网络模块执行添加虚拟网桥BRk1的处理,并将虚拟网桥BRk1与容器网络netX中其他虚拟网桥相连。包括以下子步骤:
3.4.5.1容器加入退出网络模块向虚拟网桥组件发送创建虚拟网桥命令,命令参数为虚拟网桥名BRk1。虚拟网桥组件执行命令,创建虚拟网桥设备BRk1。
3.4.5.2容器加入退出网络模块向网络主机列表更新模块发送查询网络主机列表命令,命令参数为容器网络名netX。网络主机列表更新模块在网络主机列表更新模块内部的网络主机列表中查询与netX相关联的网络主机,并返回给容器加入退出网络模块。容器加入退出网络模块从收到的网络主机中排除当前容器运行节点,得到其他主机的IP地址序列,其他主机的IP地址序列内容为其他主机的IP地址,表示为{hostIP1,hostIP2,…,hostIPn,…,hostIPx},n的范围为1到列表长度x,x为正整数。
3.4.5.3令n=1,容器加入退出网络模块为其他主机IP地址序列中的第n个主机IP地址hostIPn生成创建vxlan虚拟设备的命令,命令格式为:“添加端口BRk1 vxlanBRk1-xscs类型vxlan key=k1远程IP=hostIPn”。命令参数包括网桥名、vxlan设备名、远程端IP和网络标识(key)。其中,网桥名取值为BRk1、vxlan设备名动态生成、远程端IP取值为hostIPn、网络标识取值为k1。将生成的命令加入到命令组中。
3.4.5.4令n=n+1,若n≤x,转3.4.5.3,否则说明得到了包含x条创建vxlan虚拟设备的命令的命令组,转3.4.5.5。
3.4.5.5容器加入退出网络模块将步骤3.4.5.3和步骤3.4.5.4生成的命令组发送给虚拟网桥。
3.4.5.6虚拟网桥组件执行命令,创建x个vxlan虚拟设备并连接到网桥BRk1上。转步骤3.4.6。
3.4.6将当前主机IP添加到容器网络netX关联的网络主机列表中。包括以下步骤:
3.4.6.1容器加入退出网络模块向网络主机列表更新模块发送更新网络主机列表命令,命令参数包括:网络名netX、当前容器运行节点的IP地址hostIPc。
3.4.6.2网络主机列表更新模块在netX关联的网络主机列表中添加hostIPc。
3.4.6.3网络主机列表更新模块将netX关联的网络主机列表保存到中心数据库中,开始监听中心数据库中该数据的更新,若监听结果是中心数据库中该数据未更新,转3.4.7;若监听到中心数据库中容器netX关联的网络主机列表被更新,转第四步。
3.4.7容器加入退出网络模块向网络信息处理模块发送更新容器网络信息命令,命令参数包括:网络名netX、网络VNI值k1、容器名conA。
3.4.8网络信息处理模块接收更新容器网络信息命令,更新网络信息处理模块内netX的容器网络信息:将VNI值更新为k1,在网络信息处理模块内部的容器网络信息记录的netX中运行的容器中添加容器conA。
3.4.9网络信息处理模块将netX的容器网络信息保存到中心数据库。
3.4.10容器加入退出网络模块为容器创建veth pair设备对,并向虚拟网桥组件发送添加端口命令:“添加端口BRk veth-desd–配置端口veth-desd容器名=conA”,在网桥BRk中创建端口并连接veth pair设备对的一端;veth pair设备的另一端连接容器,从而将容器连上虚拟网桥。至此,容器加入网络netX完成。转3.1。
3.5此时组网命令是容器退出网络命令,容器退出网络命令的格式为:退出网络-n网络名-c容器名。令容器名为conB,容器要退出的网络名为netY,执行步骤如下:
3.5.1对外接口将容器名conB、要退出的网络名netY转发到容器加入退出网络模块。
3.5.2容器加入退出网络模块向VNI分配模块发送获取VNI命令,命令参数为netY。得到容器netY的VNI值,假设为k2,以及容器网络netY在当前主机中对应的虚拟网桥名BRk2。
3.5.3容器加入退出网络模块向虚拟网桥组件发送删除端口的命令:“删除端口BRk2 veth-dsdk”,虚拟网桥组件执行命令,在虚拟网桥BRk2中删除连接容器的端口以及该端口上的veth pair设备。
3.5.4容器加入退出网络模块检查容器conB是否为容器网络netY在当前容器运行节点中的最后一个容器。
3.5.5若容器conB不是网络netY在当前容器运行节点中的最后一个容器,转3.1,容器退出网络的处理完成。否则,容器加入退出网络模块向虚拟网桥组件发送删除命令:“删除端口BRk2 vxlanBRk-xsdd”和“删除网桥BRk2”,虚拟网桥组件执行命令,将虚拟网桥BRk2及其中的vxlan虚拟设备从当前主机中删除,转3.5.6。
3.5.6容器加入退出网络模块向主机列表更新模块发送更新网络主机列表命令,命令参数包括网络名netY和当前容器运行节点。
3.5.7主机列表更新模块在主机列表更新模块内netY关联的网络主机列表中删除当前容器运行节点的IP地址,将新的容器网络主机列表信息保存到中心数据库。至此,当前容器运行节点与网络netY不再关联,主机列表更新模块停止监听中心数据库中netY关联的网络主机列表。转3.1
第四步,主机列表更新模块从中心数据库接收网络主机列表更新消息,更新模块内部的网络主机列表,并更新虚拟设备的连接。具体执行步骤如下:
4.1主机列表更新模块从中心数据库接收网络主机列表更新消息,消息内容为:容器网络名(令容器网络名为netZ)、容器网络(netZ)相关联的主机列表。
4.2主机列表更新模块向VNI分配模块发送获取VNI命令,命令参数为netZ,得到容器网络netZ的VNI值,假设为k3,以及容器网络netZ在当前主机中对应的虚拟网桥名BRk3。
4.3主机列表更新模块对比模块内的网络主机列表和网络主机列表更新消息中的网络主机列表即新网络主机列表,得到新网络主机列表中删除的主机和新增的主机,这些主机都是容器运行节点。
4.4对于新网络主机列表中删除的容器运行节点,该容器运行节点中属于容器网络netZ的虚拟网桥已经被删除,需要删除虚拟网桥BRk3中与被删除虚拟网桥进行连接的vxlan虚拟设备。网络主机列表更新模块向虚拟网桥组件发送删除vxlan虚拟设备命令:“删除端口BRk3 vxlanBRk-xsdd”,其中BRk3为待删除vxlan虚拟设备所连接的虚拟网桥,vxlanBRk-xsdd为待删除vxlan虚拟设备名。虚拟网桥组件执行命令,在BRk3中删除与该容器运行节点中虚拟网桥连接的vxlan设备。
4.5对于新主机列表中新增的容器运行节点,该容器运行节点中新增加了属于容器网络netZ的虚拟网桥,需要添加vxlan虚拟设备将虚拟网桥BRk3与新增加的虚拟网桥进行连接。网络主机列表更新模块向虚拟网桥组件发送添加命令:“添加端口BRk3 vxlanBRk-xdfs–配置端口vxlanBRk-xdfs类型=vxlan key=k3远程IP=hostIP”,其中BRk3为待添加vxlan虚拟设备所连接的虚拟网桥,vxlanBRk-xsdd为待添加vxlan虚拟设备名,k3用于识别所属容器网络,hostIP为vxlan虚拟设备连接的远程容器运行节点(即新增的容器运行节点)的IP地址。虚拟网桥组件执行命令,在虚拟网桥BRk3中添加与该容器运行节点中虚拟网桥连接的vxlan设备,设置vxlan虚拟设备的远程端IP为新增的容器运行节点的IP地址。
采用本发明可以达到以下技术效果:
(1)将不同容器网络、不同vxlan隧道的功能单元利用多个虚拟设备细粒度隔离到具体的虚拟网桥、vxlan虚拟设备,避免设备上的单点故障。
(2)当网络发生故障时,能够根据故障所在的逻辑功能单元,迅速定位到具体的虚拟网络设备。当某个容器网络发生故障时,由于一个容器网络的虚拟设备与其他容器网络的虚拟设备相互独立,只需要检查该容器网络的虚拟网络设备,当某个容器的网络通信发生故障时,则只需要检查容器所在主机及所在容器网络所对应的那个虚拟网桥。同样,由于特定容器网络中跨越特定两个主机的通信隧道由专用的两个vxlan虚拟设备负责,当容器网络中的跨主机容器通信发生故障时,只需要查看这两个特定的vxlan虚拟设备。
(3)最大限度减少容器网络内的二层数据广播和数据冲突。二层网络的数据广播会发送到所在容器网络中的每一个虚拟网桥。本发明中,容器网络在主机内,直到有容器加入时才会创建虚拟网桥(步骤3.4.5);当主机中最后一个属于容器网络的容器退出时马上会删除虚拟网桥(步骤3.5.5),及时保持虚拟网桥数量最少,避免不需要的虚拟网桥。
(4)网络配置的全局分发负载低、效率高。步骤4.4中组网组件接收其他主机的状态更新并进行调整只依赖具体容器网络的相关联的主机列表,这些主机列表中只包含主机的IP地址,数据量少。中心数据库中容器网络主机列表的更新只发生在主机中第一个加入容器网络的容器加入时(步骤3.4.6),以及最后一个退出容器网络的容器退出时(步骤3.5.7)。
附图说明
图1是本发明总体流程图。
图2是本发明第一步搭建的容器网络底层环境与第二步中搭建的组网系统的软件部署结构图。
图3是本发明第二步中组网组件各模块的连接关系图。
图4是采用本发明组网成功后的一个示例,显示组网后容器网络及虚拟网络设备关系。
具体实施方式
以下将结合说明书附图对本发明做进一步详细说明。
如图1所示,本发明包括以下步骤:
第一步,搭建容器网络底层环境。容器网络底层环境如图2所示,由多个主机节点构成,这些主机节点通过三层网络连在一起,能够实现三层互通(即IP层互通)。主机节点根据功能不同分为两种:控制节点(共M个)和容器运行节点(共N个)。控制节点用于安装中心数据库;容器运行节点用于运行容器。容器组网方法即对容器运行节点中运行的容器进行组网。M和N均为正整数。
第二步,在容器网络底层环境中搭建组网系统。如图2所示,即在容器运行节点安装虚拟网桥组件、组网组件,在控制节点安装中心数据库。
在M个控制节点采用分布式存贮的方式部署中心数据库,中心数据库采用开源数据库etcd(3.0或3.0以上版本),etcd具备消息通知功能且可在多个节点上运行使得中心数据库分布式运行在M个控制节点。中心数据库中保存各容器网络的全局信息,供组网组件进行信息查询,并能在数据发生变化时通知组网组件。中心数据库保存的全局信息包括:容器网络信息、容器网络主机列表、容器网络VNI(Virtual Network Identify虚拟网络标识,用于标识不同的容器网络)分配记录、已分配VNI集合总共四类。这些全局信息通过键值对的方式保存在数据库,其中键为一个字符串,用于索引及区分不同的数据记录,值为具体的数据信息。
容器网络信息包含K条容器数据记录(对应K个容器网络,一条数据记录对应一个容器网络)。这些数据记录的键为“netInfo/”和容器网络名组成的字符串,比如:“netInfo/net1”。值中包含容器网络名、网络VNI、网络中运行的容器,容器网络名是字符串,表示容器网络的名称;网络VNI是整数,表示容器网络的VNI;网络中运行的容器是由逗号分开的R个字符串,表示R个容器名称,R为正整数。比如:{name:“net1”,VNI:1,containers:[“container1”,“container2”]}。其中,name:“net1”表示这是容器网络net1的容器网络信息;VNI:1表示容器网络net1的VNI值为1;containers:[“container1”,“container2”]表示容器网络net1中运行有两个容器container1和container2。
容器网络主机列表包含K条主机数据记录(对应K个容器网络)。这些数据记录的键为“netlist/”和容器网络名组成的字符串,比如:“netlist/net1”。值为主机列表中与容器网络名所指容器网络相关联的容器运行节点的IP地址,比如:[“10.144.0.1”,“10.145.16.2”],表示容器网络net1关联两个容器运行节点,其IP地址分别为10.144.0.1和10.145.16.2。
容器网络VNI分配记录包含K条VNI数据记录(对应K个容器网络)。这些数据记录的键为“VNI/”和容器网络名组成的字符串,比如:“VNI/net1”。值为分配给容器网络的VNI值。比如123,表示分配给容器网络net1的VNI值为123。
已分配VNI集合在中心数据库中只有一条数据记录,键为字符串“VNISet”。值为所有已分配VNI的集合,表示已分配VNI的集合中的VNI值已经分配给了已经存在的容器网络;比如{1,2,123},表示1、2、123这三个VNI值已经分配给了已经存在的另外3个容器网络,新的容器网络需要分配其他值。
在N个容器运行节点部署组网组件和虚拟网桥组件。
虚拟网桥组件采用开源的OpenvSwitch(2.10或2.10以上版本),与组网组件、容器相连。虚拟网桥组件负责在容器运行节点创建虚拟网桥设备、vxlan虚拟设备,并通过内部配置,将虚拟网桥设备、vxlan虚拟设备、容器连接起来。虚拟网桥组件从组网组件接收创建、删除、配置、查询虚拟网桥、vxlan虚拟设备、端口命令,根据命令创建、配置、删除、查询虚拟网络设备并将容器连接到虚拟网络设备以完成组网,并向组网组件发送命令执行结果。
组网组件部署在容器运行节点内,与所属容器运行节点的虚拟网桥组件相连(与节点外的组网组件及虚拟网桥组件不相连),并与控制节点的中心数据库通过主机节点间的三层网络通信。组网组件通过命令行或键盘接收用户发送的组网命令,根据组网命令生成容器网络信息;将容器网络信息保存到中心数据库;向虚拟网桥组件发送创建、删除、配置、查询虚拟网桥、vxlan虚拟设备、端口命令。
组网组件如图2所示,包括:对外接口、容器加入退出网络模块、网络信息处理模块、VNI分配模块、网络主机列表更新模块五个子模块。
如图3所示,对外接口与容器加入退出网络模块、网络信息处理模块相连,负责从键盘或文件接收用户的组网命令。若接收到容器加入、退出网络命令,将容器名、要加入(退出)的网络名发送给容器加入退出网络模块;若接收到创建网络、删除网络命令,从命令中解析要添加及删除的容器网络,然后向网络信息处理模块发送添加、删除网络信息命令,并从容器网络信息处理模块接收返回的错误码。
容器加入退出网络模块与对外接口、网络信息处理模块、VNI分配模块、网络主机列表更新模块、虚拟网桥组件相连。容器加入退出网络模块负责处理容器加入、退出网络。容器加入退出网络模块从对外接口接收容器名、要加入(退出)的网络名;向网络信息处理模块发送查询容器网络信息命令,从网络信息处理模块接收容器网络信息;向VNI分配模块发送获取VNI命令,从VNI分配模块接收返回的VNI值、虚拟网桥名;向网络主机列表管理模块发送查询主机列表命令,从网络主机列表管理模块接收网络主机列表。根据容器名、容器网络信息和VNI值、虚拟网桥名、网络主机列表,计算容器加入退出时需要进行的虚拟网络设备配置、连接,以及需要变更的容器网络信息。向虚拟网桥组件发送创建、删除、配置、查询虚拟网桥、vxlan虚拟设备、端口命令;向网络信息处理模块发送更新容器网络信息命令;向网络主机列表管理模块发送更新网络主机列表命令。
网络信息处理模块与对外接口、容器加入退出网络模块、VNI分配模块、中心数据库相连。负责记录、保存容器网络信息,供容器加入退出网络模块、对外接口查询。网络信息处理模块存贮各容器网络的容器网络信息,作为中心数据库中保存的容器网络信息的缓存,在启动时从中心数据库载入数据,在数据发生变化时保存到中心数据库。网络信息处理模块从对外接口接收添加、删除容器网络信息命令,向VNI分配模块发送回收VNI命令,向对外接口返回错误码;从容器加入退出网络模块接收查询、更新容器网络信息命令,向容器加入退出网络模块返回容器网络信息。
VNI分配模块与容器加入退出网络模块、网络信息处理模块、网络主机列表更新模块、中心数据库相连。VNI分配模块给容器网络分配VNI。VNI分配模块存贮有一个已分配VNI集合,作为中心数据库中保存的已分配VNI集合的缓存。已分配VNI集合用于避免给不同容器网络分配重复的VNI。VNI分配模块从容器加入退出网络模块、网络主机列表更新模块接收获取VNI命令,根据命令中提供的网络名,比如netABC,从中心数据库查询网络名对应的VNI分配记录,即查询键为VNI/netABC的键值对的值。如果值存在,说明该VNI值已经分配给了容器网络netABC,向容器加入退出模块返回该VNI值;如果该值不存在,则为容器网络netABC分配VNI值(新VNI取值1到10000,且为已分配VNI集合中不存在的值),生成网络名对应的VNI分配记录(即键为VNI/netABC,值为新VNI值的键值对)保存到中心数据库,然后将新VNI值添加到已分配VNI集合,将更新后的已分配VNI集合保存到中心数据库,并向容器加入退出模块返回该新VNI值。VNI分配模块从网络信息管理模块接收回收VNI命令,收回分配给某个容器网络的VNI值,即在中心数据库中删除该网络名对应的VNI分配记录,在已分配VNI集合中删除该VNI值,并将更新后的已分配VNI集合保存到中心数据库。
网络主机列表更新模块与容器加入退出网络模块、VNI分配模块、中心数据库、虚拟网桥组件相连,网络主机列表更新模块包含各容器网络相关联的网络主机列表,网络主机列表包含网络名、不同容器运行节点的ip地址序列2个域,作为中心数据库中保存的容器网络主机列表的缓存;其中网络名为容器网络名称,不同容器运行节点的ip地址序列为不同容器运行节点的ip地址,与同一表项中的网络名对应的容器网络关联;例如结构为{net1:[ip1,ip2],net2:[ip1,ip3]}的网络主机列表中共2个表项,其中net1、net2为网络名,ip1、ip2、ip3为不同容器运行节点的ip地址,示例中表示:存在两个容器网络net1和net2,其中与net1关联的主机为ip1、ip2两个容器运行节点;与net2关联的主机为ip1、ip3两个容器运行节点。对于某个容器网络netC,其相关联的网络主机列表为符合以下要求的容器运行节点所组成的列表:容器运行节点中运行的容器里面存在至少一个容器属于容器网络netC。网络主机列表中记录的内容为容器运行节点的IP地址。网络主机列表更新模块负责记录、更新各容器网络相关联的网络主机列表,并负责将这些网络主机列表保存到中心数据库。网络主机列表更新模块从容器加入退出网络模块接收查询、更新网络主机列表命令,根据命令参数中的容器网络名查询关联的网络主机列表,向容器加入退出网络模块返回网络主机列表,或根据命令参数中的网络主机列表,在网络主机列表中添加或删除主机;向中心数据库发送保存、查询网络主机列表命令,从中心数据库中接收网络主机列表;向中心数据库发送监听网络主机列表命令,当中心数据库中被监听的网络主机列表发生变化时,从中心数据库接收网络主机列表更新消息,更新模块内的网络主机列表,并向虚拟网桥组件发送创建、删除、配置、查询虚拟网桥、vxlan虚拟设备、端口命令,调整虚拟设备的连接。
第三步,对外接口接收用户输入的组网命令。组网命令包括创建网络、删除网络、容器加入网络、容器退出网络。多个容器运行节点并行工作,均按以下流程进行组网处理。称接收到组网命令的容器运行节点为当前主机。
3.1对外接口从键盘或文件接收用户输入的组网命令。若组网命令是创建网络命令,转3.2;若组网命令是删除网络命令,转3.3;若组网命令是容器加入网络命令,转3.4;若组网命令是容器退出网络命令,转3.5。
3.2此时对外接口接收到创建网络命令,创建网络命令的格式为:创建网络–n网络名–ips使用的IP网段。按以下步骤创建网络:
3.2.1对外接口根据创建网络命令构建添加容器网络信息命令,添加容器网络信息命令中包括网络名、使用的IP网段,网络名等于创建网络命令中的网络名、使用的IP网段等于创建网络命令中使用的IP网段;向网络信息处理模块发送添加容器网络信息命令。
3.2.2网络信息处理模块利用添加容器网络信息命令中的网络名、网络使用的IP网段生成容器网络信息记录,并添加到网络信息处理模块内的容器网络信息中。
3.2.3网络信息处理模块将容器网络信息保存到中心数据库。转3.1。
3.3此时对外接口接收到删除网络命令,删除网络命令的格式为:删除网络–n网络名。令网络名为netD,按以下步骤删除网络:
3.3.1对外接口向网络信息处理模块发送删除容器网络信息命令,命令中包括网络名netD。
3.3.2网络信息处理模块检查网络netD中是否有容器在运行。如果netD中有容器在运行,转3.3.3;如果netD中没有容器运行,转3.3.4。
3.3.3网络信息处理模块向对外接口返回错误码,对外接口将错误码输出,告知用户netD不能删除。转3.1。
3.3.4网络信息处理模块向VNI分配模块发送回收VNI命令,命令参数为网络名netD。
3.3.5网络信息处理模块在网络信息处理模块内的容器网络信息中删除netD的容器网络信息记录,并将中心数据库中netD的容器网络信息记录删除。转3.1。
3.4此时组网命令是容器加入网络命令,容器加入网络命令的格式为:加入网络-n网络名-c容器名。令容器名为conA,容器要加入的网络名为netX,执行步骤如下:
3.4.1对外接口将容器名conA、要加入的网络名netX转发给容器加入退出网络模块。
3.4.2容器加入退出网络模块向VNI分配模块发送获取VNI命令,命令参数为netX。
3.4.3VNI分配模块在中心数据库中查询netX对应的VNI值,假设为k1,将k1与字符串BR拼接,得到容器网络netX在当前容器运行节点中对应的虚拟网桥名BRk1,将VNI值k1和虚拟网桥名BRk1返回给容器加入退出网络模块。
3.4.4容器加入退出网络模块向虚拟网桥组件发送查询虚拟网桥命令,查询网桥BRk1是否存在。
3.4.5如果容器加入退出网络模块从虚拟网桥组件接收到“TRUE”,说明网桥BRk1存在,转3.4.7。否则容器加入退出网络模块执行添加虚拟网桥BRk1的处理,并将虚拟网桥BRk1与容器网络netX中其他虚拟网桥相连。包括以下子步骤:
3.4.5.1容器加入退出网络模块向虚拟网桥组件发送创建虚拟网桥命令,命令参数为虚拟网桥名BRk1。虚拟网桥组件执行命令,创建虚拟网桥设备BRk1。
3.4.5.2容器加入退出网络模块向网络主机列表更新模块发送查询网络主机列表命令,命令参数为容器网络名netX。网络主机列表更新模块在网络主机列表更新模块内部的网络主机列表中查询与netX相关联的网络主机,并返回给容器加入退出网络模块。容器加入退出网络模块从收到的网络主机中排除当前容器运行节点,得到其他主机的IP地址序列,其他主机的IP地址序列内容为其他主机的IP地址,表示为{hostIP1,hostIP2,…,hostIPn,…,hostIPx},n的范围为1到列表长度x,x为正整数。
3.4.5.3令n=1,容器加入退出网络模块为其他主机IP地址序列中的第n个主机IP地址hostIPn生成创建vxlan虚拟设备的命令,命令格式为:“添加端口BRk1 vxlanBRk1-xscs类型vxlan key=k1远程IP=hostIPn”。命令参数包括网桥名、vxlan设备名、远程端IP和网络标识(key)。其中,网桥名取值为BRk1、vxlan设备名动态生成、远程端IP取值为hostIPn、网络标识取值为k1。将生成的命令加入到命令组中。
3.4.5.4令n=n+1,若n≤x,转3.4.5.3,否则说明得到了包含x条创建vxlan虚拟设备的命令的命令组,转3.4.5.5。
3.4.5.5容器加入退出网络模块将步骤3.4.5.3和步骤3.4.5.4生成的命令组发送给虚拟网桥。
3.4.5.6虚拟网桥组件执行命令,创建x个vxlan虚拟设备并连接到网桥BRk1上。转步骤3.4.6。
3.4.6将当前主机IP添加到容器网络netX关联的网络主机列表中。包括以下步骤:
3.4.6.1容器加入退出网络模块向网络主机列表更新模块发送更新网络主机列表命令,命令参数包括:网络名netX、当前容器运行节点的IP地址hostIPc。
3.4.6.2网络主机列表更新模块在netX关联的网络主机列表中添加hostIPc。
3.4.6.3网络主机列表更新模块将netX关联的网络主机列表保存到中心数据库中,开始监听中心数据库中该数据的更新,若监听结果是中心数据库中该数据未更新,转3.4.7;若监听到中心数据库中容器netX关联的网络主机列表被更新,转第四步。
3.4.7容器加入退出网络模块向网络信息处理模块发送更新容器网络信息命令,命令参数包括:网络名netX、网络VNI值k1、容器名conA。
3.4.8网络信息处理模块接收更新容器网络信息命令,更新网络信息处理模块内netX的容器网络信息:将VNI值更新为k1,在网络信息处理模块内部的容器网络信息记录的netX中运行的容器中添加容器conA。
3.4.9网络信息处理模块将netX的容器网络信息保存到中心数据库。
3.4.10容器加入退出网络模块为容器创建veth pair设备对,并向虚拟网桥组件发送添加端口命令:“添加端口BRk veth-desd–配置端口veth-desd容器名=conA”,在网桥BRk中创建端口并连接veth pair设备对的一端;veth pair设备的另一端连接容器,从而将容器连上虚拟网桥。至此,容器加入网络netX完成。转3.1。
3.5此时组网命令是容器退出网络命令,容器退出网络命令的格式为:退出网络-n网络名-c容器名。令容器名为conB,容器要退出的网络名为netY,执行步骤如下:
3.5.1对外接口将容器名conB、要退出的网络名netY转发到容器加入退出网络模块。
3.5.2容器加入退出网络模块向VNI分配模块发送获取VNI命令,命令参数为netY。得到容器netY的VNI值,假设为k2,以及容器网络netY在当前主机中对应的虚拟网桥名BRk2。
3.5.3容器加入退出网络模块向虚拟网桥组件发送删除端口的命令:“删除端口BRk2 veth-dsdk”,虚拟网桥组件执行命令,在虚拟网桥BRk2中删除连接容器的端口以及该端口上的veth pair设备。
3.5.4容器加入退出网络模块检查容器conB是否为容器网络netY在当前容器运行节点中的最后一个容器。
3.5.5若容器conB不是网络netY在当前容器运行节点中的最后一个容器,转3.1,容器退出网络的处理完成。否则,容器加入退出网络模块向虚拟网桥组件发送删除命令:“删除端口BRk2 vxlanBRk-xsdd”和“删除网桥BRk2”,虚拟网桥组件执行命令,将虚拟网桥BRk2及其中的vxlan虚拟设备从当前主机中删除,转3.5.6。
3.5.6容器加入退出网络模块向主机列表更新模块发送更新网络主机列表命令,命令参数包括网络名netY和当前容器运行节点。
3.5.7主机列表更新模块在主机列表更新模块内netY关联的网络主机列表中删除当前容器运行节点的IP地址,将新的容器网络主机列表信息保存到中心数据库。至此,当前容器运行节点与网络netY不再关联,主机列表更新模块停止监听中心数据库中netY关联的网络主机列表。转3.1
第四步,主机列表更新模块从中心数据库接收网络主机列表更新消息,更新模块内部的网络主机列表,并更新虚拟设备的连接。具体执行步骤如下:
4.1主机列表更新模块从中心数据库接收网络主机列表更新消息,消息内容为:容器网络名(令容器网络名为netZ)、容器网络(netZ)相关联的主机列表。
4.2主机列表更新模块向VNI分配模块发送获取VNI命令,命令参数为netZ,得到容器网络netZ的VNI值,假设为k3,以及容器网络netZ在当前主机中对应的虚拟网桥名BRk3。
4.3主机列表更新模块对比模块内的网络主机列表和网络主机列表更新消息中的网络主机列表即新网络主机列表,得到新网络主机列表中删除的主机和新增的主机,这些主机都是容器运行节点。
4.4对于新网络主机列表中删除的容器运行节点,该容器运行节点中属于容器网络netZ的虚拟网桥已经被删除,需要删除虚拟网桥BRk3中与被删除虚拟网桥进行连接的vxlan虚拟设备。网络主机列表更新模块向虚拟网桥组件发送删除vxlan虚拟设备命令:“删除端口BRk3 vxlanBRk-xsdd”,其中BRk3为待删除vxlan虚拟设备所连接的虚拟网桥,vxlanBRk-xsdd为待删除vxlan虚拟设备名。虚拟网桥组件执行命令,在BRk3中删除与该容器运行节点中虚拟网桥连接的vxlan设备。
4.5对于新主机列表中新增的容器运行节点,该容器运行节点中新增加了属于容器网络netZ的虚拟网桥,需要添加vxlan虚拟设备将虚拟网桥BRk3与新增加的虚拟网桥进行连接。网络主机列表更新模块向虚拟网桥组件发送添加命令:“添加端口BRk3 vxlanBRk-xdfs–配置端口vxlanBRk-xdfs类型=vxlan key=k3远程IP=hostIP”,其中BRk3为待添加vxlan虚拟设备所连接的虚拟网桥,vxlanBRk-xsdd为待添加vxlan虚拟设备名,k3用于识别所属容器网络,hostIP为vxlan虚拟设备连接的远程容器运行节点(即新增的容器运行节点)的IP地址。虚拟网桥组件执行命令,在虚拟网桥BRk3中添加与该容器运行节点中虚拟网桥连接的vxlan设备,设置vxlan虚拟设备的远程端IP为新增的容器运行节点的IP地址。
图4是采用本发明组网成功后的一个示例,显示组网后容器网络及虚拟网络设备关系。如图4所示,采用本发明成功组网后的一个示例总共包括三个容器网络Net1、Net2、Net3,分布在三个容器运行节点H1、H2、H3。
容器网络Net1在三个容器运行节点中都有容器运行。在容器运行节点H1中连接容器的虚拟网桥设备为网桥1-1,在容器运行节点H2中连接容器的虚拟网桥设备组件-为网桥1-2,在容器运行节点H3中连接容器的虚拟网桥为网桥1-3。每个虚拟网桥中有两个vxlan设备与其他两个虚拟网桥实现跨主机连接,有若干veth设备连接容器。网桥1-3中展示虚拟网桥中vxlan设备、veth设备的详细图示。
容器网络Net2只在容器运行节点H1和容器运行节点H3中有容器运行,在H1中连接容器的虚拟网桥为网桥2-1,在H3中连接容器的虚拟网桥为网桥2-3。每个虚拟网桥中有一个vxlan设备连接到对方。容器网络Net2在容器运行节点H2中没有容器运行,所以在H2中没有网桥设备连接到容器网络Net2,容器网络Net2中的广播数据也不会被发送到H2。
容器网络Net3只在容器运行节点H2和容器运行节点H3中有容器运行,与容器网络Net2类似。
三个容器网络分别有自己的虚拟网络设备,相互隔离、互不干扰。
这个示例仅是本发明的实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
Claims (5)
1.一种多虚拟设备容器组网方法,其特征在于包括以下步骤:
本发明包括以下步骤:
第一步,搭建容器网络底层环境:容器网络底层环境由多个主机节点构成,这些主机节点通过三层网络连在一起实现IP层互通;主机节点根据功能不同分为两种:控制节点和容器运行节点,控制节点共M个,容器运行节点共N个;控制节点用于安装中心数据库;容器运行节点用于运行容器;M和N均为正整数;所述三层网络指TCP/IP网络的第三层网络,又称IP网络,通过IP地址进行寻址;
第二步,在容器网络底层环境中搭建组网系统,即在容器运行节点安装虚拟网桥组件、组网组件,在控制节点安装中心数据库,方法是:
在M个控制节点采用分布式存贮的方式部署中心数据库,中心数据库中保存各容器网络的全局信息,供组网组件进行信息查询,并在数据发生变化时通知组网组件;中心数据库保存的全局信息包括:容器网络信息、容器网络主机列表、容器网络VNI即虚拟网络标识分配记录、已分配VNI集合总共四类;这些全局信息通过键值对的方式保存在数据库,其中键为一个字符串,用于索引及区分不同的数据记录,值为具体的数据信息;
容器网络信息包含K条容器数据记录,一条容器数据记录对应一个容器网络;这些数据记录的键为“netInfo/”和容器网络名组成的字符串,值中包含容器网络名、网络VNI、网络中运行的容器,容器网络名是字符串,表示容器网络的名称;网络VNI是整数,表示容器网络的VNI;网络中运行的容器是由逗号分开的R个字符串,表示R个容器名称,R为正整数;
容器网络主机列表包含K条主机数据记录,这些主机数据记录的键为“netlist/”和容器网络名组成的字符串,值为主机列表中与容器网络名所指容器网络相关联的容器运行节点的IP地址;
容器网络VNI分配记录包含K条VNI数据记录,这些VNI数据记录的键为“VNI/”和容器网络名组成的字符串,值为分配给容器网络的VNI值;
已分配VNI集合在中心数据库中为一条数据记录,键为字符串“VNISet”。值为所有已分配VNI的集合,表示已分配VNI的集合中的VNI值已经分配给了已经存在的容器网络;
在N个容器运行节点部署组网组件和虚拟网桥组件,方法是:
虚拟网桥组件与组网组件、容器相连;虚拟网桥组件负责在容器运行节点创建虚拟网桥设备、vxlan虚拟设备,并通过内部配置,将虚拟网桥设备、vxlan虚拟设备、容器连接起来;虚拟网桥组件从组网组件接收创建、删除、配置、查询虚拟网桥、vxlan虚拟设备、端口命令,根据命令创建、配置、删除、查询虚拟网桥、vxlan虚拟设备、端口并将容器连接到虚拟网络设备以完成组网,并向组网组件发送命令执行结果;所述虚拟网络设备包括虚拟网桥、vxlan虚拟设备、端口;
组网组件部署在容器运行节点内,与所属容器运行节点的虚拟网桥组件相连,并与控制节点的中心数据库通过主机节点间的三层网络通信;组网组件通过命令行或键盘接收用户发送的组网命令,根据组网命令生成容器网络信息;将容器网络信息保存到中心数据库;向虚拟网桥组件发送创建、删除、配置、查询虚拟网桥、vxlan虚拟设备、端口命令;
组网组件包括:对外接口、容器加入退出网络模块、网络信息处理模块、VNI分配模块、网络主机列表更新模块五个子模块;
对外接口与容器加入退出网络模块、网络信息处理模块相连,负责从键盘或文件接收用户的组网命令;若接收到容器加入、退出网络命令,将容器名、要加入或退出的网络名发送给容器加入退出网络模块;若接收到创建网络、删除网络命令,从命令中解析要添加及删除的容器网络,然后向网络信息处理模块发送添加、删除网络信息命令,并从容器网络信息处理模块接收返回的错误码;
容器加入退出网络模块与对外接口、网络信息处理模块、VNI分配模块、网络主机列表更新模块、虚拟网桥组件相连;容器加入退出网络模块负责处理容器加入、退出网络;容器加入退出网络模块从对外接口接收容器名、要加入或退出的网络名;向网络信息处理模块发送查询容器网络信息命令,从网络信息处理模块接收容器网络信息;向VNI分配模块发送获取VNI命令,从VNI分配模块接收返回的VNI值、虚拟网桥名;向网络主机列表管理模块发送查询主机列表命令,从网络主机列表管理模块接收网络主机列表;根据容器名、容器网络信息和VNI值、虚拟网桥名、网络主机列表,计算容器加入退出时需要进行的虚拟网络设备配置、连接,以及需要变更的容器网络信息;向虚拟网桥组件发送创建、删除、配置、查询虚拟网桥、vxlan虚拟设备、端口命令;向网络信息处理模块发送更新容器网络信息命令;向网络主机列表管理模块发送更新网络主机列表命令。
网络信息处理模块与对外接口、容器加入退出网络模块、VNI分配模块、中心数据库相连;负责记录、保存容器网络信息,供容器加入退出网络模块、对外接口查询;网络信息处理模块存贮各容器网络的容器网络信息,作为中心数据库中保存的容器网络信息的缓存,在启动时从中心数据库载入数据,在数据发生变化时保存到中心数据库;网络信息处理模块从对外接口接收添加、删除容器网络信息命令,向VNI分配模块发送回收VNI命令,向对外接口返回错误码;从容器加入退出网络模块接收查询、更新容器网络信息命令,向容器加入退出网络模块返回容器网络信息;
VNI分配模块与容器加入退出网络模块、网络信息处理模块、网络主机列表更新模块、中心数据库相连;VNI分配模块给容器网络分配VNI;VNI分配模块存贮有一个已分配VNI集合,作为中心数据库中保存的已分配VNI集合的缓存;VNI分配模块从容器加入退出网络模块、网络主机列表更新模块接收获取VNI命令,根据命令中提供的网络名,令此网络名为netABC,从中心数据库查询netABC对应的VNI分配记录,即查询键为VNI/netABC的键值对的值。如果值存在,说明该VNI值已经分配给了容器网络netABC,向容器加入退出模块返回该VNI值;如果该值不存在,则为容器网络netABC分配VNI值,新VNI取值为已分配VNI集合中不存在的值,生成网络名对应的VNI分配记录,即键为VNI/netABC,值为新VNI值的键值对,将该VNI分配记录保存到中心数据库,然后将新VNI值添加到已分配VNI集合,将更新后的已分配VNI集合保存到中心数据库,并向容器加入退出模块返回该新VNI值;VNI分配模块从网络信息管理模块接收回收VNI命令,收回分配给某个容器网络的VNI值,即在中心数据库中删除该网络名对应的VNI分配记录,在已分配VNI集合中删除该VNI值,并将更新后的已分配VNI集合保存到中心数据库;
网络主机列表更新模块与容器加入退出网络模块、VNI分配模块、中心数据库、虚拟网桥组件相连,网络主机列表更新模块包含各容器网络相关联的网络主机列表,网络主机列表包含网络名、不同容器运行节点的ip地址序列2个域,作为中心数据库中保存的容器网络主机列表的缓存;其中网络名为容器网络名称,不同容器运行节点的ip地址序列为不同容器运行节点的ip地址,与同一表项中的网络名对应的容器网络关联;对于某个容器网络netC,其相关联的网络主机列表为符合以下要求的容器运行节点所组成的列表:容器运行节点中运行的容器里面存在至少一个容器属于容器网络netC;网络主机列表中记录的内容为容器运行节点的IP地址;网络主机列表更新模块负责记录、更新各容器网络相关联的网络主机列表,并负责将这些网络主机列表保存到中心数据库;网络主机列表更新模块从容器加入退出网络模块接收查询、更新网络主机列表命令,根据命令参数中的容器网络名查询关联的网络主机列表,向容器加入退出网络模块返回网络主机列表,或根据命令参数中的网络主机列表,在网络主机列表中添加或删除主机;向中心数据库发送保存、查询网络主机列表命令,从中心数据库中接收网络主机列表;向中心数据库发送监听网络主机列表命令,当中心数据库中被监听的网络主机列表发生变化时,从中心数据库接收网络主机列表更新消息,更新模块内的网络主机列表,并向虚拟网桥组件发送创建、删除、配置、查询虚拟网桥、vxlan虚拟设备、端口命令,调整虚拟设备的连接;
第三步,对外接口接收用户输入的组网命令;组网命令包括创建网络、删除网络、容器加入网络、容器退出网络;多个容器运行节点并行工作,均按以下流程进行组网处理,称接收到组网命令的容器运行节点为当前主机:
3.1对外接口从键盘或文件接收用户输入的组网命令,若组网命令是创建网络命令,转3.2;若组网命令是删除网络命令,转3.3;若组网命令是容器加入网络命令,转3.4;若组网命令是容器退出网络命令,转3.5;
3.2此时对外接口接收到创建网络命令,创建网络命令的格式为:创建网络–n网络名–ips使用的IP网段,按以下步骤创建网络:
3.2.1对外接口根据创建网络命令构建添加容器网络信息命令,添加容器网络信息命令中包括网络名、使用的IP网段,网络名等于创建网络命令中的网络名、使用的IP网段等于创建网络命令中使用的IP网段;向网络信息处理模块发送添加容器网络信息命令;
3.2.2网络信息处理模块利用添加容器网络信息命令中的网络名、网络使用的IP网段生成容器网络信息记录,并添加到网络信息处理模块内的容器网络信息中;
3.2.3网络信息处理模块将容器网络信息保存到中心数据库;转3.1;
3.3此时对外接口接收到删除网络命令,删除网络命令的格式为:删除网络–n网络名,令网络名为netD,按以下步骤删除网络:
3.3.1对外接口向网络信息处理模块发送删除容器网络信息命令,命令中包括网络名netD;
3.3.2网络信息处理模块检查网络netD中是否有容器在运行,如果netD中有容器在运行,转3.3.3;如果netD中没有容器运行,转3.3.4;
3.3.3网络信息处理模块向对外接口返回错误码,对外接口将错误码输出,告知用户netD不能删除,转3.1;
3.3.4网络信息处理模块向VNI分配模块发送回收VNI命令,命令参数为网络名netD;
3.3.5网络信息处理模块在网络信息处理模块内的容器网络信息中删除netD的容器网络信息记录,并将中心数据库中netD的容器网络信息记录删除,转3.1;
3.4此时组网命令是容器加入网络命令,容器加入网络命令的格式为:加入网络-n网络名-c容器名,令容器名为conA,容器要加入的网络名为netX,执行步骤如下:
3.4.1对外接口将容器名conA、要加入的网络名netX转发给容器加入退出网络模块;
3.4.2容器加入退出网络模块向VNI分配模块发送获取VNI命令,命令参数为netX;
3.4.3VNI分配模块在中心数据库中查询netX对应的VNI值,假设为k1,将k1与字符串BR拼接,得到容器网络netX在当前容器运行节点中对应的虚拟网桥名BRk1,将VNI值k1和虚拟网桥名BRk1返回给容器加入退出网络模块;
3.4.4容器加入退出网络模块向虚拟网桥组件发送查询虚拟网桥命令,查询网桥BRk1是否存在;
3.4.5如果容器加入退出网络模块从虚拟网桥组件接收到“TRUE”,说明网桥BRk1存在,转3.4.7;否则容器加入退出网络模块执行添加虚拟网桥BRk1的处理,并将虚拟网桥BRk1与容器网络netX中其他虚拟网桥相连;
3.4.6将当前主机IP添加到容器网络netX关联的网络主机列表中,包括以下步骤:
3.4.6.1容器加入退出网络模块向网络主机列表更新模块发送更新网络主机列表命令,命令参数包括:网络名netX、当前容器运行节点的IP地址hostIPc;
3.4.6.2网络主机列表更新模块在netX关联的网络主机列表中添加hostIPc;
3.4.6.3网络主机列表更新模块将netX关联的网络主机列表保存到中心数据库中,开始监听中心数据库中该数据的更新,若监听结果是中心数据库中该数据未更新,转3.4.7;若监听到中心数据库中容器netX关联的网络主机列表被更新,转第四步;
3.4.7容器加入退出网络模块向网络信息处理模块发送更新容器网络信息命令,命令参数包括:网络名netX、网络VNI值k1、容器名conA;
3.4.8网络信息处理模块接收更新容器网络信息命令,更新网络信息处理模块内netX的容器网络信息:将VNI值更新为k1,在网络信息处理模块内部的容器网络信息记录的netX中运行的容器中添加容器conA;
3.4.9网络信息处理模块将netX的容器网络信息保存到中心数据库;
3.4.10容器加入退出网络模块为容器创建veth pair设备对,并向虚拟网桥组件发送添加端口命令:“添加端口BRk veth-desd–配置端口veth-desd容器名=conA”,在网桥BRk中创建端口并连接veth pair设备对的一端;veth pair设备的另一端连接容器,从而将容器连上虚拟网桥;转3.1;
3.5此时组网命令是容器退出网络命令,容器退出网络命令的格式为:退出网络-n网络名-c容器名。令容器名为conB,容器要退出的网络名为netY,执行步骤如下:
3.5.1对外接口将容器名conB、要退出的网络名netY转发到容器加入退出网络模块;
3.5.2容器加入退出网络模块向VNI分配模块发送获取VNI命令,命令参数为netY;得到容器netY的VNI值,假设为k2,以及容器网络netY在当前主机中对应的虚拟网桥名BRk2;
3.5.3容器加入退出网络模块向虚拟网桥组件发送删除端口的命令:“删除端口BRk2veth-dsdk”,虚拟网桥组件执行命令,在虚拟网桥BRk2中删除连接容器的端口以及该端口上的veth pair设备;
3.5.4容器加入退出网络模块检查容器conB是否为容器网络netY在当前容器运行节点中的最后一个容器;
3.5.5若容器conB不是网络netY在当前容器运行节点中的最后一个容器,转3.1,容器退出网络的处理完成;否则,容器加入退出网络模块向虚拟网桥组件发送删除命令:“删除端口BRk2 vxlanBRk-xsdd”和“删除网桥BRk2”,虚拟网桥组件执行命令,将虚拟网桥BRk2及其中的vxlan虚拟设备从当前主机中删除,转3.5.6;
3.5.6容器加入退出网络模块向主机列表更新模块发送更新网络主机列表命令,命令参数包括网络名netY和当前容器运行节点;
3.5.7网络主机列表更新模块在主机列表更新模块内netY关联的网络主机列表中删除当前容器运行节点的IP地址,将新的容器网络主机列表信息保存到中心数据库,且网络主机列表更新模块停止监听中心数据库中netY关联的网络主机列表;转3.1;
第四步,主机列表更新模块从中心数据库接收网络主机列表更新消息,更新模块内部的网络主机列表,并更新虚拟设备的连接,具体执行步骤如下:
4.1主机列表更新模块从中心数据库接收网络主机列表更新消息,消息内容为:容器网络名、容器网络相关联的主机列表,令容器网络名为netZ;
4.2主机列表更新模块向VNI分配模块发送获取VNI命令,命令参数为netZ,得到容器网络netZ的VNI值,假设为k3,以及容器网络netZ在当前主机中对应的虚拟网桥名BRk3;
4.3主机列表更新模块对比模块内的网络主机列表和网络主机列表更新消息中的网络主机列表即新网络主机列表,得到新网络主机列表中删除的主机和新增的主机,这些主机都是容器运行节点;
4.4网络主机列表更新模块向虚拟网桥组件发送删除vxlan虚拟设备命令:“删除端口BRk3 vxlanBRk-xsdd”,其中BRk3为待删除vxlan虚拟设备所连接的虚拟网桥,vxlanBRk-xsdd为待删除vxlan虚拟设备名;虚拟网桥组件执行命令,在BRk3中删除与该容器运行节点中虚拟网桥连接的vxlan设备;
4.5网络主机列表更新模块向虚拟网桥组件发送添加命令:“添加端口BRk3 vxlanBRk-xdfs–配置端口vxlanBRk-xdfs类型=vxlan key=k3远程IP=hostIP”,其中BRk3为待添加vxlan虚拟设备所连接的虚拟网桥,vxlanBRk-xsdd为待添加vxlan虚拟设备名,k3用于识别所属容器网络,hostIP为vxlan虚拟设备连接的远程容器运行节点即新增的容器运行节点的IP地址;虚拟网桥组件执行命令,在虚拟网桥BRk3中添加与该容器运行节点中虚拟网桥连接的vxlan设备,设置vxlan虚拟设备的远程端IP为新增的容器运行节点的IP地址。
2.如权利要求1所述的一种多虚拟设备容器组网方法,其特征在于所述中心数据库采用开源数据库etcd,etcd要求3.0或3.0以上版本。
3.如权利要求1所述的一种多虚拟设备容器组网方法,其特征在于所述虚拟网桥组件采用OpenvSwitch,OpenvSwitch要求2.10或2.10以上版本。
4.如权利要求1所述的一种多虚拟设备容器组网方法,其特征在于所述VNI的取值1到10000。
5.如权利要求1所述的一种多虚拟设备容器组网方法,其特征在于3.4.5步所述容器加入退出网络模块执行添加虚拟网桥BRk1的处理,并将虚拟网桥BRk1与容器网络netX中其他虚拟网桥相连的方法是:
3.4.5.1容器加入退出网络模块向虚拟网桥组件发送创建虚拟网桥命令,命令参数为虚拟网桥名BRk1;虚拟网桥组件执行命令,创建虚拟网桥设备BRk1;
3.4.5.2容器加入退出网络模块向网络主机列表更新模块发送查询网络主机列表命令,命令参数为容器网络名netX;网络主机列表更新模块在网络主机列表更新模块内部的网络主机列表中查询与netX相关联的网络主机,并返回给容器加入退出网络模块;容器加入退出网络模块从收到的网络主机中排除当前容器运行节点,得到其他主机的IP地址序列,其他主机的IP地址序列内容为其他主机的IP地址,表示为{hostIP1,hostIP2,…,hostIPn,…,hostIPx},n的范围为1到列表长度x,x为正整数;
3.4.5.3令n=1,容器加入退出网络模块为其他主机IP地址序列中的第n个主机IP地址hostIPn生成创建vxlan虚拟设备的命令,命令格式为:“添加端口BRk1 vxlanBRk1-xscs类型vxlan key=k1远程IP=hostIPn”,命令参数包括网桥名、vxlan设备名、远程端IP和网络标识;其中,网桥名取值为BRk1、vxlan设备名动态生成、远程端IP取值为hostIPn、网络标识取值为k1;将生成的命令加入到命令组中;
3.4.5.4令n=n+1,若n≤x,转3.4.5.3,否则转3.4.5.5;
3.4.5.5容器加入退出网络模块将命令组发送给虚拟网桥;
3.4.5.6虚拟网桥组件执行命令,创建x个vxlan虚拟设备并连接到网桥BRk1上。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910853433.4A CN110601949B (zh) | 2019-09-10 | 2019-09-10 | 一种多虚拟设备容器组网方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910853433.4A CN110601949B (zh) | 2019-09-10 | 2019-09-10 | 一种多虚拟设备容器组网方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110601949A true CN110601949A (zh) | 2019-12-20 |
CN110601949B CN110601949B (zh) | 2021-05-04 |
Family
ID=68858459
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910853433.4A Active CN110601949B (zh) | 2019-09-10 | 2019-09-10 | 一种多虚拟设备容器组网方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110601949B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111314450A (zh) * | 2020-02-06 | 2020-06-19 | 恒生电子股份有限公司 | 数据的传输方法、装置、电子设备和计算机存储介质 |
CN112637037A (zh) * | 2021-03-10 | 2021-04-09 | 北京瑞莱智慧科技有限公司 | 跨地域容器通讯系统、方法、存储介质及计算机设备 |
CN114024921A (zh) * | 2021-10-14 | 2022-02-08 | 济南浪潮数据技术有限公司 | 一种隧道协同方法、装置、设备及可读存储介质 |
CN114363021A (zh) * | 2021-12-22 | 2022-04-15 | 绿盟科技集团股份有限公司 | 网络靶场系统、网络靶场系统的虚拟网络实现方法及装置 |
WO2024065182A1 (zh) * | 2022-09-27 | 2024-04-04 | 西门子股份公司 | 网络配置方法、装置、电子设备和存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107070691A (zh) * | 2017-01-12 | 2017-08-18 | 阿里巴巴集团控股有限公司 | Docker容器的跨主机通信方法和系统 |
US20180019948A1 (en) * | 2016-07-12 | 2018-01-18 | Cisco Technology, Inc. | Dynamically pinning micro-service to uplink port |
US20180205652A1 (en) * | 2017-01-13 | 2018-07-19 | Citrix Systems, Inc. | Systems and methods to run user space network stack inside docker container while bypassing container linux network stack |
CN109587281A (zh) * | 2017-09-29 | 2019-04-05 | 华为技术有限公司 | 容器配置方法和计算节点 |
CN109639511A (zh) * | 2019-01-27 | 2019-04-16 | 中国人民解放军国防科技大学 | 一种自适应的容器组网方法 |
CN109743261A (zh) * | 2019-01-07 | 2019-05-10 | 中国人民解放军国防科技大学 | 一种基于sdn的容器网络资源调度方法 |
CN109995641A (zh) * | 2019-03-21 | 2019-07-09 | 新华三技术有限公司 | 一种信息处理方法、计算节点和存储介质 |
CN110084039A (zh) * | 2013-04-19 | 2019-08-02 | Nicira股份有限公司 | 用于端点安全与网络安全服务之间的协调的框架 |
-
2019
- 2019-09-10 CN CN201910853433.4A patent/CN110601949B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110084039A (zh) * | 2013-04-19 | 2019-08-02 | Nicira股份有限公司 | 用于端点安全与网络安全服务之间的协调的框架 |
US20180019948A1 (en) * | 2016-07-12 | 2018-01-18 | Cisco Technology, Inc. | Dynamically pinning micro-service to uplink port |
CN107070691A (zh) * | 2017-01-12 | 2017-08-18 | 阿里巴巴集团控股有限公司 | Docker容器的跨主机通信方法和系统 |
US20180205652A1 (en) * | 2017-01-13 | 2018-07-19 | Citrix Systems, Inc. | Systems and methods to run user space network stack inside docker container while bypassing container linux network stack |
CN109587281A (zh) * | 2017-09-29 | 2019-04-05 | 华为技术有限公司 | 容器配置方法和计算节点 |
CN109743261A (zh) * | 2019-01-07 | 2019-05-10 | 中国人民解放军国防科技大学 | 一种基于sdn的容器网络资源调度方法 |
CN109639511A (zh) * | 2019-01-27 | 2019-04-16 | 中国人民解放军国防科技大学 | 一种自适应的容器组网方法 |
CN109995641A (zh) * | 2019-03-21 | 2019-07-09 | 新华三技术有限公司 | 一种信息处理方法、计算节点和存储介质 |
Non-Patent Citations (2)
Title |
---|
HAO ZENG等: "Measurement and Evaluation for Docker Container Networking", 《2017 INTERNATIONAL CONFERENCE ON CYBER-ENABLED DISTRIBUTED COMPUTING AND KNOWLEDGE DISCOVERY》 * |
王宝生等: "面向大规模容器集群的网络控制技术", 《国防科技大学学报》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111314450A (zh) * | 2020-02-06 | 2020-06-19 | 恒生电子股份有限公司 | 数据的传输方法、装置、电子设备和计算机存储介质 |
CN111314450B (zh) * | 2020-02-06 | 2022-08-02 | 恒生电子股份有限公司 | 数据的传输方法、装置、电子设备和计算机存储介质 |
CN112637037A (zh) * | 2021-03-10 | 2021-04-09 | 北京瑞莱智慧科技有限公司 | 跨地域容器通讯系统、方法、存储介质及计算机设备 |
CN112637037B (zh) * | 2021-03-10 | 2021-06-18 | 北京瑞莱智慧科技有限公司 | 跨地域容器通讯系统、方法、存储介质及计算机设备 |
CN114024921A (zh) * | 2021-10-14 | 2022-02-08 | 济南浪潮数据技术有限公司 | 一种隧道协同方法、装置、设备及可读存储介质 |
CN114024921B (zh) * | 2021-10-14 | 2024-05-28 | 郑州浪潮数据技术有限公司 | 一种隧道协同方法、装置、设备及可读存储介质 |
CN114363021A (zh) * | 2021-12-22 | 2022-04-15 | 绿盟科技集团股份有限公司 | 网络靶场系统、网络靶场系统的虚拟网络实现方法及装置 |
CN114363021B (zh) * | 2021-12-22 | 2023-11-03 | 绿盟科技集团股份有限公司 | 网络靶场系统、网络靶场系统的虚拟网络实现方法及装置 |
WO2024065182A1 (zh) * | 2022-09-27 | 2024-04-04 | 西门子股份公司 | 网络配置方法、装置、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110601949B (zh) | 2021-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110601949B (zh) | 一种多虚拟设备容器组网方法 | |
CN107947961B (zh) | 基于SDN的Kubernetes网络管理系统与方法 | |
CN109032755B (zh) | 一种容器服务托管系统及提供容器服务的方法 | |
KR101912073B1 (ko) | 가상화된 네트워크와 비-가상화된 네트워크 간 가상화 게이트웨이 | |
CN108347493B (zh) | 混合云管理方法、装置和计算设备 | |
Zeng et al. | Measurement and evaluation for docker container networking | |
RU2595540C2 (ru) | Базовые контроллеры для преобразования универсальных потоков | |
CN114363021B (zh) | 网络靶场系统、网络靶场系统的虚拟网络实现方法及装置 | |
CN109716717A (zh) | 从软件定义的网络控制器管理虚拟端口信道交换机对等体 | |
CN105453492A (zh) | 具有第三层分布式路由器功能的交换机集群 | |
CN108123819B (zh) | 一种虚实网络无缝融合的仿真方法 | |
CN114237812A (zh) | 容器网络管理系统 | |
EP3884641B1 (en) | Apparatus and method for migrating existing access control list policies to intent based policies and vice versa | |
CN111556110B (zh) | 一种用于私有云系统的不同物理业务网络自动化适配方法 | |
WO2023165137A1 (zh) | 一种跨集群的网络通信系统和方法 | |
Eftimie et al. | SDN controller implementation using OpenDaylight: experiments | |
Subbiah et al. | Energy-aware network resource allocation in SDN | |
CN111274003A (zh) | 一种针对Docker的集群搭建方法 | |
Sun et al. | AI-based survivable design for hybrid virtual networks for single regional failures in cloud data centers | |
JP5974943B2 (ja) | 仮想マシン管理装置、方法、およびプログラム | |
Sha et al. | A communication method between IPv4 server and IPv6 network in virtual machine environment | |
Großmann et al. | Cloudless computing-a vision to become reality | |
CN111538569B (zh) | 一种基于云平台的系统一键部署方法 | |
Ghorab et al. | Sdn-based service function chaining framework for kubernetes cluster using ovs | |
Kakulapati et al. | Switch hierarchical provider (SHP) networks for data network virtualization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |