本系列文章同步發布於筆者網站
上一篇介紹了歷史最悠久的 OpenStack 元件 Nova,這篇要來介紹目前 OpenStack 中算是最核心的元件,Keystone
官方文件中是這樣敘述的:
Keystone 是一個 OpenStack 服務,通過實現 OpenStack 的 Identity API 來提供 API 客戶端認證、服務發現 (service discovery) 和分散式多租戶授權 (distributed multi-tenant authorization)。
簡單來講,你可以把它當成 OpenStack 中的認證服務,並且記錄了所有 OpenStack API 的所在位置 (endpoint)。
Keystone 是由多個不同的內部服務 (internal service) 組成,而這些服務通常是組合在一起使用。例如:一個認證的請求首先會透過 Identity 服務驗證使用者提供的 credentials,成功後透過 Token 服務生成一個 token 給使用者。
Keystone 包含了以下服務:
我們將一一介紹這些服務的功能。
Identiy 服務提供使用者和群組 credential 的驗證服務。在最基本的狀況下這些 credential 資料會由 Identity 服務儲存在後端的資料庫,在比較複雜的情況下使用者可以選擇利用不同的後端來提供服務,例如 LDAP 等。
使用者基本上代表了一個獨立的 API 用戶。使用者必須在特定的 domain 底下,預設會在 default,而所有使用者的名稱並不是全域唯一的,但是在相同 domain 下是。
群組顧名思義就是一群使用者個集合。同樣的群組也是必須在 domain 底下,並且不是全域唯一的,而在相同 domain 下才是。
資源服務提供有關 project 和 domain 的資料。
Projects 代表代表 OpenStack 中所有權的基本單位,因為 OpenStack 中的所有資源都應由特定 project 擁有。與使用者和群組相同 Project 本身必須由特定 domain 擁有,因此所有 Project 名稱都不是全局唯一的,而是其 domain 中唯一的。
Domain 是 projects, user 跟群組的上層容器。 每個上述資源都由一個 domain 擁有。 每個 domain 定義一個 namespace,其中存在 API 可見的 name attribute。 Keystone 提供了一個預設 Domain,Default。Keystone 中大部分的屬性 (attributes) 都只有在其 domain 下為唯一。
Domain 的概念相對複雜一點,通常在比較小型的部屬都只會使用 default Domain,但是在比較大型的部屬可能會使用多個 domain 區分權限。
Assignment 服務提供 role 跟 role assignments 的資料,達成 OpenStack 的 RBAC (Role Based Access Control)。
實際的權限管理可以在各個 OpenStack 元件的 policy.yaml 設定檔進行管理。
角色決定了使用者可以獲得的授權級別。 可以在 domain 或 project level 授予角色。角色可以授予給使用者或是群組,而群組中的使用者會繼承群角色所擁有的權限。
記錄實際角色跟資源關係的資料,是個具有角色,資源,和身分 (Identity) 的 3 元組 (tuple)。
在使用者經過驗證後會發予一個 token,後續對服務的群取會透過 token 做權限驗證。Token 服務就是管理跟驗證 token 的服務。
Catalog 服務提供了一個用於端點發現 (endpoint discovey) 的端點註冊表 (registry)。基本上記錄了群集中所有 OpenStack 服務的端點。
今天介紹了 OpenStack 服務的核心 Keystone,Keystone 蠻多概念都稍稍抽象一點,但在實際使用過後會比較好懂。下一篇將會介紹 OpenStack Neutron,也就是提供網路的服務。