首页> 中国专利> 容器的部署方法、服务间的通信方法及相关装置

容器的部署方法、服务间的通信方法及相关装置

摘要

本发明实施例公开了一种容器的部署方法、服务间的通信方法及相关装置,能够在保证同一宿主机上的容器之间具备隔离性的基础上,提高容器之间的访问速度。容器的部署方法包括:接收容器部署消息,容器部署消息包括容器镜像信息以及容器的关联信息;根据容器镜像信息创建第一服务的容器以及对应的第一网络命名空间和第一进程间通信IPC命名空间;创建第一服务的容器对应的第一负载均衡容器,并设置第一负载均衡容器的运行参数为第一网络命名空间的参数;在第一网络命名空间中创建环回接口;根据所述容器的关联信息,确定所述网络设备上存在与所述第一服务的容器相关联的第二服务的容器,设置第一负载均衡容器的启动参数为第二IPC命名空间的参数。

著录项

  • 公开/公告号CN108111470A

    专利类型发明专利

  • 公开/公告日2018-06-01

    原文格式PDF

  • 申请/专利权人 华为技术有限公司;

    申请/专利号CN201611053035.7

  • 申请日2016-11-25

  • 分类号H04L29/06(20060101);

  • 代理机构44285 深圳市深佳知识产权代理事务所(普通合伙);

  • 代理人王仲凯

  • 地址 518129 广东省深圳市龙岗区坂田华为总部办公楼

  • 入库时间 2023-06-19 05:31:18

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-06-16

    授权

    授权

  • 2018-06-26

    实质审查的生效 IPC(主分类):H04L29/06 申请日:20161125

    实质审查的生效

  • 2018-06-01

    公开

    公开

说明书

技术领域

本发明涉及虚拟化技术领域,特别涉及容器的部署方法、服务间的通信方法及相关装置。

背景技术

随着以docker为代表的容器技术的兴起,业界出现了一种以容器作为应用程序(application,App)运行形态的趋势。Docker容器技术是一种轻量级的操作系统虚拟化技术,虽然同一宿主机(物理机或虚拟机)上的容器共享操作系统内核,但不同容器之间使用的资源(如CPU、Memory等)是相互隔离的。容器之间的隔离,一般是通过linux内核提供的命名空间(namespace)技术来实现。Linux内核通过命名空间技术提供了主机名、进程间通信(inter-process communication,IPC)、网络(Network)、挂载点(Mount)、用户(User)的隔离功能。

现有技术中同一个宿主机上的不同容器之间的通信,一般都是通过网络通讯来进行的。以docker容器引擎为例,docker容器引擎在接收到容器部署消而部署容器时,会在宿主机上创建一个名为docker0的网桥(bridge)为所有容器提供数据交换服务,同时为每个容器建立单独的网络命名空间(network namespace,简称net namespace),然后在每个容器的网络命名空间中建立一个网络接口(eth),最后通过虚拟网络设备对(veth pair)技术(有两端,跨越网络命名空间,类似管道)使得容器的网络接口与docker0网桥进行通讯,如图1a所示。docker0网桥可以为同一宿主机上的不同容器提供网络数据交换功能,也可以将容器内的数据包发到用户指定的覆盖网络(overlay network)中进行跨宿主机节点的通讯。

随着技术的发展,特别是互联网技术的发展,应用的规模及复杂性大大提高。传统的烟囱式的单体应用架构已经不能很好的适应目前的应用开发,因此出现了微服务架构。微服务架构的总体思想是通过对应用进行解耦,将传统单体应用划分成多个细粒度的服务,降低系统的耦合性,提高系统的灵活度。微服务之间通过相互协调配合来为用户提供最终价值。微服务架构会将系统划分成大量的独立服务,每个服务又会由多个具体的服务实例来提供服务,所以服务间的通信量会比较大,通信也比较频繁,相比传统的软件构架,服务与服务之间需要尽量快速的通信方法。在图1b所示的一个现有的基于docker容器的应用程序的部署方案中,服务消费者应用(简称SC App)与负载均衡(load balance,LB)模块部署在同一个docker容器内。其中,SC App与LB模块之间通过IPC的方式可以达到内存访问级的数据通信速度。而LB模块与要访问的服务提供者应用(简称SP App)则以容器间网络进行通信,即LB模块把SC App的数据通过SC App所属容器的虚拟网络接口eth0发送到宿主机上的命名为docker0的网桥(docker0bridge),再通过该网桥将SC App的数据转发到SP App所属容器的虚拟网络接口eth1。因此,上述同一宿主机上的容器之间访问需要通过虚拟网络接口eth0到网桥docker0bridge,再通过网桥docker0bridge到虚拟网络接口eth1这样的网络路径,中间需要进行数据打包、路由等一系列链路层和网络层操作,数据通信速度存在优化空间。

为了提高同一宿主机上的容器之间的数据通信速度,考虑使用IPC的方式来提高数据通信速度,即可以把要进行通信的容器放置在同一个IPC命名空间(namespace)中来使得容器间可以通过IPC进行通信,如图1c所示。然而,该方案虽然可以使得不同容器间通过IPC进行高速通信,但同时也使得本来不需要进行通信的容器也可以进行IPC通信。例如容器B要访问容器A,同时容器C也需要访问容器A,但容器B和容器C不需要进行数据通信,该方案使得容器B和容器C也运行在同一个IPC命名空间中,这样就破坏了容器B和容器C之间的隔离性。因此,如果同一个容器需要被多个其他容器进行访问,采用该方案的话会破坏所有容器之间的隔离性。

发明内容

本申请提供了一种容器的部署方法、服务间的通信方法及相关装置,能够在保证同一宿主机上的容器之间具备隔离性的基础上,提高容器之间的访问速度。

本申请第一方面提供了一种容器的部署方法,应用于网络设备,该网络设备可以是指网络中任意的物理机或者虚拟机。该网络设备通过接收容器部署消息为第一服务创建对应的容器并部署该第一服务;该容器部署消息包括容器镜像信息和容器的关联信息,通过该容器镜像信息为第一服务创建对应的容器以及为该第一服务的容器创建对应的第一网络命名空间和第一IPC命名空间;同时,可自动为该第一服务的容器创建对应的第一负载均衡容器,并设置该第一负载均衡容器的运行参数为该第一网络命名空间的参数,以使该第一负载均衡容器在运行时共享该第一网络命名空间;且通过在该第一网络命名空间中创建环回接口,以使该第一负载均衡容器与该第一服务的容器能够通过该环回接口通信。

当该网络设备根据所述容器的关联信息,确定所述网络设备上存在与所述第一服务的容器相关联的第二服务的容器时,设置该第一负载均衡容器的启动参数为第二IPC命名空间的参数;该第二IPC命名空间即为该第二服务的容器对应的IPC命名空间;由此,该第一负载均衡容器在启动后能够通过该第二IPC命名空间的IPC接口与该第二服务的容器通信。

由于该第一负载均衡容器在运行时共享该第一服务的容器对应的第一网络命名空间,即可以使用该第一网络命名空间中的网络设备;因此,该第一负载均衡容器中运行的负载均衡模块能够绑定在该第一网络命名空间中建立的环回接口上提供负载均衡服务;除了该第一负载均衡容器对应的第一服务的容器,其他的容器均无法通过该环回接口访问该负载均衡容器,保证了同一宿主机上的容器之间的隔离性。当网络设备上已创建该第二服务的容器且根据接收的容器部署消息确定该第一服务的容器与该第二服务的容器关联时,通过设置该第一负载均衡容器的启动参数为该第二服务的容器对应的第二IPC命名空间的参数,使得该第一负载均衡容器在启动时,能够通过该第二IPC命名空间的IPC接口访问该第二服务的容器,从而在保证同一宿主机上的容器之间具备隔离性的基础上,提高了容器之间的访问速度。

在一种可能的实现方式中,当该网络设备根据所述容器的关联信息,确定所述网络设备上不存在与所述第一服务的容器相关联的容器时,设置该第一负载均衡容器的启动参数为第三IPC命名空间的参数,该第三IPC命名空间为独立的IPC命名空间,与前述的第一IPC命名空间以及第二IPC命名空间不相同。由此,为该第一负载均衡容器配置了独立的IPC命名空间,以保证容器之间的隔离性。

在一种可能的实现方式中,在接收到容器部署消息时,通过启动容器引擎为该网络设备创建网桥,该网桥用于提供数据交换服务。在创建该第一服务的容器对应的第一网络命名空间和第一IPC命名空间后,在该第一网络命名空间中创建虚拟网络设备,该虚拟网络设备可以理解为虚拟网卡,通过该虚拟网络设备与该网桥连接,能够使该第一服务的容器与该第一网络命名空间之外的其他服务的容器通信。

在一种可能的实现方式中,在创建该虚拟网络设备后,该网络设备将该第一服务对应的服务地址发送到服务注册中心;该第一服务对应的服务地址包括该虚拟网络设备的网络接口地址和该第一IPC命名空间的IPC接口地址。由此,可以通过访问该服务注册中心可以查询到所部署的所有服务对应的服务地址,通过查询到的服务地址可以访问对应的服务。

本申请第二方面提供了一种服务间的通信方法,应用于本申请第一方面所提供的网络设备,其中,该网络设备上已创建并运行第二服务的容器和对应的第二负载均衡容器,该第二服务的容器具有对应的第二网络命名空间和第二IPC命名空间;在创建第一服务的容器和对应的第一负载均衡容器时;创建该第一服务的容器对应的第一网络命名空间和第一进程间通信IPC命名空间,并设置该第一负载均衡容器的运行参数为该第一网络命名空间的参数,且在该第一网络命名空间中创建环回接口,并设置该第一负载均衡容器的启动参数为该第二IPC命名空间的参数,其中,该第二IPC命名空间的参数和该第一IPC命名空间的参数不相同。基于前述内容,该服务间的通信方法包括:

该第一服务的容器通过该第一网络命名空间中创建的该环回接口向该第一负载均衡容器发送服务访问请求,以访问第二服务的容器。该第一负载均衡容器根据该服务访问请求获取该第二服务的容器对应的服务地址,其中,该第一负载均衡容器可通过查询服务注册中心中记录的服务地址,找到以访问第二服务的容器所对应的服务地址。该第二服务的容器所对应的服务地址包括该第二服务的容器对应的该第二网络命名空间的网络接口地址和该第二IPC命名空间的IPC接口地址。由此,该第一负载均衡容器可通过该第二IPC命名空间的IPC接口地址访问该第二服务的容器。

由于该第一负载均衡容器在运行时共享该第一服务的容器对应的第一网络命名空间,即可以使用该第一网络命名空间中的网络设备;因此,该第一负载均衡容器中运行的负载均衡模块能够绑定在该第一网络命名空间中建立的环回接口上提供负载均衡服务;除了该第一负载均衡容器对应的第一服务的容器,其他的容器均无法通过该环回接口访问该负载均衡容器。因此,在保证了同一宿主机上的容器之间的隔离性的前提下,在部署第一服务的容器时,通过设置该第一负载均衡容器的启动参数为该第二服务的容器对应的第二IPC命名空间的参数,由此,该第一负载均衡容器在启动时,能够通过该第二IPC命名空间的IPC接口地址访问该第二服务的容器,从而在保证同一宿主机上的容器之间具备隔离性的基础上,提高了容器之间的访问速度。

本申请第三方面提供了一种容器的部署装置,该容器的部署装置包括了用于执行第一方面或第一方面的任一种实现方式中提供的容器的部署方法的至少一个单元。

本申请第四方面提供了一种服务间的通信装置,该服务间的通信装置包括了用于执行第二方面或第二方面的任一种实现方式中提供的服务间的通信方法的至少一个单元。

本申请的第五方面,提供了一种存储介质,该存储介质中存储了程序代码,该程序代码被网络设备运行时,执行第一方面或第一方面的任意一种实现方式提供的容器的部署方法。该存储介质包括但不限于快闪存储器(英文:flash memory),硬盘(英文:hard diskdrive,HDD)或固态硬盘(英文:solid state drive,SSD)。

本申请的第六方面,提供了一种存储介质,该存储介质中存储了程序代码,该程序代码被网络设备运行时,执行第二方面或第二方面的任意一种实现方式提供的服务间的通信方法。该存储介质包括但不限于快闪存储器,硬盘或固态硬盘。

附图说明

图1a为本申请所提供的容器部署方案的一个结构示意图;

图1b为本申请所提供的容器部署方案的另一结构示意图;

图1c为本申请所提供的容器部署方案的另一结构示意图;

图2为本申请所提供的微服务部署系统的一个架构示意图;

图3为本申请所提供的容器部署方案的另一结构示意图;

图4为本申请所提供的网络设备的一个结构示意图;

图5为本申请所提供的容器的部署方法的一个流程示意图;

图6为本申请所提供的服务间的通信方法的一个流程示意图;

图7为本申请所提供的容器的部署装置的一个结构示意图;

图8为本申请所提供的服务间的通信装置的一个结构示意图。

具体实施方式

本申请的说明书和权利要求书以及上述附图说明的附图中所涉及的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

如图2所示,为本申请提供的一种基于docker容器的微服务部署系统的架构示意图。该部署系统包括管理节点、任务节点和服务注册中心。其中,管理节点可以接收业务人员发送的容器部署消息,将容器调度到某个任务节点上运行。这里的任务节点可以是指网络中任意的物理机PM或者虚拟机VM。任务节点上运行着容器管理模块,例如可以是docker容器引擎,可以接收管理节点的指令,根据该指令在任务节点上启动容器。

运行在容器内的应用如果要对外提供服务,需要向服务注册中心注册服务地址,因此每个部署了应用的容器(App Container)启动之后会把容器内应用的服务访问地址发送服务实例注册消息到服务注册中心去注册服务实例,该服务器实例注册消息中包含了服务名和服务实例地址。例如,图2中的应用1部署在一个容器中,该应用1如果要对外提供服务,需要向服务注册中心注册服务地址,即将容器内应用1的服务访问地址发送服务实例注册消息到服务注册中心去注册服务实例。应用2与应用1的部署方式类似,此处不再赘述。每个应用都提供了网络(例如http://container_ip:8080)和IPC消息队列名(ContainerName_IPC)两种服务地址,即每个容器启动后,可以从外部通过网络(例如http://container_ip:8080)和IPC消息队列名(ContainerName_IPC)两种方式访问容器提供的服务。服务注册中心通过接收并保存服务实例注册信息维护了部署系统中所有服务的可用实例地址表,本部署系统中的一个服务实例地址表结构可参考下表1所示:

表1

表1中服务名即服务的类型,实例地址表中是某个服务类型所有的容器实例访问地址的列表。服务注册中心对外提供服务实例地址的查询功能,外部可以通过发送服务实例查询消息(消息中包含服务名)获取对应服务所有的实例访问地址。

每一个部署了应用的容器在同一任务节点上都有一个对应的负载均衡容器(LBcontainer)来为其提供服务访问功能。例如,图2中的负载均衡1与应用1对应,用于为应用1提供服务访问功能,负载均衡1与应用1部署在不同的容器中,这两个容器共享一个网络命名空间。负载均衡2与负载均衡1的部署方式类似,此处不再赘述。负载均衡容器工作在环回接口上,应用的容器可以通过环回接口与负载均衡容器进行高速的数据通信。应用的容器要访问服务时,会向负载均衡容器发送服务访问请求,请求中包含了要访问的服务名及具体的服务接口(提供具体功能的接口,类似函数接口),如http://127.0.0.1:8000/ServiceA/GetProductInfo?id=120的服务访问请求就是要访问表1中ServiceA的GetProductInfo接口来获取某个产品的具体信息。负载均衡容器通过向服务注册中心发送服务实例查询消息获取某个服务的所有服务实例地址。具体的,服务注册中心还可以自动识别发送查询请求的负载均衡容器所在的任务节点,根据负载均衡容器所在的任务节点,把与负载均衡容器在同一任务节点上的服务实例的IPC地址返回给负载均衡容器。在应用的容器要访问服务时,根据一定的负载均衡策略选一个服务实例地址进行访问。在这里,可参考一种简单的策略:优先通过IPC接口访问在同一任务节点上的服务实例,如果同一任务节点上存在多个服务提供者实例,则为服务消费者容器随机绑定一个服务提供者实例进行访问。当IPC地址访问失败时,再通过轮转调度策略访问其他网络接口的服务实例。

Linux支持环回接口(Loopback Interface),这个接口允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信。A类网络127就是为环回接口预留的。通常情况下,大多数系统把IP地址127.0.0.1分配给这个接口。一个传给环回接口的IP数据包在处理的时候直接从发送缓存拷贝到接收缓存,省去了在数据链路层和物理层的操作。环回接口只能在同一个网络命名空间内进行访问,外部无法访问。

进程间通信IPC,是由操作系统提供的用于不同进程间进行快速通信的技术。相比网络通信,IPC通常最终通过进程间直接的内存拷贝来实现,免除了网络协议栈封包解包、路由查询、规则匹配、链路传输等过程,相比网络通信有着非常大的速度优势。常用的IPC技术包括共享内存、IPC消息队列、system V/POSIX管道等。一般是服务端创建一个IPC通道,客户端和服务端通过IPC通道进行数据交换。

然而与虚拟机不同的是,容器内部进程间通信对宿主机来说,实际上是具有相同进程间通信命名空间(IPC namespace)中的进程间通信,因此需要一个唯一的标识符来进行区别。申请IPC资源就申请了这样一个全局唯一的32位ID,所以IPC namespace中实际上包含了系统IPC标识符以及实现POSIX消息队列的文件系统。在同一个IPC namespace下的进程彼此可见,而与其他的IPC namespace下的进程则互相不可见。

基于图2所示的微服务部署系统的架构,如图3所示,为本申请所提供容器部署方案的一个结构示意图。

如图3所示,应用容器(图示中部署了应用1或应用2的容器)运行着由用户编写的对外提供服务的应用程序。负载均衡容器(图示中部署了负载均衡1或负载均衡2的容器)是由系统提供的标准容器,工作在环回接口(图示中lo)接收应用容器的服务访问请求,负责从服务注册中心获取服务的访问地址并通过一定的负载均衡策略转发应用容器的服务访问请求到选定的服务实例容器获取服务结果并返回给应用容器。应用容器和其对应的负载均衡容器共享同一个网络命名空间,虚拟网络接口是一个标准的虚拟网络设备(可以认为是一块网卡),图3所示的应用1的容器和应用2的容器可以通过各自网络命名空间中的虚拟网络接口与其网络命名空间之外的容器进行数据通信,也可以通过环回接口(lo)对在同一网络命名空间内的容器进行快速的数据通信(网络数据会直接内存拷贝到对应进程),但不在同一网络命名空间内的容器(进程)无法访问该网络命名空间内的环回接口lo,只能通过虚拟网络接口进行标准的网络数据通信。应用容器采用独立的IPC命名空间来运行,因此用户在编写应用时无需考虑其他容器的影响,保留了应用之间的隔离性。任务节点上的容器管理模块在部署容器时,如果检测到任务节点上存在待部署容器需要访问的容器,则会把待部署的容器对应的负载均衡容器的IPC命名空间设置为该需要访问的容器的IPC命名空间,这样待部署的容器对应的负载均衡容器就可以与该需要访问的容器进行高速的IPC通信,但没有破坏待部署的容器和该需要访问的容器之间(图中应用1的容器和应用2的容器)的隔离性,而标准的负载均衡容器由系统提供,行为完全可控,共享IPC命名空间也不会对应用造成安全和隔离性影响。

图3中的任务节点可以通过图4中的网络设备200实现,网络设备200的组织结构示意图如图4所示,包括处理器202、存储器204和收发器206,还可以包括总线208。

其中,处理器202、存储器204和收发器206可以通过总线208实现彼此之间的通信连接,也可以通过无线传输等其他手段实现通信。

存储器204可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random-access memory,缩写:RAM);存储器也可以包括非易失性存储器(英文:non-volatile memory),例如只读存储器(英文:read-only memory,缩写:ROM),快闪存储器(英文:flash memory),硬盘(英文:hard disk drive,缩写:HDD)或固态硬盘(英文:solid state drive,缩写:SSD);存储器204还可以包括上述种类的存储器的组合。在通过软件来实现本申请提供的技术方案时,用于实现本申请图5提供的容器的部署方法的程序代码保存在存储器204中,并由处理器202来执行。

网络设备200通过收发器206与其他设备通信。

处理器202可以为中央处理器(英文:central processing unit,CPU)。

所述收发器206,用于接收容器部署消息,所述容器部署消息包括容器镜像信息以及容器的关联信息。

所述处理器202,用于根据所述容器镜像信息创建第一服务的容器以及创建所述第一服务的容器对应的第一网络命名空间和第一进程间通信IPC命名空间;

创建所述第一服务的容器对应的第一负载均衡容器,并设置所述第一负载均衡容器的运行参数为所述第一网络命名空间的参数,所述运行参数用于所述第一负载均衡容器在运行时共享所述第一网络命名空间;

在所述第一网络命名空间中创建环回接口,所述环回接口用于所述第一负载均衡容器与所述第一服务的容器通信;

根据所述容器的关联信息,确定所述网络设备上存在与所述第一服务的容器相关联的第二服务的容器,获取所述第二服务的容器对应的第二IPC命名空间的参数,并设置所述第一负载均衡容器的启动参数为所述第二IPC命名空间的参数;所述启动参数用于所述第一负载均衡容器在启动后通过所述第二IPC命名空间的IPC接口与所述第二服务的容器通信,所述第二IPC命名空间的参数和所述第一IPC命名空间的参数不相同。

由于该第一负载均衡容器在运行时共享该第一服务的容器对应的第一网络命名空间,即可以使用该第一网络命名空间中的网络设备;因此,该第一负载均衡容器中运行的负载均衡模块能够绑定在该第一网络命名空间中建立的环回接口上提供负载均衡服务;除了该第一负载均衡容器对应的第一服务的容器,其他的容器均无法通过该环回接口访问该负载均衡容器,保证了同一宿主机上的容器之间的隔离性。当网络设备200上已创建该第二服务的容器且根据接收的容器部署消息确定该第一服务的容器与该第二服务的容器关联时,通过设置该第一负载均衡容器的启动参数为该第二服务的容器对应的第二IPC命名空间的参数,使得该第一负载均衡容器在启动时,能够通过该第二IPC命名空间的IPC接口访问该第二服务的容器,从而在保证同一宿主机上的容器之间具备隔离性的基础上,提高了容器之间的访问速度。

可选的,所述处理器202还用于:

当根据所述容器的关联信息,确定所述网络设备上存在与所述第一服务的容器相关联的第二服务的容器时,设置所述第一负载均衡容器的启动参数为第三IPC命名空间的参数,所述第三IPC命名空间的参数与所述第一IPC命名空间的参数以及所述第二IPC命名空间的参数均不相同。

可选的,所述处理器202,所述网络设备200上创建有网桥,所述网桥用于提供数据交换服务,所述处理器202用于创建所述第一服务的容器对应的第一网络命名空间和第一进程间通信IPC命名空间后,所述处理器202还用于:

在所述第一网络命名空间中创建虚拟网络设备,所述虚拟网络设备用于与所述网桥连接,以使所述第一服务的容器与所述第一网络命名空间之外的其他服务的容器通信。

可选的,所述处理器202用于创建虚拟网络设备后,所述处理器202还用于:

将所述第一服务对应的服务地址发送到服务注册中心;所述第一服务对应的服务地址包括所述虚拟网络设备的网络接口地址和所述第一IPC命名空间的IPC接口地址。

本申请还提供了一种容器的部署方法,图4中的网络设备200运行时执行该方法,其流程示意图如图5所示。

401、接收容器部署消息,所述容器部署消息包括容器镜像信息以及容器的关联信息。

需要说明的是,该网络设备可以是网络中的物理机或者虚拟机,网络设备接收容器部署消息,在一个可能实现方式中,该网络设备可通过该网络设备中的容器管理模块来接收管理设备发来的容器部署消息。其中,该容器部署消息包括容器镜像信息以及容器的关联信息。其中,容器镜像信息包括创建容器的一些必要参数,比如镜像的标识ID;可选的,所述容器部署消息中还包括创建容器需要的其他参数,具体的,该其他参数由待创建的容器的类型确定。容器的关联信息用于指示所需要访问的其他服务的容器,例如部署第一服务的容器时,需要访问其他服务的容器以获取相应的设置参数等。

402、根据所述容器镜像信息创建第一服务的容器以及创建所述第一服务的容器对应的第一网络命名空间和第一进程间通信IPC命名空间。

可选的,所述网络设备上创建有网桥,所述网桥用于提供数据交换服务,所述创建所述第一服务的容器对应的第一网络命名空间和第一进程间通信IPC命名空间后,所述方法还包括:

在所述第一网络命名空间中创建虚拟网络设备,所述虚拟网络设备用于与所述网桥连接,以使所述第一服务的容器与所述第一网络命名空间之外的其他服务的容器通信。

可选的,所述创建虚拟网络设备后,所述方法还包括:

将所述第一服务对应的服务地址发送到服务注册中心;所述第一服务对应的服务地址包括所述虚拟网络设备的网络接口地址和所述第一IPC命名空间的IPC接口地址。

需要说明的是,该网络设备根据所述容器部署消息中的容器镜像信息创建第一服务的容器以及创建所述第一服务的容器对应的第一网络命名空间和第一进程间通信IPC命名空间,所述第一服务的容器用于部署应用所提供的服务。具体的,根据所述容器部署消息,该网络设备中的容器管理模块以docker容器引擎提供的网桥(以下网桥的命名统一称为docker0bridge)桥接模式启动容器实例。例如,根据所述容器部署消息,创建第一服务的容器(以下简称C2)。具体的,docker容器引擎会为C2创建新的网络命名空间(以下简称Np2)和IPC命名空间(以下简称Ip2),并在Np2中创建一个标准的Linux虚拟网络设备接口eth0(例如IP为10.1.0.101)为Np2中的容器提供网络服务,然后再通过虚拟网络设备对(vethpair)技术把eth0接口与网络设备的docker0bridge连接,这样Np2中的容器就可以通过docker0bridge与其他的容器进行标准的网络通信。C2启动后会运行在网络命名空间Np2和IPC命名空间Ip2中,C2中应用的服务注册模块会把自身的服务地址(即C2对应的网络命名空间中的虚拟网络设备接口地址和对应的IPC命名空间的IPC接口地址,例如http://10.1.0.101:8080和ContainerC2_IPC)及自身所属服务(例如所属服务为ServiceB)的信息发送到服务注册中心注册服务实例。

403、创建所述第一服务的容器对应的第一负载均衡容器,并设置所述第一负载均衡容器的运行参数为所述第一网络命名空间的参数。

需要说明的是,网络设备创建所述第一服务的容器对应的第一负载均衡容器,并设置所述第一负载均衡容器的运行参数为所述第一网络命名空间的参数,所述运行参数用于所述第一负载均衡容器在运行时共享所述第一网络命名空间。具体的,系统提供一个标准的包含了负载均衡模块的负载均衡镜像Mlb,该网络设备中的容器管理模块使用负载均衡镜像Mlb自动创建一个与该第一服务的容器(例如C2)对应的负载均衡容器(例如C3)。该负载均衡容器(例如C3)中的负载均衡模块可以从服务注册中心查询到每个服务的所有实例访问地址。其中,对于在同一个任务节点(网络设备)上的服务实例,同时也返回实例的IPC访问地址。设置C3的运行参数net_namespace为Np2对应的参数,使得C3运行时与C2共享网络命名空间Np2,即可以共同使用Np2中的网络设备。假设在同一个任务节点(网络设备)上已创建第二服务的容器C1(例如所属服务为ServiceA);如C3在C1所在的任务节点(网络设备)上向服务注册中心查询ServiceA的实例地址表时,返回的地址列表入下:

http://10.1.0.101:8080|ContainerC1_IPC;

http://10.2.0.101:8080

其中,服务注册中心会检测到C1与C3在同一个任务节点(网络设备)上,因此,不仅返回了C1的网络地址(即在C1所属的网络命名空间中创建的虚拟网络设备接口的地址),还返回了C1的IPC接口地址(即C1所属的IPC命名空间中的IPC接口地址)。后续C3在要访问C1时,会优先选择ContainerC1_IPC这个IPC服务地址的接口访问。

404、在所述第一网络命名空间中创建环回接口。

需要说明的是,该网络设备在所述第一网络命名空间中创建环回接口;所述环回接口用于所述第一负载均衡容器与所述第一服务的容器通信。具体的,可以使用Linux命令“ifconfig lo:0 127.0.0.1netmask 255.0.0.0up”来创建并启动一个环回接口并指定了内部访问地址为127.0.0.1。由于设置C3的运行参数net_namespace为Np2,使得C3运行时与C2共享网络命名空间Np2,即可以共同使用Np2中的虚拟网络设备,所以C3中运行的负载均衡模块会绑定在该第一网络命名空间中的环回接口上提供负载均衡服务。

405、根据所述容器的关联信息,确定所述网络设备上存在与所述第一服务的容器相关联的第二服务的容器,获取所述第二服务的容器对应的第二IPC命名空间的参数,并设置所述第一负载均衡容器的启动参数为所述第二IPC命名空间的参数。

其中,所述启动参数用于所述第一负载均衡容器在启动后通过所述第二IPC命名空间的IPC接口与所述第二服务的容器通信,所述第二IPC命名空间的参数和所述第一IPC命名空间的参数不相同。

可选的,所述方法还包括:

根据所述容器的关联信息,确定所述网络设备上不存在与所述第一服务的容器相关联的容器,设置所述第一负载均衡容器的启动参数为第三IPC命名空间的参数,所述第三IPC命名空间的参数与所述第一IPC命名空间的参数以及所述第二IPC命名空间的参数均不相同。

需要说明的是,本发明实施例中可以由网络设备中的容器管理模块查找该网络设备上是否存在该第一服务的容器的亲和容器(该亲和容器也就是与该第一服务的容器有关联的容器,即该第一服务的容器所需要访问的其他服务的容器)。

如果该网络设备上已创建了第二服务的容器,且从上述容器的关联信息中确定该第一服务的容器与该第二服务的容器有关联,即该第一服务的容器需要访问该第二服务的容器,以获取该第二服务的容器的相关参数等;那么,该网络设备通过查找该第二服务的容器对应的第二IPC命名空间,并设置该第一负载均衡容器的启动参数为该第二IPC命名空间的参数,从而该第一负载均衡容器在启动后可以通过第二IPC命名空间的IPC接口与该第二服务的容器通信。例如,该网络设备上已创建了第二服务(ServiceA)的容器C1,其中,该第一服务(ServiceB)的容器C2与该第二服务(ServiceA)的容器C1有关联,该网络设备中的容器管理模块查找到亲和容器C1,并绑定第二服务的容器C1为第一服务的容器C2通过IPC提供服务,并获知C1的IPC namespace为Ip1。如果有多个亲和容器,可以随机选择一个进行绑定。设置该第一服务的容器C2对应的负载均衡容器C3的启动参数为第二IPC命名空间ipc_namespace:Ip1,这样当C3启动后可以与Ip1中的容器进行IPC通信(即可以与第二服务的容器C1进行IPC通信)。同时,在该网络设备上启动该第一服务的容器C2对应的负载均衡容器C3后,C3中的负载均衡模块会工作在该第一服务的容器对应的网络命名空间中的环回接口上,即只能由同一网络命名空间(network namespace)下的C2通过该环回接口的地址(例如127.0.0.1)来访问,其他容器无法访问。

另一方面,如果根据所述容器的关联信息,确定所述网络设备上不存在与所述第一服务的容器相关联的容器时,那么,该网络设备设置该第一负载均衡容器的启动参数为第三IPC命名空间的参数,该第三IPC命名空间的参数与该第一IPC命名空间的参数以及该第二IPC命名空间的参数均不相同。此时,该第一负载均衡容器使用独立的第三IPC命名空间,不共享其他容器的IPC命名空间。

在本申请提供的容器的部署方法中,由于该第一负载均衡容器在运行时共享该第一服务的容器对应的第一网络命名空间,即可以使用该第一网络命名空间中的网络设备;因此,该第一负载均衡容器中运行的负载均衡模块能够绑定在该第一网络命名空间中建立的环回接口上提供负载均衡服务;除了该第一负载均衡容器对应的第一服务的容器,其他的容器均无法通过该环回接口访问该负载均衡容器,保证了同一宿主机上的容器之间的隔离性。当网络设备上已创建该第二服务的容器且根据接收的容器部署消息确定该第一服务的容器与该第二服务的容器关联时,通过设置该第一负载均衡容器的启动参数为该第二服务的容器对应的第二IPC命名空间的参数,使得该第一负载均衡容器在启动时,能够通过该第二IPC命名空间的IPC接口访问该第二服务的容器,从而在保证同一宿主机上的容器之间具备隔离性的基础上,提高了容器之间的访问速度。

本申请还提供了一种服务间的通信方法,应用于本申请所提供的网络设备200,基于本申请提供的容器的部署方法,本申请提供的服务间的通信方法具备如下前提。其中,所述网络设备200上已创建并启动第二服务的容器和对应的第二负载均衡容器,所述第二服务的容器具有对应的第二网络命名空间和第二IPC命名空间;在创建第一服务的容器和对应的第一负载均衡容器时;创建所述第一服务的容器对应的第一网络命名空间和第一进程间通信IPC命名空间,并设置所述第一负载均衡容器的运行参数为所述第一网络命名空间的参数,且在所述第一网络命名空间中创建环回接口,并设置所述第一负载均衡容器的启动参数为所述第二IPC命名空间的参数,其中,所述第二IPC命名空间的参数和所述第一IPC命名空间的参数不相同。该服务间的通信方法的流程示意图如图6所示。

501、所述第一服务的容器通过所述第一网络命名空间中创建的所述环回接口向所述第一负载均衡容器发送服务访问请求。

502、所述第一负载均衡容器根据所述服务访问请求获取所述第二服务的容器对应的服务地址,所述第二服务的容器对应的服务地址包括所述第二服务的容器对应的所述第二网络命名空间的网络接口地址和所述第二IPC命名空间的IPC接口地址。

503、所述第一负载均衡容器通过所述第二IPC命名空间的IPC接口地址访问所述第二服务的容器。

需要说明的是,例如,所述网络设备200上已创建并启动第二服务的容器(C1)和对应的第二负载均衡容器,所述第二服务的容器(C1)具有对应的第二网络命名空间(Np1)和第二IPC命名空间(Ip1);在创建第一服务的容器(C2)和对应的第一负载均衡容器(C3)时;创建所述第一服务的容器(C2)对应的第一网络命名空间(Np2)和第一进程间通信IPC命名空间(Ip2),并设置所述第一负载均衡容器(C3)的运行参数(net_namespace)为所述第一网络命名空间的参数(Np2),且在所述第一网络命名空间中创建环回接口(lo),并设置所述第一负载均衡容器(C3)的启动参数(ipc_namespace)为所述第二IPC命名空间(Ip1)的参数,其中,所述第二IPC命名空间(Ip1)的参数和所述第一IPC命名空间(Ip2)的参数不相同。

在C2通过该C3访问C1时,该C2通过Ip2中创建的环回接口lo向C3发送服务访问请求,该C3根据该服务访问请求从服务注册中心获取该C1对应的服务地址,该C1对应的服务地址包括该C1对应的该第二网络命名空间(Ip1)的网络接口地址(例如http://10.2.0.101:8080)和该第二IPC命名空间(Ip1)的IPC接口地址(例如http://10.1.0.101:8080|ContainerC1_IPC);该C3通过该第二IPC命名空间(Ip1)的IPC接口地址访问该C1。

在本申请提供的服务间的通信方法中,由于该第一负载均衡容器在运行时共享该第一服务的容器对应的第一网络命名空间,即可以使用该第一网络命名空间中的网络设备;因此,该第一负载均衡容器中运行的负载均衡模块能够绑定在该第一网络命名空间中建立的环回接口上提供负载均衡服务;除了该第一负载均衡容器对应的第一服务的容器,其他的容器均无法通过该环回接口访问该负载均衡容器。因此,在保证了同一宿主机上的容器之间的隔离性的前提下,在部署第一服务的容器时,通过设置该第一负载均衡容器的启动参数为该第二服务的容器对应的第二IPC命名空间的参数,由此,该第一负载均衡容器在启动时,能够通过该第二IPC命名空间的IPC接口地址访问该第二服务的容器,从而在保证同一宿主机上的容器之间具备隔离性的基础上,提高了容器之间的访问速度。

需要说明的是,本申请实施例中,若无特殊说明,不限定各步骤之间的先后顺序,不限定各步骤之间的相互依赖关系。

本申请实施例还提供了容器的部署装置600,该装置600可以通过图4所示的网络设备200实现,还可以通过专用集成电路(英文:application-specific integratedcircuit,ASIC)实现,或可编程逻辑器件(英文:programmable logic device,PLD)实现。上述PLD可以是复杂可编程逻辑器件(英文:complex programmable logic device,CPLD),FPGA,通用阵列逻辑(英文:generic array logic,GAL)或其任意组合。该容器的部署装置600用于实现图5所示的容器的部署方法。通过软件实现图5所示的容器的部署方法时,该装置600也可以为软件模块。

容器的部署装置600的组织结构示意图如图7所示,包括:收发单元602和处理单元604。收发单元602工作时,执行图5所示的容器的部署方法中的步骤401及步骤401中的可选方案;处理单元604工作时,执行图5所示的容器的部署方法中的步骤402~405及步骤402~405中的可选方案。应注意,本申请实施例中,收发单元602也可由如图4中所示的收发器206实现,处理单元604也可由如图4中所示的处理器202实现。

该容器的部署装置600通过接收容器部署消息并创建第一服务的容器以及所述第一服务的容器对应的第一负载均衡容器,由于第一负载均衡容器在运行时共享第一服务的容器对应的第一网络命名空间,即可以使用该第一网络命名空间中的网络设备;因此,该第一负载均衡容器中运行的负载均衡模块能够绑定在该第一网络命名空间中建立的环回接口上提供负载均衡服务;除了该第一负载均衡容器对应的第一服务的容器,其他的容器均无法通过该环回接口访问该负载均衡容器,保证了同一宿主机上的容器之间的隔离性。当网络设备上已创建第二服务的容器且根据接收的容器部署消息确定该第一服务的容器与该第二服务的容器关联时,通过设置该第一负载均衡容器的启动参数为该第二服务的容器对应的第二IPC命名空间的参数,使得该第一负载均衡容器在启动时,能够通过该第二IPC命名空间的IPC接口访问该第二服务的容器,从而在保证同一宿主机上的容器之间具备隔离性的基础上,提高了容器之间的访问速度。

本申请实施例还提供了服务间的通信装置700,该装置700可以通过图4所示的网络设备200实现,还可以通过ASIC实现,或PLD实现。上述PLD可以是复杂可编程逻辑器件CPLD,FPGA,GAL或其任意组合。该服务间的通信装置700用于实现图6所示的服务间的通信方法。通过软件实现图6所示的服务间的通信方法时,该装置700也可以为软件模块。

服务间的通信装置700的组织结构示意图如图8所示,包括:第一服务的容器702和对应的第一负载均衡容器704,第二服务的容器706和对应的第二负载均衡容器708。第一服务的容器702工作时,执行图6所示的服务间的通信方法中的步骤501及其可选方案;第一负载均衡容器704工作时,执行图6所示的服务间的通信方法中的步骤502~503及其可选方案。

该服务间的通信装置700中,由于该第一负载均衡容器704在运行时共享该第一服务的容器702对应的第一网络命名空间,即可以使用该第一网络命名空间中的网络设备;因此,该第一负载均衡容器704中运行的负载均衡模块能够绑定在该第一网络命名空间中建立的环回接口上提供负载均衡服务;除了该第一负载均衡容器704对应的第一服务的容器702,其他的容器均无法通过该环回接口访问该负载均衡容器。因此,在保证了同一宿主机上的容器之间的隔离性的前提下,在部署第一服务的容器702时,通过设置该第一负载均衡容器704的启动参数为该第二服务的容器706对应的第二IPC命名空间的参数,由此,该第一负载均衡容器704在启动时,能够通过该第二IPC命名空间的IPC接口地址访问该第二服务的容器706,从而在保证同一宿主机上的容器之间具备隔离性的基础上,提高了容器之间的访问速度。

上述装置的相关描述可以对应参阅方法实施例部分的相关描述和效果进行理解,本处不做过多赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所涉及的动作和模块并不一定是本发明所必需的。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络设备上。可以根据实际的需要选择其中的部分或者全部设备来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案的全部或部分可以以软件产品的形式体现出来。该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:通用串行总线闪存盘(英文:USB flash disk)、移动硬盘、只读存储器(英文:read-only memory,ROM)、随机存取存储器(英文:random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案脱离权利要求的范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号