轉載, 原文地址: http://www.aboutyun.com/forum.php?mod=viewthread&tid=9537&highlight=Neutron%2B%2B%C8%EB%C3%C5
問題導讀
1.Openstack網絡組件的經歷了幾個過程?
2.Neutron主要有哪幾部分組成?各自的作用是什麼?
3.虛擬網絡上的數據包的處理由誰來完成?
本文將會涵蓋如下幾個部分:
- Openstack網絡組件的發展歷程
- Neutron的結構
- Neutron Server的結構
- Neutron的配置
1 Openstack網絡組件的發展歷程
1.1 nova-network
Openstack在2010年正式發佈它的第一個版本Austin的時候,nova-network作爲它的核心組件被包含其中。nova-network的功能主要有:
IP地址分配 包含爲虛擬主機分配私有(固定)和浮動IP地址。
網絡模型與管理 提供了虛擬網絡使虛擬主機之間以及與外部網絡通信。網絡模型分爲以下三種。這三種模型可以共存在一個雲系統中,但是在一個計算節點上只能配備一種模型。
扁平網絡 (Flat Network):在創建虛擬主機時,nova-network會從指定子網中取一個空閒IP並將它寫入此虛擬主機的配置文件。在一個子網內的虛擬主機可以通過創建Linux橋實現互通。
帶DHCP功能的扁平網絡 (Flat DHCP Network):顧名思義,此種模式相對於扁平網絡加入了DHCP功能。在創建虛擬主機時,nova-network會在指定的子網中爲此虛擬主機分配IP和物理地址,並將這些信息告知DHCP服務器(默認是dnsmasq)。DHCP服務器會監聽虛擬主機所在的橋。當有虛擬主機啓動時,會自動從DHCP服務器獲得IP。可以看到DHCP服務器只是按照nova-network給定的列表(IP和物理地址)分發IP,如何分配還是nova-network說了算。
VLAN網絡 (VLAN Network):這是nova-network的默認模型。針對每個項目(Project,如今Openstack把項目改稱租戶
-- Tenant),都會對應一個vlan。每個項目裏的私有IP地址只能在本項目的vlan裏訪問。與項目對應的vlan需要子網,這個子網是由管理員動態分配給項目的。與帶DHCP功能的扁平網絡類似,子網內的IP地址也是通過DHCP服務器分發的。所有在一個子網內的虛擬主機都通過網橋互通。
安全控制 主要通過ebtables和iptables來實現。
1.2 Quantum
Quantum是隨Openstack的Folsom版本正式發佈的,其實它已經作爲試用組件包含在之前的Essex版本中。在Grizzly裏功能得到了增強。
爲什麼引入Quantum?答案非常簡單,Quantum功能更強大,滿足更多需求。下面列幾條主要功能。
- 提供面向租戶的API,以便控制2層網絡和管理IP地址
- 支持插件式網絡組件,像Open vSwitch,Cisco,Linux Bridge,Nicira NVP等等
- 支持位於不同的2層網絡的IP地址重疊
- 支持基本的3層轉發和多路由器
- 支持隧道技術(Tunneling)
- 支持3層代理和DHCP代理的多節點部署,增強了擴展性和可靠性
- 提供負載均衡API (試用版本)
1.3 Neutron
因爲商標侵權的原因,Openstack在Havana版本上將Quantum更名爲Neutron,所以Neutron並不是什麼新的東西。在Havana版裏,Neutron也只增加和增強了少數功能。
- 提供穩定的負載均衡API
- 支持端到端的IPSec VPN
- 面向租戶的防火牆服務
- 提供一個新的插件ML2,這個插件可以作爲一個框架同時支持不同的2層網絡
現在很多已部署的Openstack雲還在繼續使用nova-network,因爲它簡單,穩定,尤其是多節點部署的可擴展性和可靠性讓人不願割捨。但是我們必須考慮往Neutron上遷移了,最新版Icehouse(還未發佈)中的nova-network將會被列爲過期組件,雖然系統還支持,但不建議使用了。
接下來我們一起來看看Neutron,本人精力在諮詢、架構和部署,所以對源碼實現我們不會涉及。
2 Neutron的結構
Openstack的設計理念是把所有的組件當做服務來註冊的。 Neutron就是網絡服務。它將網絡、子網、端口和路由器抽象化,之後啓動的虛擬主機就可以連接到這個虛擬網絡上,最大的好處是這些都可視化的在Horizon裏得到了實現,部署或者改變一個SDN變得非常簡單,沒有專業知識的人稍經培訓也可以做到。
我們先通過如下一個簡單的流程來了解客戶機如何連接到網絡上。
- 租戶創建了一個網絡,比方說mynet
- 租戶爲此網絡分配一個子網,比如192.168.122.0/24
- 租戶啓動一個客戶機,並指明一個網口連接到mynet
- Nova通知Neutron並在mynet上創建一個端口,如port1
- Neutron選擇並分配一個IP給port1
- 客戶機通過port1就連接到了mynet上
Neutron主要有以下幾部分組成。
Neutron Server: 這一部分包含守護進程neutron-server和各種插件neutron-*-plugin,它們既可以安裝在控制節點也可以安裝在網絡節點。neutron-server提供API接口,並把對API的調用請求傳給已經配置好的插件進行後續處理。插件需要訪問數據庫來維護各種配置數據和對應關係,例如路由器、網絡、子網、端口、浮動IP、安全組等等。
插件代理 (Plugin Agent):
虛擬網絡上的數據包的處理則是由這些插件代理來完成的。名字爲neutron-*-agent。在每個計算節點和網絡節點上運行。一般來說你選擇了什麼插件,就需要選擇相應的代理。代理與Neutron Server及其插件的交互就通過消息隊列來支持。
DHCP代理(DHCP Agent):
名字爲neutron-dhcp-agent,爲各個租戶網絡提供DHCP服務,部署在網絡節點上,各個插件也是使用這一個代理。
3層代理 (L3 Agent):
名字爲neutron-l3-agent, 爲客戶機訪問外部網絡提供3層轉發服務。也部署在網絡節點上。
下面這張圖取自官網,很好的反映了Neutron內部各部分之間的關係。(SDN服務在這裏是額外的外部功能,可以暫時略過。)
3 Neutron Server的結構
下面我們來細看一下Neutron Server的結構。
這張圖中我們只看Quantum-common和Quantum Plugin部分,其實就是Neutron Server。
上面我們已提到,Neutron最重要的就是兩部分:API和插件。
3.1 API
API又分爲兩個部分。
API Core:暫且稱之爲API核。它可以看做是插件功能的最小集合,即每個插件都必須有的功能,也就是對網絡、子網和端口的查詢、加刪和更新操作等。
API Extensions:暫稱之爲API擴展。它們一般是針對具體插件實現的,這樣租戶就可以利用這些插件獨特的功能,比方說訪問控制(ACL)和QoS。
需要提一下的是,現在API核具備的功能還都很簡單,隨着Neturon的不斷成熟,它可能就會納入一些API擴展中的功能。
當然API部分也負責Neutron服務的啓動、客戶請求和相應回覆的打包和派發以及驗證數據格式及其正確性。也有一些安全和穩定機制,比方說對API請求的限制以防止DOS攻擊來保證服務在大負載下的可用性。
至於驗證和授權功能,相信大家都已瞭解,就是與Keystone結合,進行用戶或租戶級的使用控制。
3.2 插件
下面我們再來看一下插件。
從功能上說,插件一般有以下內容。
- 存儲當前邏輯網絡的配置信息,這就需要一個數據庫,比方說MySQL
- 判斷和存儲邏輯網絡和物理網絡的對應關係,比方說爲一個邏輯網絡選擇一個vlan
- 與一種或多種交換機通信來實現這種對應關係。這一般通過宿主機上的插件代理來實現這種操作,或者遠程登錄到交換機上來配置。
以Open vSwitch爲例,下面列出了插件需要訪問的數據表。
4 Neutron的配置
Neutron的配置應該說是比Openstack的其他組件複雜一點。
常用的配置模型有兩種,
把Neutron Server放在控制節點上,DHCP和L3代理放在網絡節點上,可參考一下官圖。
把Neutron的所有部分放在單獨的網絡節點上。這種方式就是把上圖部署在控制節點中的neutron-server放到網絡節點上。
因爲網絡配置不像網絡使用那麼頻繁,所以通常建議使用第一種方案,沒有必要單獨把neutron-server拿出來。因爲neutron-server是可單獨部署的,我們就拿第二種方案作爲例子。
系統使用ubuntu12.04,軟件的安裝我們就不說了,這裏我們採用Open vSwitch插件。(針對虛擬交換機Open vSwitch,Neutron建議是使用ML2插件的,但這裏我們爲了加深對插件和插件代理的理解,還是沿用了OpenvSwitch插件)。
4.1 計算節點的配置
安裝完軟件包以後,計算節點應該就有OpenvSwitch的代理在運行,使用ps命令可以看到如下進程。
這裏我們可以看到代理讀取了2個配置文件。
neutron.conf主要需要設置如下幾項:
neutron.conf會默認包含另一個配置文件api-paste.ini,對它只需添加keystone信息。
4.2 網絡節點的配置
安裝完軟件後,網絡節點應該會有如下進程在運行。
你會看到每個部分會用到哪個配置文件。
neutron.conf和api-paste.ini的配置與計算節點上是一樣的。
dhcp_agent.ini的主要設置以下幾項。看內容可理解其意義。
metadata_agent.ini的設置主要是keystone相關的。
l3_agent.init的設置。
ovs_neutron_plugin.ini的配置和計算節點上的一樣。
4.3 節點上OVS的配置
計算節點和網絡節點的NIC配置非常相似,我們都是用第二個NIC(eth1)作爲內部網絡的通訊。以網絡節點爲例。eth1不能設置IP地址,而是把IP地址給虛擬橋。
OVS中把eth1放到虛擬橋上。
5 結束語
Neutron是openstack的方向,我們有必要花點時間研究一下它。目前對它的擔心還是有的,比方說穩定性、可用性,還有性能(以後有機會探討),但它的靈活性、多功能性是無可比擬的。
相關內容:
Openstack之neutron入門(一)
Openstack之neutron入門二