- openStack核心元件的工作流程
- 1. Keystone
- 1.1 User
- 1.2 Credentials
- 1.3 Authentication
- 1.4 Token
- 1.5 Project
- 1.6 Service
- 1.7 Endpoint
- 1.8 Role
- 1.9 keystone綜述
- 2. glance
- 2.1 glance-api
- 2.2 glance-registry
- 2.3 backend
- 2.4 glance綜述
- 3. placement
- 4. nova
- 4.1 nova-api
- 4.2 nova-scheduler
- 4.3 nova-compute
- 4.4 nova-conductor
- 4.5 nova-console
- 4.6 nova綜述
- 5. Neutron
- 5.1 網路的實現方式
- 5.1 local
- 5.2 flat
- 5.3 vlan
- 5.4 vxlan
- 5.5 GRE
- 1. Keystone
openStack核心元件的工作流程
核心服務就是如果沒有它,OpenStack 就跑不起來。很顯然
- Nova 管理計算資源,是核心服務。
- Neutron 管理網路資源,是核心服務。
- Glance 為 VM 提供 OS 映象,屬於儲存範疇,是核心服務。
- Cinder 提供塊儲存,VM怎麼也得需要資料盤吧,是核心服務。你如果只是做測試,資料不需要落盤,也是可以不裝Cinder的
- Keystone 認證服務,沒它 OpenStack 轉不起來,是核心服務。
- Horizon 大家都需要一個操作介面吧。
1. Keystone
作為openStack的基礎服務,Keystone主要做下面這3件事情
- 管理使用者及其許可權
- 維護 OpenStack Services 的 Endpoint
- Authentication(認證)和 Authorization(鑑權)
要弄懂Keystone就得理解下面這些概念
- User
- Credentials
- Authentication
- Token
- Project
- Service
- Endpoint
- Role
1.1 User
User指代任何使用openStack的實體
可以是真正的使用者,也可以是某個程式,openStack為每一個元件都會建立對應的使用者,當User訪問openStack時,Keystone會對其驗證身份
1.2 Credentials
Credentials是User用來證明自己身份的資訊
它可以是:
- 使用者名稱/密碼
- Token
- Api Key
- 其他高階方式
1.3 Authentication
Authentication是Keystone驗證User身份的過程
User訪問openStack時向Keystone提交使用者名稱和密碼形式的Credentials,Keystone驗證透過後會給User簽發一個Token作為後續訪問的Credentials
1.4 Token
Token是由數字和字母組成的字串,User成功Authentication後由Keystone分配給user
- Token用做訪問Service的Credentials
- Service會透過keystone來驗證Token的有效性
- Token的有效期預設為24小時
1.5 Project
Project用於將openStack的資源(計算,儲存,網路)進行分組,隔離
根據openStack服務的物件不同,Project可以是一個客戶、部門或者專案組
這裡請注意:
- 資源的所有權是屬於Project的,而不是User
- 每個User必須掛在Project裡面才能訪問該Project的資源(admin也不例外),一個User可以屬於多個Project
- admin相當於root使用者,具有最高許可權
1.6 Service
OpenStack 的 Service 包括 Compute (Nova)、Block Storage (Cinder)、Object Storage (Swift)、Image Service (Glance) 、Networking Service (Neutron) 等。
每個 Service 都會提供若干個 Endpoint,User 透過 Endpoint 訪問資源和執行操作。
1.7 Endpoint
Endpoint是一個網路上可訪問的地址,通常是一個URL,Service透過Endpoint來暴露自己的API
Keystone負責維護管理每個Service的Endpoint
1.8 Role
安全包含2個部分,一個是認證(Authentication),另一個是鑑權(Authorization)
Authentication解決的是你是誰的問題
Authorization解決的是你能幹什麼的問題
Keystone是藉助Role來實現Authorization的,也就是給Role定義好許可權之後將Role繫結用User,那麼User就擁有這個Role下定義的許可權了
1.9 keystone綜述
所以Keystone的工作流程就是這樣的
- 使用者提交自己的使用者名稱/密碼(也可以為其他方式)給到keystone
- keystone驗證透過之後給使用者返還一個Token
- 使用者拿著這Token透過Endpoint去請求對應的服務
- 被請求的服務將使用者的Token拿到之後交給Keystone驗證是否有效,有效則繼續後續的操作
這個就是keystone的工作流程了,所有的元件和使用者都需要經過keystone,這也證實了openStack沒有Keystone轉不了的說法
2. glance
Glance為虛擬機器提供映象服務,這裡不過多贅述元件的功能,glance有2個服務程序
- glance-api
- glance-registry
- backend
2.1 glance-api
glance-api 是系統後臺執行的服務程序。 對外提供 REST API,響應 image 查詢、獲取和儲存的呼叫。
glance-api 不會真正處理請求。
如果是與 image metadata(後設資料)相關的操作,glance-api 會把請求轉發給 glance-registry;
如果是與 image 自身存取相關的操作,glance-api 會把請求轉發給該 image 的 store backend。
2.2 glance-registry
glance-registry 是系統後臺執行的服務程序。負責處理和存取 image 的 metadata,例如 image 的大小和型別。
2.3 backend
glance本地並不儲存image,真正的image儲存是放在backend中的,預設是本地的檔案系統
2.4 glance綜述
當使用者請求到達glance-api時,glance-api會將請求轉發給對應的服務程序,如:當使用者想要查詢有哪些映象存在時,glance-api就會將請求給到glance-registry處理,處理完成之後再由glance-api將結果返回給到使用者,同樣,儲存的請求就會交給backend去處理,至於你儲存到哪,glance-api是不管的,這個就是glance的工作流程
3. placement
這個元件以前整合在nova之中,現在獨立出來了,他的作用的用來跟蹤硬體的利用率,將收集到的資料提供給後續的nova使用,這個沒啥多說的
4. nova
Compute Service, Nova 是 OpenStack 最核心的服務,負責維護和管理雲環境的計算資源。OpenStack 作為 IaaS 的雲作業系統,虛擬機器生命週期管理也就是透過 Nova 來實現的。
nova有很多子元件,分別是
- nova-api
- nova-scheduler
- nova-compute
- nova-conductor
- nova-console
資料庫和訊息佇列這也是nova所依賴的,但是他們倆並不是nova獨享的。
4.1 nova-api
與glance-api一樣,只負責接受請求,不處理請求,只會將請求接受然後釋出到訊息佇列當中
4.2 nova-scheduler
虛擬機器排程服務,透過placement提供的各項資料再結合各種演算法,打分機制來決定虛擬機器最終執行在哪個計算節點上,並將訊息透過訊息佇列釋出出去
4.3 nova-compute
管理虛擬機器的核心服務,執行在每個計算節點上,nova-compute是實際工作者,他會從訊息佇列中拿到nova-scheduler釋出的訊息,然後來建立虛擬機器,每個虛擬機器的狀態都是需要寫入資料庫的,也就是說nova-compute需要經常更新資料庫,但是nova-compute並不能直接運算元據庫,為了安全考慮,由另外一個元件來運算元據庫。
4.4 nova-conductor
nova-compute 經常需要更新資料庫,比如更新虛機的狀態。
出於安全性和伸縮性的考慮,nova-compute 並不會直接訪問資料庫,而是將這個任務委託給 nova-conductor,為什麼說為了安全考慮呢?我們不妨設想一下,現在叢集內有100個計算節點,他們如果能夠直接運算元據庫的話,那麼只有要其中的一臺伺服器被侵入,那麼他是可以直接拿到資料庫操作的許可權的,這樣做風險太大了,所以將更新資料庫的操作交給了nova-conductor這個程序來處理
4.5 nova-console
現在虛擬機器建立好了,我們是不是需要使用虛擬機器呢?假設現在網路不通,無法透過ssh或者RDP連線到虛擬機器,那我們如何去管理呢?也就是透過nova-console為我們提供的控制檯,nova-console是一個統稱,並不是某一個服務。
它包含3種方式的控制檯:
- nova-novncproxy,基於 Web 瀏覽器的VNC 訪問
- nova-spicehtml5proxy,基於HTML5 瀏覽器的 SPICE 訪問
- nova-xvpnvncproxy,基於 Java 客戶端的 VNC 訪問
4.6 nova綜述
當有一個建立虛擬機器的請求到達nova-api時,nova-api會將請求傳送到訊息佇列,此時nova-scheduler從訊息佇列讀取訊息,然後選舉一個最適合建立虛擬機器的節點,然後將結果再透過訊息佇列釋出出去,nova-compute從訊息佇列中讀取到了訊息之後開始幹活,並將虛擬機器的狀態資訊釋出到訊息佇列,然後nova-conductor讀取到了nova-compute釋出的訊息之後去運算元據庫修改對應的資料
5. Neutron
Neutron 為整個 OpenStack 環境提供網路支援,包括二層交換,三層路由,負載均衡,防火牆和 VPN 等。
Neutron 提供了一個靈活的框架,透過配置,無論是開源還是商業軟體都可以被用來實現這些功能。
關於網路的話我們就不討論他的工作流程了。我們來聊聊他的實現方式
5.1 網路的實現方式
neutron透過在每個節點上模擬一個軟路由出來,跑在該節點上的虛擬機器都接到這個軟路由上,這樣同節點的虛擬機器網路就實現了互通,那不同節點之間呢?模擬出來的軟路由也不能夠直接跨主機通訊吧,這個時候就需要藉助到物理網路卡了,我們配置neutron的時候,有一個配置是將某個網路卡給neutron去使用的,所以,在同一節點內,所有的虛擬機器都連線上這個軟路由實現互聯,不同節點之間透過配置的物理網路卡來實現互聯,這樣一套操作下來,所有的網路就都能打通了。這也就是neutron的實現方式,但是neutron又提供了好種網路型別,接下來我們來一個個看
Neutron提供的網路有這幾種:
5.1 local
local型別的網路與其他節點的網路隔離,也就是說local型別的網路只能夠與跑在同一節點上的虛擬機器進行通訊,無法跨主機通訊,這種網路是沒有意義的,實驗環境都沒有太大的意義。
5.2 flat
flat網路是無vlan tag的網路,能夠與其他節點的虛擬機器互聯,但是無法實現隔離,如果叢集內節點過多,那麼相應的,廣播域也就越大,這種型別的網路在local網路之上做到了與其他節點互聯
5.3 vlan
這個網路型別就是網路裡的Vlan,交換機可以透過不同的Vlan ID來實現隔離,可以這樣去理解,Vlan就是在flat網路之上給每個人分一個組,只有在同一個組裡面的虛擬機器才可以互相訪問,在不同的組就訪問不到,這樣就解決了flat網路的廣播域過大的問題。最多可以支援4094個分組
5.4 vxlan
VLAN有4096個ID,而VXLAN有1600萬個ID。這也就意味著vxlan支援隔離更多的區域,但是vxlan是工作在三層的,使用upd協議進行傳輸,而vlan是一個二層的,由於需要進行封裝和解封裝操作,效能開銷比VLAN高,但可以透過硬體解除安裝來最佳化效能。
5.5 GRE
gre 是與 vxlan 類似的一種 overlay 網路。主要區別在於使用 IP 包而非 UDP 進行封裝。