天天看點

OpenStack入門以及一些資料之(三、Keystone)0、簡介及架構1、基本概念2、元件3、通路流程4、進階參考:

注:本文内容均來自網絡,我隻是在此做了一些摘抄和整理的工作,來源均有注明。

0、簡介及架構

簡介:      Keystone(OpenStack Identity Service)是OpenStack架構中,負責身份驗證、服務規則和服務令牌的功能, 它實作了OpenStack的Identity API。Keystone類似一個服務總線, 或者說是整個Openstack架構的系統資料庫, 其他服務通過keystone來注冊其服務的Endpoint(服務通路的URL),任何服務之間互相的調用, 需要經過Keystone的身份驗證, 來獲得目标服務的Endpoint來找到目标服務。

功能:      使用者資訊管理:user/tenant基本資訊管理;認證服務:登陸認證,各個元件API的權限控制;

架構:

     既然keystone為各個子產品提供認證服務,是以各個子產品與keystone都有所互動。其中登入認證展現在使用者通路各個元件的API時,調用了WSGI架構的authtoken filter,該filter最調用keystoneclient ,最終通過keystone驗證token,完成對使用者的登入認證。如果認證失敗,使用者将不能通路該API。

以nova為例,authtoken filter在/etc/paste.ini目錄中(如果不熟悉WSGI架構,暫且忽略之)

OpenStack入門以及一些資料之(三、Keystone)0、簡介及架構1、基本概念2、元件3、通路流程4、進階參考:
OpenStack入門以及一些資料之(三、Keystone)0、簡介及架構1、基本概念2、元件3、通路流程4、進階參考:

        keystone在openstack的位置如下:

OpenStack入門以及一些資料之(三、Keystone)0、簡介及架構1、基本概念2、元件3、通路流程4、進階參考:

1、基本概念

1. User

   User即使用者,他們代表可以通過keystone進行通路的人或程式。Users通過認證資訊(credentials,如密碼、API Keys等)進行驗證。

2. Tenant

  Tenant即租戶,早期版本又稱為project,它是各個服務中的一些可以通路的資源集合。例如,在Nova中一個tenant可以是一些機器,在Swift和Glance中一個tenant可以是一些鏡像存儲,在Quantum中一個tenant可以是一些網絡資源。Users預設的總是綁定到某些tenant上,使用者通路租戶的資源前,必須與該租戶關聯,并且指定該使用者在該租戶下的角色。

3. Role

  Role即角色,Roles代表一組使用者可以通路的資源權限,例如Nova中的虛拟機、Glance中的鏡像。Users可以被添加到任意一個全局的 或 租戶内的角色中。在全局的role中,使用者的role權限作用于所有的租戶,即可以對所有的租戶執行role規定的權限;在租戶内的role中,使用者僅能在目前租戶内執行role規定的權限。

4. Service

  Service即服務,如Nova、Glance、Swift。根據前三個概念(User,Tenant和Role)一個服務可以确認目前使用者是否具有通路其資源的權限。但是當一個user嘗試着通路其租戶内的service時,他必須知道這個service是否存在以及如何通路這個service,這裡通常使用一些不同的名稱表示不同的服務。在上文中談到的Role,實際上也是可以綁定到某個service的。例如,當swift需要一個管理者權限的通路進行對象建立時,對于相同的role我們并不一定也需要對nova進行管理者權限的通路。為了實作這個目标,我們應該建立兩個獨立的管理者role,一個綁定到swift,另一個綁定到nova,進而實作對swift進行管理者權限通路不會影響到Nova或其他服務。

5. Endpoint

  Endpoint,翻譯為“端點”,我們可以了解它是一個服務暴露出來的通路點,如果需要通路一個服務,則必須知道他的endpoint。是以,在keystone中包含一個endpoint模闆(endpoint template,在安裝keystone的時候我們可以在conf檔案夾下看到這個檔案),這個模闆提供了所有存在的服務endpoints資訊。一個endpoint template包含一個URLs清單,清單中的每個URL都對應一個服務執行個體的通路位址,并且具有public、private和admin這三種權限。public url可以被全局通路(如http://compute.example.com),private url隻能被區域網路通路(如http://compute.example.local),admin url被從正常的通路中分離。

6.  Token

       Token即是信物、令牌,使用者通過使用者名和密碼擷取在某個租戶下的token,通過token,可以實作單點登入。

7.  Credentials

       與user關聯的認證憑據。一個user可能有一個或多個credential,一個credential與某一個project關聯。該術語可以簡單的了解為使用者和密碼。

8.  Domains      表示一組tenants和users的集合。每一個 tenants或user隻能屬于一個domain,但user可以屬于多個tenants。domain有命名空間的概念,即在一個命名空間内的名稱是否是全局唯一。 ( The intent of domain is to define the administrative boundaries for management of Keystone entities. A domain can represent an individual, company, or operator owned space. )

對象之間的關系(舊版本未更新):

OpenStack入門以及一些資料之(三、Keystone)0、簡介及架構1、基本概念2、元件3、通路流程4、進階參考:

下面舉例進行了解:

keystone 裡面的概念很多,有:User,Credentials,Authentication,Token,Tenant,Service,Endpoint,Role。在這麼多概念中,其實最主要的就是 User 和 Tenant 。由于一些安全,服務問題,才引發了其它的概念。

  那什麼叫做 User ,Tenant 呢?這裡我舉個比較好了解的例子。我們去飯店住的時候,

如果把飯店比作為Tenant,住宿的人就是User ,而飯店就是 Tenant,飯店可以提供多種諸如住宿、娛樂、飲食等多種服務(Service),具體來說,住宿是一種具體的服務(Endpoint)。就住宿而言,有普通間和總統套房,如果你的VIP等級(Role)高,你可以享受到豪華的總統套房。入住前,我們需要拿身份證開房(Credential),認證身份證不是冒牌貨後(Authenticaiton),會給你一個房卡(Token),然後你拿着房卡,就可以進入房間和享受各種服務。

User 住飯店的人
Credentials 身份證
Authentication (認證身份證)飯店為了拒絕不必要的人進出飯店,專門設定的機制,隻有擁有鑰匙的人才能進出
Token 房卡
Tenant 飯店
Service 飯店可以提供的服務類别,比如,飲食類,娛樂類
Endpoint 具體的一種服務,比如吃燒烤,打羽毛球
Role VIP 等級,VIP越高,享有越高的權限

2、元件

Keystone包含一個指令行接口,可以與Keystone API互動以管理keystone和相關服務。

keystone - 運作keystone-admin和keystone-service

keystone-admin - 操作keystone的管理API

keystone-service - 用于驗證的,面向使用者的API

keystone-manage - 管理keystone的指令行接口

Keystone還包括WSGI中間件以為Nova和Swift提供驗證服務。

Keystone使用一個内置的SQLite資料庫 - 為驗證使用者,将來也可能使用一個外部LDAP服務來代替存儲證書

中間件(Middleware)

Keystone中間件位于OpenStack服務前面,處理進來的請求驗證。中間件的設計遵循如下的規範。

中間件的源代碼位于Keystone/middleware。

中間件支援兩個接口:WSGI和REST/HTTP。

REST & HTTP API

如果進來一個未經認證的調用,中間件将響應一個401 Unautorized錯誤。根據每HTTP的标準,它也會傳回一個WWW-Authenticate標頭以通知調用者支援哪個協定。對于Keystone驗證,響應的文法格式如下:

WWW-Authenticate: Keystone uri="url to Keystone server"The client can then make the necessary calls to the Keystone server, obtain a token, and retry the call with the token.

令牌使用 X-Auth-Toke標頭傳遞。

WSGI API(標頭)

當成功驗證後中間件經為下行的WSGI應用發送如下標頭:

X-Identity-Status

提供請求是否被驗證的資訊。

X-Tenant

提供了租戶ID(在Keystone中以URL的形式出現)。在Keysotne轉為采用ID/Name模式之前,它為租戶提供了對任意遺留實作的支援。

X-Tenant-Id

唯一不變的租戶ID。

X-Tenant-Name

唯一但可變的租戶名字。

X-User

用于登入的使用者名。

X-Roles

配置設定給使用者的角色。

3、通路流程

以建立一個虛拟機(server)為例,結合下圖簡述下keystone在openstack的通路流程。

         1)使用者Alice通過自己的戶名和密碼向keystone申請token,keystone認證使用者名和密碼後,傳回token1

          2)Alice通過token1發送keystone查詢他所擁有的租戶,keystone驗證token1成功後,傳回Alice的所有Tenant

         3)  Alice選擇一個租戶,通過使用者名和密碼申請token,keystone認證使用者名、密碼、tenant後,傳回token2。(其實1、2步僅僅是為了查詢tenant,如果已經知道tenant,可以忽略1、2步)

         4)Alice通過token2發送建立server的請求,keystone驗證token2(包括該token是否有效,是否有權限建立虛拟機等)成功後,然後再把請求下發到nova,最終建立虛拟機

OpenStack入門以及一些資料之(三、Keystone)0、簡介及架構1、基本概念2、元件3、通路流程4、進階參考:

下面看一個更詳細點的時序圖,是一張老圖,Neutron還叫Quantum:

OpenStack入門以及一些資料之(三、Keystone)0、簡介及架構1、基本概念2、元件3、通路流程4、進階參考:

4、進階

待深入:

[openstack][G版]keystone源碼學習 : http://blog.csdn.net/wangyish201201/article/details/8959104 openstack policy 鑒權過程分析: http://blog.chinaunix.net/uid-20940095-id-4144300.html

參考:

  1. OpenStack 官方文檔: http://docs.openstack.org/admin-guide-cloud/content/keystone-concepts.html
  2. OpenStack Identity(Keystone)身份服務-體系結構與中間件: http://my.oschina.net/amoshuang/blog/83694
  3. openstack keystone整體架構與功能: http://blog.csdn.net/wsfdl/article/details/20492343
  4. OpenStack Keystone的基本概念了解: http://www.cnblogs.com/yuki-lau/archive/2013/01/04/2843918.html
  5. 【OpenStack】OpenStack的G版Keystone對象模型: http://blog.csdn.net/lynn_kong/article/details/8564535
  6.  [openstack][G版]keystone源碼學習: http://blog.csdn.net/wangyish201201/article/details/8959104
  7. openstack policy 鑒權過程分析 : http://blog.chinaunix.net/uid-20940095-id-4144300.html
  8. 将openstack的Token認證資訊存儲在memcache中: http://lustlost.blog.51cto.com/2600869/1318642

繼續閱讀