发明内容
本发明的目的在于提出一种虚拟机之间的通信方法,其能解决分散于互联网上的虚拟机之间的通信和隔离的问题。
为了达到上述目的,本发明所采用的技术方案如下:
虚拟机之间的通信方法,其包括以下步骤:
步骤1、第一虚拟机发出接收方为第二虚拟机的网络数据包;
步骤2、第一虚拟机所在的第一主机节点的第一路由模块查询所述网络数据包中的第二虚拟机的IP地址是否存在第一内网路由表中,若是,则执行步骤3至步骤4,若否,则执行步骤5至步骤8;
步骤3、第一路由模块根据第一内网路由表将所述网络数据包发送至所述第二主机节点,以使第二主机节点将所述网络数据包转发至第二路由模块;
步骤4、第二路由模块根据第二内网路由表将所述网络数据包发送至第二虚拟机;
步骤5、第一路由模块将所述网络数据包转发至第一虚拟机所在的第一网关;
步骤6、第一网关根据第一外网路由表将所述网络数据包发送至第二虚拟机所在的第二网关;
步骤7、第二网关根据第二外网路由表将所述网络数据包发送至第二主机节点,以使第二主机节点将所述网络数据包转发至第二路由模块;
步骤8、第二路由模块根据第二内网路由表将所述网络数据包发送至第二虚拟机;
其中,第一内网路由表存储在第一路由模块中,第二内网路由表存储在第二路由模块中,第一外网路由表存储在第一网关中,第二外网路由表存储在第二网关中;第二路由模块和第二虚拟机均位于第二主机节点上。
优选的,第一主机节点为物理机或虚拟机。
优选的,第二主机节点均物理机或虚拟机
优选的,第一网关采用SNAT的方式将网络数据包发送至第二网关。
优选的,第二网关采用DNAT的方式将网络数据包发送至第二主机节点。
本发明具有如下有益效果:
整个网络通信架构实现全自动部署,能够实现分散于互联网上的虚拟机之间进行通信和隔离,并不要求所有的虚拟机必须存在于同一个集中的数据中心内,虚拟机集群的分布更加自由。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述。
结合图1和图2所示,一种虚拟机之间的通信方法,其包括以下步骤:
步骤S1、第一虚拟机发出接收方为第二虚拟机的网络数据包。
步骤S2、第一虚拟机所在的第一主机节点的第一路由模块查询所述网络数据包中的第二虚拟机的IP地址是否存在第一内网路由表中,若是,说明第一虚拟机和第二虚拟机在同一个租户网络中,则执行步骤S3至步骤S4,若否,说明第一虚拟机和第二虚拟机不在同一个租户网络中,则执行步骤S5至步骤S8。
步骤S3、第一路由模块根据第一内网路由表将所述网络数据包发送至所述第二主机节点,以使第二主机节点将所述网络数据包转发至第二路由模块。
步骤S4、第二路由模块根据第二内网路由表将所述网络数据包发送至第二虚拟机。
步骤S5、第一路由模块将所述网络数据包转发至第一虚拟机所在的第一网关。
步骤S6、第一网关根据第一外网路由表将所述网络数据包发送至第二虚拟机所在的第二网关,具体的,第一网关可采用SNAT的方式将网络数据包发送至第二网关。
步骤S7、第二网关根据第二外网路由表将所述网络数据包发送至第二主机节点,以使第二主机节点将所述网络数据包转发至第二路由模块,具体的,第二网关可采用DNAT的方式将网络数据包发送至第二主机节点。
步骤S8、第二路由模块根据第二内网路由表将所述网络数据包发送至第二虚拟机。
其中,第一内网路由表存储在第一路由模块中,第二内网路由表存储在第二路由模块中,第一外网路由表存储在第一网关中,第二外网路由表存储在第二网关中;第二路由模块和第二虚拟机均位于第二主机节点上。
本实施例的第一主机节点可以是物理机或虚拟机,第二主机节点均物理机或虚拟机。第一主机节点和第二主机节点也可以是同一台物理机或虚拟机。
为了便于理解本发明,下面结合可行的通信架构及案例进行详细说明。要实现本实施例的通信方法,需要网路接口模块、路由表模块和网络转发模块。其中,第一路由模块和第二路由模块分别由路由表模块和网络转发模块组成。
网络接口模块主要由网络接口(简称为TAP设备)和网桥设备组成,与网络转发模块关联。当创建虚拟机的时候会为每个虚拟机创建一个对应的网络接口。TAP设备能够捕获所有进出虚拟机的网络数据包,并进行网络数据包的解析,完成网络数据包的读取和发送功能。当使用Libvirt等虚拟化技术创建一个虚拟机的时候,会自动的创建出一个被虚拟机所使用的虚拟网卡VNET,网络接口模块会将VNET与TAP设备通过网桥设备进行桥接,使得虚拟机的VNET与TAP设备同处于一个广播域,方便TAP设备捕获通过VNET的网络数据包。
路由表模块由JAVA控制程序和数据库组成,为了避免使用交换机等设备,而又能保证正常的网络数据包转发操作,路由表模块设计了一个JAVA控制程序,由JAVA控制程序维护路由表的添加删除等操作,而路由表信息则是存在于数据库之中。创建虚拟机的时候,不同的租户网络使用OAID进行区分(OAID是一个区分不同网络的唯一标识字符串),OIAD+IP是区分虚拟机的标志,数据库会维护一张网络ID与相应IP的路由映射关系表,同时还会维护一张网络ID与主机ID的映射表,路由表信息是JAVA控制程序实时进行更新的,当创建虚拟机的时候JAVA控制程序会将虚拟机的IP地址、MAC地址、OAID、主机ID等信息存入到相应的数据库的路由表中,而当删除虚拟机时也会将路由表中相应的信息移除。通过这种方式,网络转发模块收到互联网上发送过来的网络数据包时,只需要查询数据库就能够获取到IP地址、MAC地址、OAID、主机ID之间的对应关系,利用路由表就可以将网络数据包按照一定的策略进行转发。
网络转发模块由JAVA控制程序实现,底层对于网络数据包的转发等操作调用网络接口模块实现。租户网络叠加于互联网网络,是一种叠加网络。租户网络数据包封装在互联网网络数据包内。当网络转发模块收到网络数据包之后,对网络数据包进行解析,获取网络数据包的源地址和目的IP地址等信息,然后通过路由表模块查询路由表,比对之后按照一定策略转发网络数据包。通过这种方式,网络转发模块能够通过路由表判别目的虚拟机所在的主机,通过互联网将网络数据包转发,也可以通过路由表确定到达本主机的网络数据包是要发往哪个虚拟机,从而通过TAP设备将网络数据包发到对应的虚拟机上。
同一个租户网络对应于同一个OAID,对应同个OAID的网络内部虚拟机之间是能够相互通信的。
同一个租户网络内部的虚拟机的通信过程如下(假设同个OAID下有第一虚拟机和第二虚拟机进行通信):
(1)第一虚拟机通过其虚拟网卡向第二虚拟机发出网络数据包;
(2)第一虚拟机对应的第一主机节点上的TAP设备捕获到网络数据包并解析出IP地址等信息,然后转发给第一路由模块;
(3)第一路由模块通过数据库查询路由表获取目的IP地址对应第二主机节点的IP地址,调用TAP设备修改目的IP地址,将网络数据包发送出去;
(4)第二虚拟机所在第二主机节点上的第二路由模块获取到网络数据包;
(5)第二路由模块分析网络数据包获得的目的MAC地址;
(6)通过查询路由表可知MAC地址对应的TAP设备;
(7)调用TAP设备将网络数据包发送到第二虚拟机。
不同租户网络之间的虚拟机是隔离的,无法直接进行两者相互之间的访问。虚拟机之间也无法得知他们对应主机节点的IP,所以无法直接通过互联网通路进行通信。所以要实现不同租户网络的虚拟机之间的相互访问,首先必须解决虚拟机所在主机节点之间的相互通信。
主机节点之间的相互通信可以通过互联网数据通路进行。要实现不同OAID虚拟机
之间的通信需要为每个虚拟机分配一个公网IP,并且通过相应的网关。每个OAID下的网络
有一个网关,网关上也一样维护了一个路由表,并且当创建某一个租户网络的时候在网关
上为这个租户网络创建一个桥设备,将网关上的TAP设备绑定到桥设备上,当为虚拟机分配
一个公网IP的时候,将公网IP与桥设备IP进行静态NAT,通过设置Iptables规则实现。
当网络数据包往外发的时候做SNAT:
例如:iptables-t nat-A POSTROUTING-s 10.10.10.0-o eth0-j SNAT--to-
source 192.168.11.3。
当收到网络数据包的时候做DNAT:
例如:iptables-t nat-A PREROUTING-s 192.168.11.3-o eth0-j DNAT--to-
destination 10.10.10.0。
通过NAT方式,不同租户网络的虚拟机之间的通信的网络数据包都能够通过网关到达虚拟机所在的主机节点。然后同样通过TAP设备以及网络转发模块将网络数据包发送到最终的虚拟机上。这样就实现了不同租户网路的虚拟机之间的通信。
以不同OAID网络下的第一虚拟机和第二虚拟机之间的通信为例进行说明,通信流程如下:
(1)第一虚拟机通过其虚拟网卡向第二虚拟机发出网络数据包;
(2)第一虚拟机对应的第一主机节点上的TAP设备捕获到网络数据包并解析出IP地址等信息,然后转发给第一路由模块;
(3)第一路由模块通过数据库查询是否有相应的信息在路由表中,由于两个虚拟机是属于不同的OAID网络,所以查找不到对应的IP信息,所以将网络数据包转发到第一虚拟机所在的第一网关;
(4)第一网关对网络数据包做SNAT之后将网络数据包转发到第二虚拟机所在的第二网关;
(5)第二网关对网络数据包做DNAT转换,发送到第二虚拟机所在的第二主机节点;
(6)第二主机节点上的第二路由模块捕获到网络数据包,解析出目的IP,查询路由表获得对应的第二虚拟机的MAC地址;
(7)TAP设备根据MAC地址找到第二虚拟机的虚拟网卡,将网络数据包发送到虚拟网卡,从而第二虚拟机获得网络数据包。
本实施例具有如下优势:
1、能够解决多租户网络通信和隔离的问题,解决分散于互联网上的虚拟机之间的通信和隔离的难题。本实施例所述的隔离是指在策略或规则允许下的通信,并不是无条件的通信。
2、本实施例的网络模式与VLAN的网络模式相比,其并不要求所有的虚拟机必须存在于同一个集中的数据中心内,虚拟机集群的分布更加自由。
3、与传统VLAN只能支持4096个节点相比,本实施例理论上没有节点的限制,当然会受限于网络带宽,但是提高网络带宽的前提下远远不止4096个节点。
4、VLAN操作需手工介入较多,对于大规模的集群来说,将造成管理员十分繁重的负担,而本实施例的各个网络模块的安装和部署都可以采用全自动的方式进行。
5、虚拟机的网络数据包的转发等操作都是依赖于软件模块,减少了对于网络硬件设备的依赖。
6、提供了一种整合互联网主机资源的租户网络解决方案。
对于本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及变形,而所有的这些改变以及变形都应该属于本发明权利要求的保护范围之内。