Openstack的nova-network的vlan模式擴充套件

CL.TANG發表於2014-07-22

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

修改方法就不一樣了。

相關文章