您好,登錄后才能下訂單哦!
第九部分?網絡服務neutron概述
一、neutron架構
OpenStack的網絡服務neutron是整個OpenStack中最復雜的一個部分,它的基本架構是一個中心服務(neutron-server)外加各種plugins和agents,使用不同的network?provider(網絡提供者,如Linux?Bridge、OpenvSwitch(ovs)等)來實現各種網絡架構,在這之上為實例提供網絡、子網、端口和防火墻等網絡資源。
下圖是neutron的基本架構
可見,neutron采用分布式架構,由多個組件(子服務)共同對外提供網絡服務。
neutron?server
對外提供OpenStack網絡API,接收請求,并調用Plugin處理請求。
下圖是neutron?server的結構圖
neutron?server包括兩部分
1. 提供API服務;2.?調用Plugins。
Core API
對外提供管理network, subnet和 port的RESTful API。
Extension API
對外提供管理 router, load balance, firewall等資源的RESTful API。
Commnon Service
認證和校驗 API 請求。
Neutron Core
Neutron server的核心處理程序,通過調用相應的Plugin處理請求。
Core Plugin API
定義了Core Plugin的抽象功能集合,Neutron Core通過該API調用相應的Core Plugin。
Extension Plugin API
定義了Service Plugin的抽象功能集合,Neutron Core通過該API調用相應的Service Plugin。
Core Plugin
實現了Core Plugin API,在數據庫中維護network, subnet和port的狀態,并負責調用相應的agent在network provider上執行相關操作,比如創建network。
Service Plugin
實現了Extension Plugin API,在數據庫中維護router, load balance, security group等資源的狀態,并負責調用相應的agent在network provider上執行相關操作,比如創建router。
plugin
處理neutron?server發來的請求,維護OpenStack邏輯網絡的狀態,并調用Agent處理請求,實現“提供什么網絡(what)”的功能。
plugin按照功能分為兩類: core plugin和service plugin。
core plugin:維護neutron的netowrk, subnet和port相關資源的信息,與core plugin對應的agent包括linux bridge, OVS等;
service plugin:提供dhcp、routing, firewall, load balance等服務,也有相應的agent。
agent
處理Plugin的請求,負責在network?provider上真正實現各種網絡功能,實現“怎么提供網絡(how)”的功能。
network?provider
提供網絡服務的虛擬或物理網絡設備,例如Linux?Bridge,Open?vSwitch等。
Queue
Neutron Server,Plugin和Agent之間通過Messaging Queue消息隊列通信和調用。
Database
存放OpenStack的網絡狀態信息,包括Network, Subnet, Port, Router等。
二、neutron的工作原理
下一節要在neutron中使用linux bridge這一種network provider來提供網絡服務,那么,它是怎樣實現的呢?
根據上面neutron?server的分層模型,要想使用這種network?provider,需要安裝兩個東西: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網絡功能。通常位于計算節點或者網絡節點。
同樣道理,如果使用的network?provider是open?vSwitch,那么只需要安裝 open vswitch plugin 和 open vswitch agent就行了。
可見,plugin,agent和network provider是配套使用的,比如上面的network provider是linux bridge,那么就得使用linux bridge的plugin和agent;如果network provider換成了OVS或者物理交換機,plugin和agent也得替換。
這就造成一個問題:所有network provider的plugin都要編寫一套非常類似的數據庫訪問代碼。
為了解決這個問題,neutron實現了一個叫ML2(Modular Layer 2)plugin,對plugin的功能進行抽象和封裝。
有了ML2 plugin,各種 network provider 無需開發自己的plugin,只需要針對 ML2 開發相應的driver就可以了。
三、ML2(Modular Layer 2)plugin
Moduler Layer 2(ML2)是Neutron?在Havana 版本(H版本)實現的一個core plugin,用于替代原有的linux bridge plugin和open vswitch plugin,并一直沿用至今。
ML2 提供了一個框架,允許在OpenStack網絡中同時使用多種Layer 2網絡技術,不同的節點可以使用不同的網絡實現機制。
采用ML2 plugin后,可以在不同節點上分別部署linux bridge agent, open vswitch agent, hyper-v agent以及其他第三方agent。
ML2 對二層網絡進行抽象和建模,引入了type driver和mechansim driver。這兩類driver解耦了 Neutron 所支持的網絡類型(type)與訪問這些網絡類型的機制(mechanism),其結果就是使得ML2具有非常好的彈性,易于擴展,能夠靈活支持多種type和 mechanism。?
type?driver
Neutron 支持的每一種網絡類型都有一個對應的ML2 type driver。 type driver 負責維護網絡類型的狀態,執行驗證,創建網絡等。?
ML2 支持的網絡類型包括 local, flat, vlan, vxlan 和 gre。
Mechansim Driver
Neutron 支持的每一種網絡機制都有一個對應的ML2 mechansim driver。 mechanism driver負責獲取由type driver維護的網絡狀態。
mechanism driver 有三種類型:
Agent-based:包括linux bridge, open vswitch等。
Controller-based:包括OpenDaylight, VMWare NSX等。
基于物理交換機:包括 Cisco Nexus, Arista, Mellanox 等。?
比如要創建一個type driver為 vlan,mechansim driver為 linux bridge的network vlan100,那么:
vlan type driver會確保將vlan100的信息保存到neutron 數據庫中,包括network 的名稱,vlan ID等;linux bridge mechanism driver會確保節點上的linux brige agent在物理網卡上創建ID為100的vlan設備和bridge設備,并將兩者進行橋接。
linux bridge和open vswitch的 ML2 mechanism driver的作用是配置各節點上的虛擬交換機。
四、service?plugin/agent
Service Plugin及其 Agent提供更豐富的擴展功能,包括dhcp、路由,load balance,firewall等
DHCP
dhcp agent通過dnsmasq為實例提供dhcp服務。
Routing
l3 agent可以為 project(租戶)創建router,提供neutron subnet之間的路由服務。路由功能默認通過IPtables實現。
Firewall
l3 agent 可以在router上配置防火墻策略,提供網絡安全防護。
Security Group
另一個與安全相關的功能是Security Group,也是通過IPtables實現。
Firewall與Security Group的區別在于:
Firewall 安全策略位于router,保護的是某個project 的所有network。
Security Group 安全策略位于實例,保護的是單個實例。
Load Balance
neutron默認通過HAProxy為project中的多個instance提供load balance服務。
?
?
五、neutron管理的網絡資源
neutron可以創建、刪除和修改下面幾種網絡資源
network
network是一個隔離的二層廣播域。neutron支持多種類型的network,包括local,?flat,?VLAN,?VxLAN和GRE。
subnet
subnet是一個IPv4或者IPv6地址段。實例的IP地址從subnet中分配。每個subnet需要定義IP地址的范圍和掩碼。
port
port可以看做虛擬交換機上的一個端口。port上定義了MAC地址和IP地址,當實例的虛擬網卡連接到端口時,port會把ip地址和mac地址分配給虛擬網卡。
在OpenStack中,一個項目(租戶)可以有多個network,一個network可以有多個subnet,一個subnet可以有多個port,一個port屬于一個實例,一個實例可以連接多個port(多網卡)。
六、neutron和nova的交互
網絡服務neutron和計算服務nova是通過neutron-metadata-agent來交互的。
實例在啟動時需要訪問nova-metadata-api服務獲取metadata和userdata,這些data是該實例的定制化信息,比如 hostname,ip,public key等。
通過neutron-metadata-agent,能夠通過網絡訪問到nova-metadata-api 服務,從而獲得實例的定制化信息。該agent讓實例能夠通過dhcp-agent或者l3-agent與nova-metadata-api通信。
七、neutron的物理部署
方案1:控制節點 + 計算節點
控制節點
部署的服務包括:neutron server, core plugin的agent和service plugin的agent。
計算節點
部署core plugin的agent,負責提供二層網絡功能。?
1. core plugin和service plugin已經集成到neutron server,不需要運行獨立的plugin服務。?
2. 控制節點和計算節點都需要部署core plugin 的agent,因為通過該agent控制節點與計算節點才能建立二層連接。
3. 可以部署多個控制節點和計算節點。
方案2:控制節點 + 網絡節點 + 計算節點
在這個部署方案中,OpenStack 由控制節點,網絡節點和計算節點組成。
控制節點
部署neutron server服務。
網絡節點
部署的服務包括:core plugin的agent和service plugin的agent。
計算節點
部署core plugin的agent,負責提供二層網絡功能。
這個方案的要點是將所有的agent從控制節點分離出來,部署到獨立的網絡節點上。
1.控制節點只負責通過neutron server響應API請求。
2.由獨立的網絡節點實現數據的交換,路由以及load balance等高級網絡服務。
3.可以通過增加網絡節點承擔更大的負載。
4.可以部署多個控制節點、網絡節點和計算節點。
該方案特別適合規模較大的OpenStack環境。
八、網絡服務neutron小結
1、neutron通過plugin和agent提供的網絡服務,提供對網絡、子網、端口、防火墻等的管理。
2、plugin位于neutron server,包括core plugin和service plugin。
3、agent位于各個節點,負責實現網絡服務。
4、core plugin提供L2功能,ML2是推薦的plugin。
5、使用最廣泛的L2 agent是linux bridage和open vswitch。
6、service plugin和agent提供擴展功能,包括dhcp, routing, load balance, firewall等。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。