Neutron 的架構是非常開放的,可以支持多種 network provider,只要遵循一定的設計原則和規范。本節我們將開始討論這個主題。
先討論一個簡單的場景:在 Neutorn 中使用 linux bridge 這一種 network provider。
根據我們上一節討論的 Neutron Server 的分層模型,我們需要實現兩個東西:linux bridge core plugin 和 linux bridge agent。
linux bridge core plugin
-
與 neutron server 一起運行。
-
實現了 core plugin API。
-
負責維護數據庫信息。
-
通知 linux bridge agent 實現具體的網絡功能。
linux bridge agent
-
在計算節點和網絡節點(或控制節點)上運行。
-
接收來自 plugin 的請求。
-
通過配置本節點上的 linux bridge 實現 neutron 網絡功能。
同樣的道理,如果要支持 open vswitch,只需要實現 open vswitch plugin 和 open vswitch agent。
由此可見:Neutron 可以通過開發不同的 plugin 和 agent 支持不同的網絡技術。這是一種相當開放的架構。
不過隨着支持的 network provider 數量的增加,開發人員發現了兩個突出的問題:
-
只能在 OpenStack 中使用一種 core plugin,多種 network provider 無法共存。
-
不同 plugin 之間存在大量重復代碼,開發新的 plugin 工作量大。
下一節將深入討論這兩個問題的成因以及解決方案。