Openstack的nova-network的vlan模式扩展

系统 1815 0

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
      
    

 


即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到达实例。

 

最后,原来这是一个nova官方已发现的bug:

https://bugs.launchpad.net/nova/+bug/1288609

修改方法就不一样了。

Openstack的nova-network的vlan模式扩展


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论