Openstack的nova-network的vlan模式扩展

openstack的nova-network的vlan模式是可以在安装的时候,将网络划分为多个子网,每个项目一个或者多个子网进行虚拟机创建。 但是他现在代码级别上不支持:如果一开始安装的环境的vlan网段数目太少,后面使用要进行扩展的话容易出现问题。

场景

我们的场景是开始只建立一个vlan网段用于fixed_range(172.17.51.0/24,vlanID:51),num_networks=1,现在我们要加一个网络,vlanId 52,除了在物理交换机上要配置该虚拟网络,计算节点要使用trunk口以外,还需要在openstack集群中使用命令:

nova-manage network create --lable vlan52 --fixed_range_v4  172.17.52.0/24 --vlan 52 --project_id 80c29c88d3c349a78d4ed558e224eac4

执行完成以后,我们使用命令查看:

[root@node-8 ~]# nova-manage network list
id   	IPv4              	IPv6           	start address  	DNS1           	DNS2           	VlanID         	project        	uuid           
1    	172.17.51.0/24    	None           	172.17.51.3    	218.6.200.139  	8.8.4.4        	51             	80c29c88d3c349a78d4ed558e224eac4	e8df9310-ba2c-45a8-9645-6d6d045da71e
14   	172.17.52.0/24    	None           	172.17.52.3    	8.8.4.4        	None            53              80c29c88d3c349a78d4ed558e224eac4	eada580e-cf13-42d5-9c4e-b8e5c61de6d

请注意上面的结论的VlanID的值,虽然我们输入的vlan是52,但是这里的VlanID却是53,为什么? 当然,为什么我在这里纠结这个vlanID呢,因为在网络节点上创建br网桥,vlan都需要这个vlantag来进行数据的封包,如果他不正确,虚拟实例将无法ping到网关,也无法ssh连接。

实际测试中我还建立了其他环境,而那个环境一开始就有4个网络,我们如果指定的vlan是51,那么vlanID的最终数据库存储将是54,结论很明显,我新建立一个vlan,将使用已有的vlan的数量+我输入的vlanID,不明白为什么这样弄,不符合我们新创建的vlan的ID的增加顺序。

源码跟踪:

if CONF.network_manager == 'nova.network.manager.VlanManager':
   1190                 vlan = kwargs.get('vlan', None)
   1191                 print kwargs
   1192                 if not vlan:
   1193                     print num_used_nets
   1194                     index_vlan = index + num_used_nets
   1195                     print index_vlan
   1196                     #vlan = kwargs['vlan_start']
   1197                     vlan = kwargs['vlan_start'] + index_vlan
   1198                     used_vlans = [x['vlan'] for x in nets]
   1199                     print used_vlans
   1200                     if vlan in used_vlans:
   1201                         # That vlan is used, try to get another one
   1202                         used_vlans.sort()
   1203                         vlan = used_vlans[-1] + 1

这是/usr/lib/python/site-package/nova/network/manager.py的内容,而vlanID不正确也正是这段代码导致的.这里我了几个print。执行我们前面的创建虚拟网络的命令,将打印:

...
1
1
[51L]
...

即index_vlan=1,used_vlans=[51L], 修改方法: 将1197行的vlan=kwargs['vlan_start']+index_vlan修改为vlan=kwargs['vlan_start'] 将原来创建的网络关联删除,使用命令:

nova network-disassociate network-id
nova-manage network delete network-id

重新执行网络创建命令,将可以得到正确的vlanID,而且还能在后续的虚拟机创建后,虚拟机能使用该fixed_range到达实例。

最后,发现这是一个官方的bug列表里已经有人提出了的: https://bugs.launchpad.net/nova/+bug/1288609

根据官网的的修改方法: 修改/usr/lib/python/site-package/nova/network/manager.py 的1189行,该vlan = kwargs.get('vlan', None)为vlan = kwargs.get('vlan_start', None)

patch地址:https://review.openstack.org/#/c/99692/

转载于:https://www.cnblogs.com/CLTANG/p/4332553.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值