基于docker容器的跨宿主机互访系统及其控制方法与流程

文档序号:12889978阅读:1233来源:国知局
本发明涉及一种跨宿主机互访系统及其控制方法,尤其涉及一种基于docker容器的跨宿主机互访系统及其控制方法。
背景技术
::目前对于docker容器之间互访归根到底分别有以下两种方案:1、路由方案路由方案以calico为代表,通过在各容器的宿主机上运行bgp路由协议,从而行成一个可传递容器ip路由的网络,然后不同宿主机之间的容器通信通过查询宿主机本地的bgp路由来进行数据路径的寻址。如要容器与物理网络,如交换机、路由器,或其他不为容器的设备通信则需要在网络设备上开启bgp路由协议,并与其他容器的宿主机进行bgp邻居建连。2、隧道方案隧道方案以flannel为代表,其通过在容器所在的宿主机上安装flannel软件,然后到键值数据库etcd上去获取一个分配于容器的ip地址段(不同容器的宿主机将获取到不同网段的地址),然后容器将使用所获取到的地址段中的其中一个地址。不同宿主机上的容器通信先查询宿主机上的路由,然后路由到flannel所创建的网卡,然后对容器的源始数据包进行vxlan或udp的封装,再通过物理网络传递到对方容器所在的宿主机,最后对方宿主机对vxlan或udp封装的数据包进行解封装,并根据本地的路由和mac地址表转发到相应的容器。此类隧道方案中容器要与物理网络进行通信则需要在宿主机所在网关设备上根据容器的位置情况人工添加路由来实现。由上可见,现有技术的缺点如下:1、一般数据中心的内部网络设备只用于高速转发不支持bgp路由协议,故无法与物理网络结合;2、服务器之间或与网络设备建立bgp增加网络的复杂度;3、使用隧道方案由于多一层的数据封装和解封,性能有所下降。技术实现要素:本发明所要解决的技术问题是提供一种基于docker容器的跨宿主机互访系统及其控制方法,能够充分利用路由方案与隧道方案的优点,解决数据中心因bgp或其他路由协议不支持而导致的跨宿主机之间无法互访的问题。本发明为解决上述技术问题而采用的技术方案是提供一种基于docker容器的跨宿主机互访系统及其控制方法,包括宿主机和多个节点主机,所述宿主机和多个节点主机通过物理网络相连,其中,所述宿主机上设有数据库d_server,所述宿主机上的数据库d_server存储着整个数据中心容器地址和分配地址的组件,所述宿主机周期性检测每个节点主机的连接运行状态,下发更新消息,并分配ip地址或网段;每个节点主机上都接收配置有其他节点容器所使用的ip地址段的路由,该路由的下一跳地址为该节点主机的接口ip地址,同时每个节点主机对其连接的网络设备进行路由配置,从而使得整个跨宿主机互访系统形成纯静态路由配置,并可对各节点主机上所生成的路由进行直接查看和修改。上述的基于docker容器的跨宿主机互访系统,其中,每个节点主机上设有信息接收模块和命令执行模块;所述宿主机周期性检测信息接收模块的连接运行状态,下发更新消息,并分配ip地址或网段;所述信息接收模块在部署后将会连接d_server,并向其报告该节点的状态,然后向d_server申请给予容器的ip地址段;同时信息接收模块会等待接收来自d_server的更新信息,然后通过本地socket端口将更新信息发送给命令执行模块;所述命令执行模块通过socket接收来自信息接收模块的信息,将其转换成路由配置命令;并连接到数据中心中指定网络设备,或者向本地主机写入路由条目。本发明为解决上述技术问题还提供一种基于上述docker容器的跨宿主机互访系统的控制方法,包括如下步骤:步骤s1:预先在容器的宿主机上定义ip地址使用范围,然后信息接收模块d_client部署完毕后将自动连接d_server,向d_server进行注册和申请可用的ip地址段;步骤s2:d_client将申请到的地址段信息进行记录和存档,并通过linuxsocket发送到同属主机上的命令执行模块h_confd;步骤s3:h_confd收到d_client发送的信息将其转换为linux下的配置命令,然后修改bridge网桥的地址,从而改变容器获取的ip地址;步骤s4:当有其他节点主机加入到d_server时,d_server会记录d_client申请到的地址段和d_client的ip,并向其他所有的主机节点发下更新信息;步骤s5:d_client收到d_server发来的触发式更新信息后进行记录和存档,并通过linuxsocket发送到同属主机上的h_confd;步骤s6:h_confd收到d_client发送的信息,发现其是节点更新信息,便将其转换成linux的路由配置命令,并写入linux的routetable。上述的基于docker容器的跨宿主机互访系统的控制方法,其中,所述节点主机连接网络设备,所述节点主机上设有信息接收模块rd_client和命令执行模块r_confd,所述rd_client只会到d_server上进行注册而不会申请地址,所述r_confd收到rd_client发送的信息,则将其转换成网络设备的路由配置命令,并连接到网络设备上进行数据配置。本发明对比现有技术有如下的有益效果:本发明提供的基于docker容器的跨宿主机互访系统及其控制方法,使docker容器既能与传统物理网络互访,又能进行跨宿主机之间互访,安全可靠,易于维护,大大减少服务器对数据包的封装,降低封装引起的性能消耗。附图说明图1为本发明基于docker容器的跨宿主机互访系统架构示意图。具体实施方式下面结合附图和实施例对本发明作进一步的描述。图1为本发明基于docker容器的跨宿主机互访系统架构示意图。请参见图1,本发明提供的基于docker容器的跨宿主机互访系统,包括宿主机和多个节点主机,所述宿主机和多个节点主机通过物理网络相连;宿主机上设有键值数据库d_sever,节点主机上设有信息接收模块d_client和/或rd_client,节点主机还设有命令执行模块r_confd和/或h_confd;其中db_server作为ip地址库,统一纳管着整个数据中心容器的情况。d_client和rd_client用于与数据库d_sever进行数据的交互和健康检查。r_confd和h_confd分别从d_client中获取容器的信息,并向宿主机或网络设备写入相关路由命令。各组件作用如下:一、数据库d_server数据库d_server,是存储着整个数据中心容器地址和分配地址的组件,其作用分为以下三点:1)周期性检测d_client和rd_client的健康情况;2)下发更新消息;3)分配ip地址或网段。二、信息接收模块d_client、rd_client信息接收模块d_client,在部署后将会连接d_server,并向其报告该节点的状态,然后向d_server申请给予容器的ip地址段。同时d_client会等待接收来自d_server的更新信息,然后通过本地socket端口将更新信息发送给r_cond或h_cond。三、命令执行模块r_confd、h_confdr_cond,通过socket接收rd_client的信息,并将其转换成路由配置命令并连接到数据中心中指定网络设备。h_cond,通过socket接收d_client的信息,并将其转换成路由配置命令向本地主机写入路由条目。本发明为解决上述技术问题还提供一种基于上述docker容器的跨宿主机互访系统的控制方法,具体步骤如下:步骤s1:用户预先在linux主机a(即容器的宿主机)上定义ip地址使用范围,然后d_client部署完毕后将自动连接d_server,向d_server进行注册和申请可用的ip地址段。rd_client则只会到d_server上进行注册不会申请地址。步骤s2:d_client将申请到的地址段信息进行记录和存档,并通过linuxsocket发送到同属主机上的h_confd。步骤s3:h_confd收到d_client发送的信息将其转换为linux下的配置命令,然后修改bridge网桥的地址,从而改变容器获取的ip地址。步骤s4:当有其他节点主机加入到d_server时,d_server会记录d_client申请到的地址段和d_client的ip,并向其他所有的主机节点发下更新信息。步骤s5:d_client收到d_server发来的触发式更新信息后进行记录和存档,并通过并通过linuxsocket发送到同属主机上的h_confd(和r_confd)。步骤s6:h_confd收到d_client发送的信息,发现其是节点更新信息,便将其转换成linux的路由配置命令,并写入linux的routetable。r_confd收到rd_client发送的信息,则将其转换成网络设备的路由配置命令,并连接到网络设备上进行数据配置。由上可见,本发明每台linux节点上都会有其他节点容器所使用的ip地址段的路由,其路由的下一跳地址为linux节点的接口ip地址。同样由于r_confd会对网络设备进行路由配置,所以网络设备上也会存在每个linux节点上容器的地址路由。由此docker网络环境由一个由静态路由所组成,并可通过linux命令来查看其路由信息。具体优点如下:1)全网无任何动态路由协议纯静态路由实现,降低网络复杂度低;2)各节点上所生成的路由可直接查看和修改,提高可维护性;3)无数据包隧道的封装,减少服务器对数据包的封装和封装的性能消耗。虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,任何本领域技术人员,在不脱离本发明的精神和范围内,当可作些许的修改和完善,因此本发明的保护范围当以权利要求书所界定的为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1