openStack核心元件的工作流程

FuShudi發表於2024-07-16

目錄
  • 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

openStack核心元件的工作流程

核心服務就是如果沒有它,OpenStack 就跑不起來。很顯然

  1. Nova 管理計算資源,是核心服務。
  2. Neutron 管理網路資源,是核心服務。
  3. Glance 為 VM 提供 OS 映象,屬於儲存範疇,是核心服務。
  4. Cinder 提供塊儲存,VM怎麼也得需要資料盤吧,是核心服務。你如果只是做測試,資料不需要落盤,也是可以不裝Cinder的
  5. Keystone 認證服務,沒它 OpenStack 轉不起來,是核心服務。
  6. Horizon 大家都需要一個操作介面吧。

1. Keystone

作為openStack的基礎服務,Keystone主要做下面這3件事情

  1. 管理使用者及其許可權
  2. 維護 OpenStack Services 的 Endpoint
  3. 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用來證明自己身份的資訊

它可以是:

  1. 使用者名稱/密碼
  2. Token
  3. Api Key
  4. 其他高階方式

1.3 Authentication

Authentication是Keystone驗證User身份的過程

User訪問openStack時向Keystone提交使用者名稱和密碼形式的Credentials,Keystone驗證透過後會給User簽發一個Token作為後續訪問的Credentials

1.4 Token

Token是由數字和字母組成的字串,User成功Authentication後由Keystone分配給user

  1. Token用做訪問Service的Credentials
  2. Service會透過keystone來驗證Token的有效性
  3. Token的有效期預設為24小時

1.5 Project

Project用於將openStack的資源(計算,儲存,網路)進行分組,隔離

根據openStack服務的物件不同,Project可以是一個客戶、部門或者專案組

這裡請注意:

  1. 資源的所有權是屬於Project的,而不是User
  2. 每個User必須掛在Project裡面才能訪問該Project的資源(admin也不例外),一個User可以屬於多個Project
  3. 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的工作流程就是這樣的

  1. 使用者提交自己的使用者名稱/密碼(也可以為其他方式)給到keystone
  2. keystone驗證透過之後給使用者返還一個Token
  3. 使用者拿著這Token透過Endpoint去請求對應的服務
  4. 被請求的服務將使用者的Token拿到之後交給Keystone驗證是否有效,有效則繼續後續的操作

這個就是keystone的工作流程了,所有的元件和使用者都需要經過keystone,這也證實了openStack沒有Keystone轉不了的說法

2. glance

Glance為虛擬機器提供映象服務,這裡不過多贅述元件的功能,glance有2個服務程序

  1. glance-api
  2. glance-registry
  3. 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有很多子元件,分別是

  1. nova-api
  2. nova-scheduler
  3. nova-compute
  4. nova-conductor
  5. 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種方式的控制檯:

  1. nova-novncproxy,基於 Web 瀏覽器的VNC 訪問
  2. nova-spicehtml5proxy,基於HTML5 瀏覽器的 SPICE 訪問
  3. 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 進行封裝。

相關文章