ZStack作为标准IaaS软件管理计算、存储和网络三大子系统,其中网络子系统是最复杂的。用户在一个简单的单机环境中搭建IaaS,最常遇到的问题就是该搭建哪种IaaS网络模型和在搭建该模型之前该如何在单机上准备必要的网络环境。由于不当的网络环境准备,常会导致云主机的启动失败,或者启动后无法获得正确的IP地址。今天我们将会介绍如何正确的准备用于搭建IaaS系统的网络环境。
首先,让我们来简单介绍一下两种不同的IaaS网络方案:扁平网络和 EIP网络
扁平网络是私有云环境中最常用、最简单的网络环境。用户的云主机和计算节点处于相同的网络层,
用户的应用完全不会感知自己运行在云主机中、还是物理主机中。用户的应用会非常容易的从物理机迁移到扁平网络的云主机中。在扁平网络中,假设用户设置的Public-L2(网卡接口名称比如:eth0,em1)的网卡设备为eth0,那么ZStack创建的云主机的IP地址将会和eth0所在的网络拥有相同的网段。例如用户计算节点eth0的IP地址为192.168.0.2(网关为192.168.0.1,子网掩码为255.255.255.0),用户在Public-L3(代表网卡接口的IP地址、掩码、网管)中设置的IP Range为 192.168.0.100~192.168.0.200。那么在创建在Public-L3网络上的云主机将会自动从ZStack获取192.168.0.100~192.168.0.200中的一个IP地址。
注意:用户在设置Public-L3的IP Range的时候需要避免和eth0网络上其他网络设备的IP地址冲突
注意:用户在设置Public-L3的网关和子网掩码错误,将会导致创建的云主机无法访问网关以外的网络,例如Internet。
注意:用户在添加Public-L3的网络服务时,如果没有选择DHCP的服务,可能会导致新创建的云主机无法获得IP地址,或者获得IP地址和ZStack分配的不一致。这是因为该云主机并不知道ZStack给它分配的IP地址为多少。
注意:如果eth0网络上有其他DHCP服务器,Public-L3也选择了DHCP服务,有可能会导致云主机获取的IP地址不是ZStack分配的。这是因为云主机拿到了从网络上原有DHCP服务器分配的IP地址。用户可以通过设置原有DHCP服务器,来禁止它给新的云主机分配IP地址。不过用户不必担心ZStack的DHCP服务会污染网络上的其他DHCP服务,因为ZStack的DHCP服务器只会给指定MAC的云主机分配IP地址。
在阅读以上注意事项后,希望用户在打算实施私有云部署前,需要预先考虑如何优化公司网络配置。原则上也很简单,就是用户可以准备一个全新的二层网络环境。给该二层网络环境配置一个网关和对应的IP CIDR,并且不配置任何的DHCP服务。
扁平网络也可以直接用于“公有云”业务,也就是每一个云主机都有一个互联网的独立IP地址。很多VPS提供商利用该模式提供服务。需要注意的是,扁平网络的云主机之间没有二层网络隔离,网络安全需要通过三层的安全组(Security Group)提供。用户在选择Public-L3网络服务的时候,需要选上Security Group。通常情况下,三层网络安全控制已经可以达到要求。
EIP的网络模式(Port Forwarding的模式与EIP模式几乎类似)实际是经典的亚马逊AWS EC2模式。在该模式中,云主机会被设置上两个IP地址。其中一个是私网IP地址,也就是在云主机中用ifconfig看到的IP地址。还有一个是公网IP地址(可以是互联网的IP地址,也可以是公司内部网络的IP地址)。云主机的私网IP地址无法从外部直接连接(例如,无法从Internet上连接某公司内部一个IP为192.168.0.10的机器)。用户通过公网IP地址可以登录该云主机,并进行相关的操作。由于该模式是经典的公有云模式,所以其他公有云也大多提供类似的模式。
在ZStack的EIP网络中,云主机的私网和公网之间是通过路由器(例如虚拟路由器)来隔离和中转的。虚拟路由器既承担了DHCP、DNS这样的服务,也承担了网关和DNAT的服务。这种做法可以做到更有效的网络隔离,也可以在公网IP地址有限的情况下节省公网IP地址。如果云主机提供的网络服务只供私网内的其他云主机使用,就不需要获得一个独立的公网IP地址。在公有云业务中,每个独立的公网IP地址也都是需要收费的。
在EIP模式中,虚拟路由器至少需要拥有一个公网IP地址,用于私网内部云主机访问公网的中转。在没有给云主机配置EIP之前,公网上的其他网络设备是无法透过虚拟路由器访问云主机的,但是云主机依然可以通过虚拟路由器访问公网(SNAT)。而EIP相当于DNAT,相当于在虚拟路由器上假设了一个桥梁。
注意:在很多网络环境中,用户采用了EIP的网络架构,但是未必需要使用EIP功能。用户可能只用虚拟路由器的SNAT来分割内外网。
私有云是否会使用EIP网络模式呢?答案是根据用户的需求和网络环境来确定的。通常有两种私有云的情况会使用EIP模式:
一,提供网络服务的公司有一些不多的互联网IP地址。提供网络服务的云主机搭建在公司内网环境,用于连接数据库服务器和应用服务器。通过EIP,可以让用户可以直接访问放置在公司内网的云主机。如果云主机需要迁移、升级、扩容,用户也可以把EIP在不同的云主机之间进行无缝迁移。当需要使用负载均衡的时候,该EIP服务可以变身为负载均衡器,把来源于用户的网络访问分散到不同的云主机上。
二,公司的部门较多,有部门需要在公司内网环境里划分独立的私有网络,该私有网络可以访问公司内网,但是公司其他部门不能直接连接私有网络的机器。这个场景中,云主机EIP的IP地址是公司内网IP地址。使用EIP网络拓扑可以给每个部门的私有网络分配不同的Vlan号以达到二层网络隔离。
注意:用户在设置Public-L3的IP Range的时候需要避免和eth0网络上其他网络设备的IP地址冲突。否则如果虚拟路由器可能会启动失败,并报告IP地址被占用。
注意:在EIP模式中,如果Public-L2(如eth0)上有其他DHCP服务器,并不会影响虚拟路由器的IP地址分配。这是因为虚拟路由器的IP地址是ZStack从Public-L3的IP Range中静态指定的。用户唯一需要注意的是,需要预先在原有网络上DHCP服务器预留一段静态IP地址用于虚拟路由器的IP地址和EIP的IP地址。预留出来的IP地址,也就是用户设置在Public-L3上面的IP Range。
实战过程中,很多用户会常会在单机上尝试练习扁平网络和EIP网络模式。如果用户能够简单的配置原有网络环境,那么可以轻松的测试。但是通常情况下,用户的单机网络环境可能和我们之前定义的网络环境有些差异。例如,我们要求原有网络中预留一些和eth0网络的IP地址给Public-L3,但是由于一些原因无法更改原有网络的网络分配。又例如,用户的测试机器直接连在Internet上,eth0只有一个Internet的IP地址,没有更多的公网IP地址。这个时候,我们需要一些特别的手段来营造合适的网络环境。这个手段,就是在单机上创建一个独立的网络设备eth0.10。我们给该网络设备配置上一个172.16.0.1的IP地址,并将该设备用于Public-L2,这样就可以创建一个干净的网络环境用于ZStack测试。如果单机的网卡设备不是eth0,也可以做个替换,例如把eth0换成em1。
具体的配置为:
Public-L2:eth0.10
Public L3 IP Range: 172.16.0.2~172.16.0.254
Public L3 Netmask: 255.255.255.0
Public L3 Gateway: 172.16.0.1
Private-L2(EIP模式):eth0,vlan 100
Private L3 CIDR: 10.0.0.1/24
eth0.10的创建方法:
vconfig add eth0 10
ifconfig eth0.10 172.16.0.1 netmask 255.255.255.0
为何要给eth0.10设置172.16.0.1的IP地址?有两个原因:
虚拟路由器会从Public L3上获得一个172.16.0.x的IP地址,ZStack需要连接它
需要把172.16.0.1作为网关,连接eth0,让云主机可以连通公网。
打通eth0.10到eth0的网络:
iptables -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0.10 -j ACCEPT
iptables -A FORWARD -i br_eth0.10 -j ACCEPT
如上图所示,扁平网络模式下的云主机和虚拟路由器都将会获得172.16.0.x的IP地址。
如上图所示,虚拟路由器都将会跨接br_eth0.10和br_eth0.100两个网络。在br_eth0.10网络上,会获得172.16.0.x的IP地址;在br_eth0.100网络上会获得10.0.0.1的IP地址。其他云主机将会获得10.0.0.x的IP地址。给云主机申请的EIP地址将会是172.16.0.x。这个时候用户可以直接通过在计算节点上ssh EIP地址,但是无法直接ssh 云主机的私网地址。
本文出自 “翟军铭的linux博客” 博客,请务必保留此出处http://zhaijunming5.blog.51cto.com/10668883/1702801
原文地址:http://zhaijunming5.blog.51cto.com/10668883/1702801