openstack 最复杂的部分是网络,这两天调试了网络问题,解决经验值得记录备用

我的需求是在学生实践中需要在openstack环境的虚拟机中再构建openstack环境,以供实践实习使用,

openstack 外网创建失败 openstack创建内部网络_d3


构建基础是:

三个网络在外层openstack构建: 

vxlan101  192.168.101.0/24    外层openstack的虚拟vxlan网络  接入外层openstack路由,可以供内层openstack实例访问外网

vxlan103 192.168.103.0/24    外层openstack的虚拟vxlan网络  不连接外层openstack路由,作为内层openstack管理网络

vxlan104 192.168.104.0/24    外层openstack的虚拟vxlan网络 不连接外层openstack路由,作为内层openstack实例租户网络


网络ip分配:(在外层openstack查看)

openstack 外网创建失败 openstack创建内部网络_外网_02


192.168.101.10 是作为内层openstack的租户出口

192.168.101.9 是作为compute1计算节点安装软件直接访问外网使用,安装完也可以删除这个ip接口

注意的是 在vm中虚拟网卡ens3,ens4,ens5对应哪个网络和ip,需要注意看硬件mac地址,才能对应上,这个是先加入的接口是ens3,接着是ens4,如果你删掉ens3, 在重新加入接口,原来的ens4网卡变成了ens3,ens5变成了ens4,原来的ens3重新接入变成了ens5,这个容易引起混乱,要注意

注意比对mac地址确定

在openstack web界面可以查看到

openstack 外网创建失败 openstack创建内部网络_mac地址_03


上图可以查看到ip地址对应的mac地址,对照vm中的地址

openstack 外网创建失败 openstack创建内部网络_d3_04

因为在内层openstack中创建了虚拟网络,ens5不再直接绑定IP地址,而是绑定到了桥上

openstack 外网创建失败 openstack创建内部网络_mac地址_05

可以看到这个mac地址和ip地址绑定到了桥上

我的问题就在于这个桥的mac地址,不是在外层openstack的mac地址,而是内层openstack生成的mac地址,造成内层openstack网络不能和外层的openstack网络联通

openstack 外网创建失败 openstack创建内部网络_d3_06

用了如下命令修正这个网桥的mac地址

ifconfig brqd5d35b37-4b down
ifconfig brqd5d35b37-4b hw ether fa:16:3e:9b:c6:28
ifconfig brqd5d35b37-4b up
router add default gw 192.168.101.1
route -n
或
brctl delif brqd5d35b37-4b ens5
brctl addif brqd5d35b37-4b ens5
systemctl restart networking

查看虚拟路由器路由表

openstack 外网创建失败 openstack创建内部网络_openstack_07


通过修改网桥mac地址,外层openstack定义的网络才能连通这个网桥

另外,注意修改 /etc/neutron/plugins/ml2/ml2_conf.ini文件

网络别名和虚拟网卡的对应关系

openstack 外网创建失败 openstack创建内部网络_mac地址_08

在controller节点,default:ens5是虚拟网络对外出口,public:ens4是租户vxlan网络

还有一点容易忽略,就是内层openstack中定义的外网,分配的内层路由器接口等,要能与外层路由器联通,需要在外层openstack的对应接口注册

如我在外层openstack的虚拟机接口是192.168.101.4 在这台虚拟机上安装内层的openstack,把这个虚拟网卡作为网桥连接内层openstack虚拟路由器,

内层openstack路由器外网接口是192.168.101.202,网桥地址是192.168.101.4,这时,网桥192.168.101.4可以连接外部openstack构建的网络,

但是192.168.101.202在外层openstack网络环境没有注册,不能在外层openstack中使用,导致内层openstack不能路由到外层openstack网络。

解决办法是在外层openstack中注册192.168.101.202

openstack 外网创建失败 openstack创建内部网络_mac地址_09

可以查到内层openstack路由器上接口192.168.101.202 的mac地址

在外层openstack的网络管理中,接口192.168.101.4添加可用地址对,把内层openstack的路由器外网接口加上

openstack 外网创建失败 openstack创建内部网络_openstack_10

到此,外层的openstack的虚拟网络和和实例中构建的内层openstack的虚拟网络可以相互连通了

问题解决。

归结注意两点:

1:虚拟机上构建的内层openstack定义的外网对应的网卡转为网桥后,网桥和关联的网卡 注意mac地址一致。

2:内层openstack的路由器外网接口 ip地址和MAC对 注意要在外层openstack网络定义中注册。