天天看點

openstack如何支援vlan trunk功能

      大多數場景下,主機收發的是不帶tag的封包,但是在實際環境中,無論是windows還是Linux環境都通過各自的方法可以收發帶有vlan tag的封包。 而一個虛機要想接收不同vlan tag的封包,則需要在虛機上接入不同網絡,就意味着在虛機上多一個虛拟網卡,這樣如果很多vlan就會有很多接口,管理起來很不友善。尤其在NFV場景中,虛機充當了一個虛拟網絡裝置,是以接收多個vlan tag的封包就是硬性需求。是以openstack建立的虛機中,能接收帶有vlan tag的封包這個需求就更加迫切了。

      為了解決這個問題,openStack 先後出了兩個方案,一個方案是Neutron VLAN Transparency,另一個方案是VLAN aware VMs。

     (一) Neutron VLAN Transparency

       在openstack kilo版本特性,VLAN trunking networks for NFV。該功能是802.1ad協定,而當時openvswitch是不支援802.1ad的,是以當時這個功能釋出的主要針對一個SDN網絡組建。該功能不需要修改配置,隻需要在建立network的時候,增加一個參數vlan-transparent=True即可,driver支援就支援,不支援傳回來“Backend does not support VLAN Transparency.”。

         按是實際上openvswitch在2.8版本(2017年)後,已經支援了802.1ad,詳見https://github.com/openvswitch/ovs/commit/f0fb825a3785320430686834741c718ff4f8ebf4

        雖然更新openvswitch版本後,底層支援了,但是“

Currently VLANs in VMs are not integrated with Neutron. In certain OVS based plugins VMs can only send untagged traffic. This is because OVS currently does not support QinQ. Even if OVS did support QinQ we would need something to integrate VM tagged traffic with rest of Neutron.“ 是以目前來說,社群還沒有使用ovs來很好的支援 VLAN Transparency功能。

    (二)VLAN aware VMs

     OpenStack Newton版本的特性,由VLAN aware VMs定義。标準的802.1Q協定。這個openvswitch早就支援(有多早呢?在ovs 1.3 就開始支援trunk accss等特性)

     需要修改neutron.conf配置,service_plugins=,,,trunk 增加trunk。然後在建立好的network上增加相應的屬性。

     快速步驟:

         1. 修改neutron.conf配置,重新開機neutron-server

         2. 準備網絡,net0(parent-net), net1(subnet) net2等,已經相應子網。

         3. 建立端口,一個vm對應一個parentport,  租戶需要幾個vlan網絡,就需要建立幾個對應的net。

         4. 建立trunk,每一個trunk執行個體中包含一個parentport, 和若幹個其他子接口netport

         5. 建立vm,指定parentport

         6. 在vm内建立子接口接口,支援dhcp自動擷取位址

參考文檔:

 https://www.sdnlab.com/19761.html

 http://specs.openstack.org/openstack/neutron-specs/specs/liberty/vlan-aware-vms.html

https://specs.openstack.org/openstack/neutron-specs/specs/liberty/vlan-aware-vms.html

繼續閱讀