1.keystone
一.Keystone 做下面這幾件事情:
1、管理用戶及其權限
2、維護 OpenStack Services 的 Endpoint
3、Authentication(認證)和 Authorization(鑒權)
二. keystone 的概念
User:指使用Openstack service的用戶,可以是人、服務、系統,但凡使用了Openstack service的對象都可以稱為User。
Project(Tenant):可以理解為一個人、或服務所擁有的 資源集合 。在一個Project(Tenant)中可以包含多個User,每一個User都會根據權限的划分來使用Project(Tenant)中的資源。比如通過Nova創建虛擬機時要指定到某個Project中,在Cinder創建卷也要指定到某個Project中。User訪問Project的資源前,必須要與該Project關聯,並且指定User在Project下的Role。
Role:用於划分權限。可以通過給User指定Role,使User獲得Role對應的操作權限。Keystone返回給User的Token包含了Role列表,被訪問的Services會判斷訪問它的User和User提供的Token中所包含的Role。系統默認使用管理Role admin和成員Role _member_ 。
Policy:OpenStack對User的驗證除了OpenStack的身份驗證以外,還需要鑒別User對某個Service是否有訪問權限。Policy機制就是用來控制User對Tenant中資源(包括Services)的操作權限。對於Keystone service來說,Policy就是一個JSON文件,默認是/etc/keystone/policy.json。通過配置這個文件,Keystone Service實現了對User基於Role的權限管理。
Token:是一個字符串表示,作為訪問資源的令牌。Token包含了在 指定范圍和有效時間內 可以被訪問的資源。EG. 在Nova中一個tenant可以是一些虛擬機,在Swift和Glance中一個tenant可以是一些鏡像存儲,在Network中一個tenant可以是一些網絡資源。Token一般被User持有。
Credentials:用於確認用戶身份的憑證
Authentication:確定用戶身份的過程
Service:Openstack service,即Openstack中運行的組件服務。
Endpoint:一個可以通過網絡來訪問和定位某個Openstack service的地址,通常是一個URL。比如,當Nova需要訪問Glance服務去獲取image 時,Nova通過訪問Keystone拿到Glance的endpoint,然后通過訪問該endpoint去獲取Glance服務。我們可以通過Endpoint的region屬性去定義多個region。Endpoint 該使用對象分為三類:
- admin url –> 給admin用戶使用,Post:35357
- internal url –> OpenStack內部服務使用來跟別的服務通信,Port:5000
- public url –> 其它用戶可以訪問的地址,Post:5000
創建完service后創建API EndPoint. 在openstack中,每一個service都有三種end points. Admin, public, internal。 Admin是用作管理用途的,如它能夠修改user/tenant(project)。 public 是讓客戶調用的,比如可以部署在外網上讓客戶可以管理自己的雲。internal是openstack內部調用的。三種endpoints 在網絡上開放的權限一般也不同。Admin通常只能對內網開放,public通常可以對外網開放internal通常只能對安裝有openstack對服務的機器開放。
V3新增
- Tenant 重命名為 Project
- 添加了 Domain 的概念
- 添加了 Group 的概念
1.user
2.Credentials
3.Token
-
Token 用做訪問 Service 的 Credential
-
Service 會通過 Keystone 驗證 Token 的有效性
-
Token 的有效期默認是 24 小時
4.Project
5.service
6.Endpoint
7.Role
三 基本架構
- 用戶alice登錄keystone系統(password或者token的方式),獲取一個臨時的token和catalog服務目錄(v3版本登錄時,如果沒有指定scope,project或者domain,獲取的臨時token沒有任何權限,不能查詢project或者catalog)。
- alice通過臨時token獲取自己的所有的project列表。
- alice選定一個project,然后指定project重新登錄,獲取一個正式的token,同時獲得服務列表的endpoint,用戶選定一個endpoint,在HTTP消息頭中攜帶token,然后發送請求(如果用戶知道project name或者project id可以直接第3步登錄)。
- 消息到達endpoint之后,由服務端(nova)的keystone中間件(pipeline中的filter:authtoken)向keystone發送一個驗證token的請求。(token類型:uuid需要在keystone驗證token,pki類型的token本身是包含用戶詳細信息的加密串,可以在服務端完成驗證)
- keystone驗證token成功之后,將token對應用戶的詳細信息,例如:role,username,userid等,返回給服務端(nova)。
- 服務端(nova)完成請求,例如:創建虛擬機。
- 服務端返回請求結果給alice。
四 通過列子認識keystone 架構
時,OpenStack 內部發生了哪些事情?請看下面
五 kyesdone 配置文件
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">










