Neutron 架构 - 每天5分钟玩转 OpenStack(67)
前面我們討論了 Neutron 的基本概念,今天我們開始分析 Neutron 的架構(gòu)。
Neutron 架構(gòu)
與 OpenStack 的其他服務(wù)的設(shè)計(jì)思路一樣,Neutron 也是采用分布式架構(gòu),由多個(gè)組件(子服務(wù))共同對(duì)外提供網(wǎng)絡(luò)服務(wù)。
Neutron 由如下組件構(gòu)成:
Neutron Server
對(duì)外提供 OpenStack 網(wǎng)絡(luò) API,接收請(qǐng)求,并調(diào)用 Plugin 處理請(qǐng)求。
Plugin
處理 Neutron Server 發(fā)來的請(qǐng)求,維護(hù) OpenStack 邏輯網(wǎng)絡(luò)的狀態(tài), 并調(diào)用 Agent 處理請(qǐng)求。
Agent
處理 Plugin 的請(qǐng)求,負(fù)責(zé)在 network provider 上真正實(shí)現(xiàn)各種網(wǎng)絡(luò)功能。
network provider
提供網(wǎng)絡(luò)服務(wù)的虛擬或物理網(wǎng)絡(luò)設(shè)備,例如 Linux Bridge,Open vSwitch 或者其他支持 Neutron 的物理交換機(jī)。
Queue
Neutron Server,Plugin 和 Agent 之間通過 Messaging Queue 通信和調(diào)用。
Database
存放 OpenStack 的網(wǎng)絡(luò)狀態(tài)信息,包括 Network, Subnet, Port, Router 等。
Neutron 架構(gòu)非常靈活,層次較多,其目的是:
為了支持各種現(xiàn)有或者將來會(huì)出現(xiàn)的優(yōu)秀網(wǎng)絡(luò)技術(shù)。
支持分布式部署,獲得足夠的擴(kuò)展性。
通常魚和熊掌不能兼得,雖然獲得了這些優(yōu)勢(shì),但這樣使得 Neutron 更加復(fù)雜,更不容易理解。 后面我們會(huì)詳細(xì)討論 Neutron 的各個(gè)組件,但在這之前,非常有必要先通過一個(gè)例子了解這些組件各自的職責(zé)以及是如何協(xié)同工作。
以創(chuàng)建一個(gè) VLAN100 的 network 為例,假設(shè) network provider 是 linux bridge, 流程如下:
Neutron Server 接收到創(chuàng)建 network 的請(qǐng)求,通過 Message Queue(RabbitMQ)通知已注冊(cè)的 Linux Bridge Plugin。
Plugin 將要?jiǎng)?chuàng)建的 network 的信息(例如名稱、VLAN ID等)保存到數(shù)據(jù)庫中,并通過 Message Queue 通知運(yùn)行在各節(jié)點(diǎn)上的 Agent。
Agent 收到消息后會(huì)在節(jié)點(diǎn)上的物理網(wǎng)卡(比如 eth2)上創(chuàng)建 VLAN 設(shè)備(比如 eth2.100),并創(chuàng)建 bridge (比如 brqXXX) 橋接 VLAN 設(shè)備。
關(guān)于 linux bridge 如何實(shí)現(xiàn) VLAN 大家可以參考本教程“預(yù)備知識(shí)->網(wǎng)絡(luò)虛擬化”的相關(guān)章節(jié)。
這里進(jìn)行幾點(diǎn)說明:
plugin 解決的是 What 的問題,即網(wǎng)絡(luò)要配置成什么樣子?而至于如何配置 How 的工作則交由 agent 完成。
plugin,agent 和 network provider 是配套使用的,比如上例中 network provider 是 linux bridge,那么就得使用 linux bridge 的 plungin 和 agent;如果 network provider 換成了 OVS 或者物理交換機(jī),plugin 和 agent 也得替換。
plugin 的一個(gè)主要的職責(zé)是在數(shù)據(jù)庫中維護(hù) Neutron 網(wǎng)絡(luò)的狀態(tài)信息,這就造成一個(gè)問題:所有 network provider 的 plugin 都要編寫一套非常類似的數(shù)據(jù)庫訪問代碼。為了解決這個(gè)問題,Neutron 在 Havana 版本實(shí)現(xiàn)了一個(gè) ML2(Modular Layer 2)plugin,對(duì) plgin 的功能進(jìn)行抽象和封裝。有了 ML2 plugin,各種 network provider 無需開發(fā)自己的 plugin,只需要針對(duì) ML2 開發(fā)相應(yīng)的 driver 就可以了,工作量和難度都大大減少。ML2 會(huì)在后面詳細(xì)討論。
plugin 按照功能分為兩類: core plugin 和 service plugin。core plugin 維護(hù) Neutron 的 netowrk, subnet 和 port 相關(guān)資源的信息,與 core plugin 對(duì)應(yīng)的 agent 包括 linux bridge, OVS 等; service plugin 提供 routing, firewall, load balance 等服務(wù),也有相應(yīng)的 agent。后面也會(huì)分別詳細(xì)討論。
以上是Neutron的邏輯架構(gòu),下一節(jié)我們討論 Neutron 的物理部署方案。
總結(jié)
以上是生活随笔為你收集整理的Neutron 架构 - 每天5分钟玩转 OpenStack(67)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP三次握手、糊涂窗口、粘包问题
- 下一篇: 网络安全(1)-身份认证