[轉]VLAN aware VMs 介紹

該項目爲社區neutron項目中在Newton版本中的一個重要BP。該BP提供了一種方法如何將VLAN aware VMs納入OpenStack。VLAN aware VMs是指VM通過vNIC發送或者接收帶VLAN標記的報文。VLAN aware VMs(或其他封裝)可以通過不同封裝和ID區分許多網絡的流量,而不是使用許多vNIC。 這個方法擴展到更多數量的網絡,並實現動態處理網絡附件(無需熱插拔vNIC)。

一、應用場景

1.有些應用程序需要連接到許多(比如說,幾百個)neutron網絡。使用單個或少量的vifs,並通過VLAN區分每個網絡的流量,相比每個VM使用數百個VIF來說更加實用。

2.用戶使用雲的時候通常非常動態。添加/刪除VLAN相對來說更有效或更少複雜性,而不是通過VM中的熱插拔網卡。

3.VM可以不卸載掛載網卡達到從一個網絡遷移到另外一個網絡。

4.VM中可能正在運行許多容器。每個容器可能有要求連接到不同的Neutron網絡中。同樣相對於VM添加網卡來說,添加VLANID更有效且更具擴展性。

5.對於用戶來說,之前很多應用程序希望通過vlan作爲連接方式連接多個網絡。

二、北向實現方式

1邏輯結構模型    

          port0爲parent_port,其通信流量爲正常VM流量,不帶tag * port1爲sub_port,其通信流量被封裝,如vlan id 100 * port2爲sub_port,其通信流量被封裝,如vlan id 200

2、API接口擴展

  新增一種trunk的資源對象,其中trunk中存在兩種port:parent_port和sub_port     

  創建trunk的接口示例如下:   

   $ neutron trunk-create --port-id PORT \    

                      [--subportPORT[,SEGMENTATION-TYPE,SEGMENTATION-ID]] \

                      [--subport ...]

 

3.其中trunk與parent_port爲一一對應關係,trunk與sub_port爲一對多關係。

4.parent_port與sub_port均爲真實的port對象且有port的所有屬性,僅是在某些字段表現不同,如binding:host_id

5.其中sub_port的segmentation-type字段當前僅支持vlan類型,segmentation-id爲對應的vlan id

6.nova不感知trunk和sub_port,如創建VM時指定的port-id仍然是parent_port。

7.sub_port與其他獨立的port一樣具有獨立的mac地址,sub_port也可以指定mac創建爲與parent_port相同的mac,但是此時 兩個port不允許在同一個網絡

8.不支持嵌套sub_port

9.刪除trunk自動刪除所有sub_port

10.刪除trunk內的sub_port是禁止的,必須首先從trunk中刪除該sub_port

11.刪除trunk內的parent_port是禁止的,必須首先刪除trunk

三.CLI接口

* trunk-create * trunk-delete * trunk-list * trunk-show [should not print subports] * trunk-subport-add * trunk-subport-delete * trunk-subport-list

四、使用約束

1.同一個trunk下的每個sub_port應具有唯一(segmentation_type,segmentation_id)。

2.parent_port處理“untagged”流量。parent_port將收到所有不匹配subport的數據包,這是不同於VM普通port當前的的行爲。還支持通過 parent_port上設置安全組丟棄所有傳入和傳出的流量。

3.sub_port從parent_port繼承他們的binding:host_id屬性。

4.更新sub_port的binding:host_id會出錯,如通過一個sub_port創建VM。

5.普通租戶僅能添加sub_port到自己的parent_port,admin租戶可以添加到不同的租戶上的parent_port。

6.在OVS支持QinQ之前,基於OVS的Neutron後端不能支持sub_port附加到“vlan_transparent”網絡。這將需要可以通過VLAN標記的子端口傳輸 VLAN標記的流量(嵌套的VLAN),這是不可能的。

5. 數據模型 Neutron port: 無變更 新增trunks表 *id: int主鍵 *uuid * name * tenant_id * port_id: 外鍵→ports.id 新增subports * id * port_id: 外鍵→ports.id * trunk_id: 外鍵→trunks.id * segmentation_type * segmentation_id DB約束: * (segmentation_type, segmentation_id, trunk_id) 在subports表中必須唯一。 *被trunks.port_id引用的ports.id不能被subports.port_id引用,反之亦然

--------------------- 
轉 https://blog.csdn.net/canxinghen/article/details/53457262

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章