Cloudstack的网络即服务(NaaS)特性包括2种模式:Basic与Advanced,其中最主要的区别在于对用户网络(Guest Network)采用的隔离方式;在Basic模式下,采用Security Group方式进行隔离(L3隔离);而在Advanced模式下,采用VLAN方式进行隔离(L2隔离)。对于Advanced网络模式来说,存在4种类型的网络流量:
Public Network——公共网络,一般指Internet公网;
Guest Network——私有虚拟网络,指属于每个租户自己的私有网络;
Management Network——管理网络,指管理服务器与物理主机、系统虚拟机管理地址通讯的网络;
Storage Network——存储网络,一般指二级存储虚拟机SSVM与二级存储之间通讯的网络。
另外,系统虚拟机的虚拟路由器(Virtual Router)在高级网络模式里也是十分重要的部分。它将成为租户私有网络与公共网络之间的接口,并未租户私有网络提供各种网络服务,包括:NAT、静态NAT、DHCP、DNS、Load Balancing、Port Forwording、Firewalls、Site-to-Site VPN等。
在创建高级网络Zone的时候,系统会为每一个租户(account)默认创建一个Virtual Router以及其所属的私有虚拟网络Guest Network,Guest Network的IP地址一般为在创建Zone的时候指定的CIDR地址(10.1.1.0/24),并且会为这个Guest Network分配一个VLAN ID(VLAN ID的可用范围也是在创建zone时指定的)。当然,租户可以根据自己的需要创建更多的属于自己的私有虚拟网络,每个新的私有虚拟网络也将配置自己的Virtual Router。那么高级网络模式以及Virtual Router是怎么工作的呢?我们看下面这个高级网络模式的示意图:
当高级网络创建完成后,Virtual Router会成为租户私有网络的网关,对内的虚拟网络接口配置IP地址10.1.1.1,对外的虚拟网络接口配置一个或多个公网IP地址(65.37.141.*)。而不同租户获得属于自己的私有网络Guest Network,之间相互隔离无法相互访问。租户私有网络内的虚拟机通过Virtual Router的DHCP以及DNS功能在创建时自动获取IP地址(10.1.1.0/24)和主机名;当需要访问公网时,虚拟机通过Virtual Router的NAT功能获得私有地址到公网地址的映射。
我们知道,NAT地址映射只能提供内部对外部的访问,而当外部请求进入时,是无法访问私网内部的虚拟机的。那么,当需要外部请求访问时该如何做呢?很简单,Virtual Router除了提供NAT功能外,还会提供静态NAT、Load Balancing、Port Forwarding以及防火墙功能。
静态NAT:可以将1个公网IP地址与一台虚拟机进行绑定,这台虚拟机的所有网络请求和访问都会走绑定的公网IP。
Load Balancing:网络负载均衡,指定Virtual Router公网端IP地址及相应端口,以及负载分发的虚拟机及端口,还有轮询模式,进入的网络请求就负载分发到不同的虚拟机上。
Port Forwarding:端口转发,指定Virtual Router端公网IP地址及相应端口,以及被转发到的虚拟机及相应端口,进入的网络请求就会被转发到相应的虚拟机端口上。
Firewalls:防火墙,出于网络安全的考虑,Virtual Router会默认屏蔽所有对内的访问请求,需要配置防火墙策略开启需要被访问的协议及端口。 具体的实现方式可以参考下图:
多层网络:
下面我们来看一个Cloudstack多层网络的例子。一个租户要部署自己的网络应用,包括4台Web服务器,2台APP服务器,1台DB服务器。他创建了3个虚拟网络,VLAN100 10.1.1.0/24,VLAN101 10.1.2.0/24,VLAN141 10.1.3.0/24。Web服务器配置双虚拟网卡,分别接入VLAN100与101,VLAN100通过硬件Juniper防火墙与NetScaler负载均衡器对外提供网络服务,通过VLAN101与APP服务器进行通讯;APP服务器配置双虚拟网卡分别接入VLAN101与VLAN141;DB服务器接入VLAN141,与APP服务器进行通讯。具体如下图所示: