SHIHUC

好记性不如烂笔头,还可以分享给别人看看! 专注基础算法,互联网架构,人工智能领域的技术实现和应用。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

openstack(liberty):部署实验平台(一,基础网络环境搭建)

Posted on 2016-02-01 10:48  shihuc  阅读(1787)  评论(0编辑  收藏  举报

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 [root@fedora1 ~]# iptables -t nat -A POSTROUTING -s 192.168.1.100 -j SNAT --to-source a.b.c.d
1 [root@fedora1 ~]# iptables -t nat -I POSTROUTING -s 192.168.1.110 -j SNAT --to-source a.b.c.d
1 [root@fedora1 ~]# iptables -t nat -I POSTROUTING -s 192.168.1.120 -j SNAT --to-source a.b.c.d
1 [root@fedora1 ~]# iptables -t nat -I POSTROUTING -s 192.168.1.130 -j SNAT --to-source a.b.c.d

配置完成后,查看下iptables的snat信息如下:

 1 [root@fedora1 ~]# 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 [root@fedora1 ~]# 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 [root@fedora1 ~]# 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,是可以打开的:

[root@node0 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

 

到此,我的网络基础连接已经完成,为继续前行做好了准备!