關於keystone模塊,我將從整體架構與功能,用戶信息管理,認證服務3個模塊用3篇文章進行分析。
1. keystone的基本功能
keystone作爲openstack的Identity Service,提供了用戶信息管理和完成各個模塊認證服務。
用戶信息管理:user/tenant基本信息,tenant管理
認證服務:登錄認證,各個組件API的權限控制
2.keystone的架構
既然keystone爲各個模塊提供認證服務,所以各個模塊與keystone都有所交互。其中登錄認證體現在用戶訪問各個組件的API時,調用了WSGI框架的authtoken filter,該filter最調用keystoneclient ,最終通過keystone驗證token,完成對用戶的登錄認證。如果認證失敗,用戶將不能訪問該API。
以nova爲例,authtoken filter在/etc/paste.ini目錄中(如果不熟悉WSGI框架,暫且忽略之)
keystone在openstack的位置如下:
3. keystone 基本概念介紹
1). User
User可簡單的理解爲用戶,用戶攜帶信物(token)能夠訪問openstack各個服務和資源。
2). Tenant
Tenant即租戶,早期版本又稱爲project,它是各個服務中的一些可以訪問的資源集合。比如通過nova創建虛擬機時要指定到某個租戶中,在cinder創建卷也要指定到某個租戶中。用戶訪問租戶的資源前,必須與該租戶關聯,並且指定該用戶在該租戶下的角色。
3). Role
Role即角色,可以理解爲VIP等級,用戶的Role越高,在openstack中能訪問的服務和資源就更多。
4). Service
Service即服務,如Nova、Glance、Swift、heat、ceilometer等。Nova提供雲計算的服務,Glance提供鏡像管理服務,Swift提供對象存儲服務,heat提供資源編排服務,ceilometer則是提供告警計費服務,cinder提供塊存儲服務。
5). Endpoint
Service的顯得太抽象籠統。Endpoint則具體化Service。Endpoint翻譯爲“端點”,我們可以理解它是一個服務暴露出來的訪問點,如果需要訪問一個服務,則必須知道他的endpoint,而endpoint一般爲url,我們知道了服務的url,我們就可以訪問它。Endpoint 的url具有public、private和admin這三種權限。public url可以被全局訪問,private url只能被局域網訪問,admin url被從常規的訪問中分離。
6). Token
Token即是信物、令牌,用戶通過用戶名和密碼獲取在某個租戶下的token,通過token,可以實現單點登錄。
7) Credentials
該術語可以簡單的理解爲用戶和密碼。
keystone 裏面的概念很多,其中最重要的是 User 和 Tenant 。其它的概念是由於安全和權限等因素引入。引用http://www.openstack.org.cn/bbs/forum.php?mod=viewthread&tid=534&extra=page%3D1該文的理解,通俗的說:
如果把賓館比作爲Tenant,住宿的人就是User ,而賓館就是 Tenant,賓館可以提供多種諸如住宿、娛樂、飲食等多種服務(Service),具體來說,住宿是一種具體的服務(Endpoint)。就住宿而言,有普通間和總統套房,如果你的VIP等級(Role)高,你可以享受到豪華的總統套房。入住前,我們需要拿身份證開房(Credential),認證身份證不是冒牌貨後(Authenticaiton),會給你一個房卡(Token),然後你拿着房卡,就可以進入房間和享受各種服務。
User | 住賓館的人 |
Credentials | 身份證 |
Authentication | 認證你的身份證 |
Token | 房卡 |
Tenant | 賓館 |
Service | 賓館可以提供的服務類別,比如,飲食類,娛樂類 |
Endpoint | 具體的一種服務,比如吃燒烤,打羽毛球 |
Role | VIP 等級,VIP越高,享有越高的權限 |
4. keystone 的訪問流程
以創建一個虛擬機(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,最終創建虛擬機
參考資料:
1.《雲計算與openstack》
2. http://www.openstack.org.cn/bbs/forum.php?mod=viewthread&tid=534&extra=page%3D1