网络的设计规划是CloudStack的一个亮点,也是CloudStack被广泛商业应用的一个主要原因.本篇深入讨论一下CloudStack中网络的设计方式.
CloudStack中根据不同的数据流量类型设计了管理,公共,客户及存储网络,可以简称为PMGS ( Public,
Management, Guest, Storage) 网络.
Public:当虚拟机需要访问Internet或外部网络时,需要通过公共网络;这就说明客户虚拟机必须被分配某种形式的外网IP.用户可以在CloudStack的UI上获得一个IP来做NAT映射,也可以在Guest与Public之间做负载均衡.所有的Hypervisor都需要共享Public
VLan以保证虚拟机对外的访问.
Management:CloudStack内部资源相互通信会产生Management流量,这些流量包括管理服务器节点与Hypervisor集群之间的通信,与系统虚拟机之间的通信或与其它组件之间的通信等;集群规模较小时管理流量只占用很少的带宽.
Guest:最终用户运行CloudStack创建的虚拟机实例时产生Guest流量,虚拟机实例之间的相互通信通过客户网络.
Storage:主存储与Hypervisor之间互连互通的流量;主存储与二级存储之间也会产生Stroage流量,比如虚拟机模板和快照的搬移.
CloudStack中网络模式可以分成基本网络和高级网络两种.其中MGS(Management,Guest,Storage)三种网络对于基本网络及高级网络通用.而P(Public)则只是针对高级网络才存在.可以对比下图:
基本网络 vs 高级网络
这里强烈建议不同的流量类型单独设置网卡,而对于存储网络最好用网卡绑定(NIC bonding),这样在系统的稳定性和性能方面都会有极大的提高.
基本网络模式下IP地址规划
如果打算使用基本网络模式建立CloudStack云计算环境,那就意味着客户虚拟机实例将会和CloudStack,Hypervisor整体架构拥有相同的CIDR段.这样在规划IP地址时每个资源域都要预留足够的IP地址.假设你规划有8个资源域,每个资源域容纳2000台虚拟机,那IP地址CIDR可规划成192.168.0.0/20,这样能保证最多16个资源域,每个资源域IP数量有2^12-1=4095个,除去机架,系统虚拟机,主机占用的IP,提供2000个VM的IP绰绰有余.
注:具体环境中采用哪个段的IP地址可能要与IT环境相一致.
高级网络模式下的IP地址规划
高级网络模式相对来说较为复杂,在这种模式下,每个账号都要分配:
1. 公网IP,这为了保证对外网的访问,通常这个IP设置在虚拟路由器上
2. Guest网络IP范围,比如默认的:10.1.1.0/24
3. Guest网络隔离的VLan ID
以上默认的Guest网络IP范围对于所有账户都是一样的,只有管理员可以进行更改使不同账号使用不同的的Guest网络IP范围.
一个账户下的客户虚拟机实例通过它专属的VLan进行相互之间的访问或与这个账户的虚拟路由器互通.客户虚拟机可以运行在资源域内任意一台主机上;通过二层交换的VLan端口汇聚(Trunk)功能,可以保证同一个VLan下所有的虚拟机互连互通.
预留系统IP地址
当配置一个机架时,需要为系统虚拟机保留一些IP地址,这部分是管理网络也称为私有IP地址.通常情况下10个IP地址对一个机架是足够用了.这些IP地址会被SSVM(二级存储系统虚机)和CPVM(控制台系统虚机).如果系统很庞大,CPVM会被自动部署多台来分担负载.
在整个云计算环境中,所有的主机和系统虚拟机都必须有一个唯一的IP地址,因此在添加新的资源域时,也需要考虑当前环境中资源域的网络规划.
本地链路IP(Link-Local)
在使用XenServer或KVM作为主机时,系统虚拟机(SSVM,CPVM,V-Router)会被分配一个本地链路的IP地址.这个地址的CIDR是169.254.0.0/16;这样看来本地链路的IP地址会有2^16-1=65535个,目前来看不太可能超过这个范围.如果一个机架只包含XenServer或KVM的集群,那可以分配给这个机架下的主机一个C类段的地址形如:x.x.x.x/24.如果是VMWare的集群,给机架分配的IP地址范围会被系统虚拟机占用一些那么就要考虑比C类段大一些的范围作为机架的IP地址段,形如:x.x.x.x/21,这样会有2^11-2=2046个IP供给主机,存储以及系统虚拟机使用.
虚拟机隔离
在同一个资源域内,虚拟机有两种方式进行隔离:安全组和VLAN.
安全组隔离
当使用安全组时,每一个创建的账户都会有一个默认的安全组生成,以保证通过这个账户创建的虚拟机实例默认要以互连互通.当用户创建虚拟机实例后,可以对这些虚拟机实例设定一个或多个安全组.
用户可以在任意时间创建额外的安全组,但正在运行中的此用户的实例不能应用新建的安全组规则,需要关机后更改设置.
同一个安全组下的用户虚拟机实例可以相互通信.安全组通过Ingress和Egress来进行流量控制.
VLAN
高级网络模式中默认是通过VLAN进行虚拟机实例之间的相互隔离.当一个账户的第一个虚拟机被创建并运行时,一个隔离的网络也同时创建完成.在一个资源域下,一个账户的虚拟机网络默认的CIDR配置:10.1.1.0/24;在整个云环境中,只有系统管理员有权限创建一个隔离的客户虚拟机网络,并指定一个IP范围和一个VLAN.
CloudStack中网络是较为复杂的一部分,功能也十分强大,特别是高级网络模式,这里建议大家参考CloudStack3.0的相关文档来更清楚的了解网络部分.