openstack项目的研究,到今天,算是要进入真实环境了,要部署实验平台了。不再用devstack了。也就是说,要独立controller,compute,storage和network了。要做这个的第一步,就是要将各个服务器的软件环境(操作系统是否满足liberty的要求,centos最好是7以上),以及服务器之间的网络连接通路打通,方便后续的软件安装需要。
下面看看我的节点拓扑图,有5台机器,其中参与这个openstack的节点有4个,计划中的controller,network,storage(cinder/glance/swift),compute。另外一个节点机器用来作为跳转机器用。因为没有那么多公网IP,只有一个服务器有公网IP,所以,openstack的节点机器只能是内网IP了,我选择的是192.168.1.xxx,如下图所示:
从上图可以看出,中间机器是通过NAT实现的跳转。SNAT是为了方便各个openstack机器方便访问公网,DNAT是为了从公网访问controller节点的dashboard的,因为这个要等到后续openstack的软件安装好后,再测试。这里就不提供这个的配置。虽然跳转机器上显示有两个网络连接,一个是public的,一个是gateway的内网连接到cisco的交换机上。其实,上图中的每台机器都有4个NIC,这几个机器都是poweredge r610服务器,由于老旧,都差不多成为了一堆费铁了。安装centos7折腾了我2天,机器启动慢的要死,启动界面提示信息,各种不正常。主要命的是只有一个机器的光驱是好的,BT公司不允许用U盘,最终折腾这些错误和残疾的设备问题,浪费了我太多时间,没有办法,在十几个硬盘中找能识别出来的,往那个光驱能用的机器上倒腾安装操作系统。。。我也是醉了,几个服务器,一个显示器,一个键盘,一个鼠标,一个能用的光驱。。。。
不扯淡了,现在,重点是要说说,各个节点上的配置信息。
首先说说跳转机器,主要配置信息就是SNAT,以及设置一个NIC作为gateway用。因为每个机器上都有em1-em4这四个NIC,跳转机器,我用em1作外网接口,em2用作gateway接口,配置192.168.1.1这个IP地址。
看看em1的ifcfg-em1配置信息(vim /etc/sysconfig/network-scripts/ifcfg-em1):
1 HWADDR=18:03:73:f0:c3:8f 2 TYPE=Ethernet 3 BOOTPROTO=none 4 IPADDR0=a.b.c.d 5 PREFIX0=24 6 DEFROUTE=yes 7 IPV4_FAILURE_FATAL=no 8 IPV6INIT=yes 9 IPV6_AUTOCONF=yes 10 IPV6_DEFROUTE=yes 11 IPV6_PEERDNS=yes 12 IPV6_PEERROUTES=yes 13 IPV6_FAILURE_FATAL=no 14 NAME=em1 15 UUID=add4414c-d48b-4470-a578-98c7a6a0f508 16 ONBOOT=yes 17 NETMASK=255.255.255.0 18 USERCTL=no 19 PREFIX=24 20 GATEWAY0=a.b.c.1
再看看em2的ifcfg-em2的内容:
1 1 TYPE=Ethernet 2 2 BOOTPROTO=none 3 3 IPADDR0=192.168.1.1 4 4 PREFIX0=24 5 5 NETMASK=255.255.255.0 6 6 GATEWAY0=192.168.1.1 7 7 DEFROUTE=yes 8 8 IPV4_FAILURE_FATAL=no 9 9 IPV6INIT=no 10 10 IPV6_AUTOCONF=no 11 11 IPV6_DEFROUTE=no 12 12 IPV6_FAILURE_FATAL=no 13 13 NAME=em2 14 14 UUID=444422af-5b4e-4e34-a1bc-3d009ef0237f 15 15 ONBOOT=yes 16 16 USERCTL=no 17 17 HWADDR=18:03:73:F0:C3:91 18 18 IPV6_PEERDNS=no 19 19 IPV6_PEERROUTES=no
SNAT配置比较简单,第一步,就在iptables里面的nat表配置一下:
1 [[email protected] ~]# iptables -t nat -A POSTROUTING -s 192.168.1.100 -j SNAT --to-source a.b.c.d
1 [[email protected] ~]# iptables -t nat -I POSTROUTING -s 192.168.1.110 -j SNAT --to-source a.b.c.d
1 [[email protected] ~]# iptables -t nat -I POSTROUTING -s 192.168.1.120 -j SNAT --to-source a.b.c.d
1 [[email protected] ~]# iptables -t nat -I POSTROUTING -s 192.168.1.130 -j SNAT --to-source a.b.c.d
配置完成后,查看下iptables的snat信息如下:
1 [[email protected] ~]# iptables -t nat -L 2 Chain PREROUTING (policy ACCEPT) 3 target prot opt source destination 4 5 Chain INPUT (policy ACCEPT) 6 target prot opt source destination 7 8 Chain OUTPUT (policy ACCEPT) 9 target prot opt source destination 10 11 Chain POSTROUTING (policy ACCEPT) 12 target prot opt source destination 13 SNAT all -- 192.168.1.130 anywhere to:a.b.c.d 14 SNAT all -- 192.168.1.120 anywhere to:a.b.c.d 15 SNAT all -- 192.168.1.110 anywhere to:a.b.c.d 16 SNAT all -- 192.168.1.100 anywhere to:a.b.c.d
注意,只有第一个是-A添加chain为POSTROUTING,后面三个都是-I插入操作。第二步就是要打开IP forwarding,修改/etc/sysctl.conf文件,找到net.ipv4.ip_forward,修改成下面的样子:
1 net.ipv4.ip_forward=1
这里,说下,起初我的SNAT配置如下,只有一条语句如下:
1 [[email protected] ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source a.b.c.d
最后,发现从跳转机器上无法ping通其他的机器(其他openstack机器,比如controller等),但是从其他的几个节点可以ping通跳转机。起初以为是网关连接交换机的网线坏掉,后来换线后发现还是如此,仔细分析了下SNAT的配置,应该是这个配置的包转发逻辑出了点问题,也就是说,在跳转机上执行ping 192.168.1.100时,所有的从192.168.1.1出去的icmp包最后又发回到了这个跳转机器。于是,我就修改为四条iptables的规则操作,如上面的一个A三个I的操作,这样,就将192.168.1.1这个source的IP避开了,最终测试,双向都可以ping通了。
注意,上面的操作,只是临时的哟,要永久生效,必须写到/etc/sysconfig/iptables文件里面,或者,基于上面的命令执行完毕,再执行iptables-save 命令,我这里指定只save nat表:
1 [[email protected] ~]# iptables-save -t nat 2 # Generated by iptables-save v1.4.19.1 on Mon Feb 1 10:37:37 2016 3 *nat 4 :PREROUTING ACCEPT [1260048:116139336] 5 :INPUT ACCEPT [146564:41543662] 6 :OUTPUT ACCEPT [25035:1519835] 7 :POSTROUTING ACCEPT [25394:1545241] 8 -A POSTROUTING -s 192.168.1.130/32 -j SNAT --to-source a.b.c.d 9 -A POSTROUTING -s 192.168.1.120/32 -j SNAT --to-source a.b.c.d 10 -A POSTROUTING -s 192.168.1.110/32 -j SNAT --to-source a.b.c.d 11 -A POSTROUTING -s 192.168.1.100/32 -j SNAT --to-source a.b.c.d 12 COMMIT 13 # Completed on Mon Feb 1 10:37:37 2016
但是,考虑到,这样子iptables-save保存的文件没有办法开机后自动载入到iptables中,需要做一些启动时的自动加载的脚本操作,不方便,最终选择直接在/etc/sysconfig/iptables文件下面修改:
1 1 # Generated by iptables-save v1.4.19.1 on Tue Mar 10 14:56:49 2015 2 2 *nat 3 3 :PREROUTING ACCEPT [259:28155] 4 4 :INPUT ACCEPT [16:4183] 5 5 :OUTPUT ACCEPT [1:60] 6 6 :POSTROUTING ACCEPT [2:111] 7 7 -A POSTROUTING -s 192.168.1.130/32 -j SNAT --to-source a.b.c.d 8 8 -A POSTROUTING -s 192.168.1.120/32 -j SNAT --to-source a.b.c.d 9 9 -A POSTROUTING -s 192.168.1.110/32 -j SNAT --to-source a.b.c.d 10 10 -A POSTROUTING -s 192.168.1.100/32 -j SNAT --to-source a.b.c.d 11 11 COMMIT 12 12 # Completed on Tue Mar 10 14:56:49 2015 13 13 # Generated by iptables-save v1.4.19.1 on Tue Mar 10 14:56:49 2015 14 14 *filter 15 15 :INPUT ACCEPT [19308:5028665] 16 16 :FORWARD ACCEPT [123:7700] 17 17 :OUTPUT ACCEPT [13913:3438191] 18 18 COMMIT
经过测试,发现,这样子是可以满足使用,但是,既然有这么一个机器作为跳转机,做网关,为何不将其做的更加通用一点呢,选择nat的MASQUERADE.最终的配置如下,也是写如/etc/sysconfig/iptables文件中:
1 # Generated by iptables-save v1.4.19.1 on Tue Mar 10 14:56:49 2015 2 *nat 3 :PREROUTING ACCEPT [259:28155] 4 :INPUT ACCEPT [16:4183] 5 :OUTPUT ACCEPT [1:60] 6 :POSTROUTING ACCEPT [2:111] 7 -A POSTROUTING -o em1 -j MASQUERADE 8 COMMIT 9 # Completed on Tue Mar 10 14:56:49 2015 10 # Generated by iptables-save v1.4.19.1 on Tue Mar 10 14:56:49 2015 11 *filter 12 :INPUT ACCEPT [19308:5028665] 13 :FORWARD ACCEPT [123:7700] 14 :OUTPUT ACCEPT [13913:3438191] 15 COMMIT 16 # Completed on Tue Mar 10 14:56:49 2015
接下来,要配置openstack的其他几个节点机器了,每个机器的配置都差不多,下面,我就拿controller node0节点为例说明。
1. 改hostname,在/etc/sysconfig/network文件里面添加下面的一行配置
# Created by anaconda HOSTNAME=node0
然后,修改/etc/hosts文件。
1 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 2 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 3 192.168.1.100 node0 4 192.168.1.110 node1 5 192.168.1.120 node2 6 192.168.1.130 node3
2. 修改dns配置/etc/resolve.conf.添加下面的两行内容:
1 search 219.141.136.10 2 nameserver 202.106.0.20
3. 添加静态的路由,在/etc/sysconfig/static-routes文件中添加下面的一行内容(若没有这个文件,可以自己创建一个)
1 any net default gw gateway 192.168.1.1
4. 下面看看em1的配置信息:
1 TYPE=Ethernet 2 BOOTPROTO=none 3 DEFROUTE=no 4 IPV4_FAILURE_FATAL=no 5 IPV6INIT=no 6 IPV6_AUTOCONF=no 7 IPV6_DEFROUTE=no 8 IPV6_FAILURE_FATAL=no 9 NAME=em1 10 UUID=1f0572e7-b6a8-4342-83f3-749c00e1007e 11 ONBOOT=yes 12 HWADDR=18:03:73:F0:C3:1A 13 IPADDR0=192.168.1.100 14 PREFIX0=24 15 GATEWAY0=192.168.1.1 16 IPV6_PEERDNS=no 17 IPV6_PEERROUTES=no
到此,上面的控制节点上的所有的基础网络配置就算结束了,可以在这里ping一下www.baidu.com,是可以打开的:
[[email protected] opt]# ping www.baidu.com PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data. 64 bytes from 61.135.169.125: icmp_seq=1 ttl=51 time=9.09 ms 64 bytes from 61.135.169.125: icmp_seq=2 ttl=51 time=4.06 ms 64 bytes from 61.135.169.125: icmp_seq=3 ttl=51 time=13.0 ms 64 bytes from 61.135.169.125: icmp_seq=4 ttl=51 time=4.49 ms 64 bytes from 61.135.169.125: icmp_seq=5 ttl=51 time=4.75 ms 64 bytes from 61.135.169.125: icmp_seq=6 ttl=51 time=4.21 ms ^C --- www.a.shifen.com ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 5008ms rtt min/avg/max/mdev = 4.065/6.609/13.034/3.356 ms
到此,我的网络基础连接已经完成,为继续前行做好了准备!