- 項目介紹Keystone是Openstack架構中負責身份認證、服務管理、服務規則和服務令牌的功能,它實作了Openstack的Identity API。Keystone是整個openstack架構的系統資料庫,其他服務通過keystone來注冊其服務的endpoint,任何服務之間互相的調用,都需要經過keystone的身份驗證來獲得目标服務的endpoint來找到目标服務。Keystone主要包含兩個主要部件:驗證、權限和服務目錄。
- 基本概念User使用者,表示擁有使用者名,密碼,郵箱等帳号資訊的個人Tenant租戶,它是各個服務中的一些可以通路的資源集合。可以了解為一個項目,預設user是綁定在Tenant上的。Role 角色,代表使用者可以通路的資源權限。Users可以被添加到任意一個全局的 或 租戶内的角色中。在全局的role中,使用者的role權限作用于所有的租戶,即可以對所有的租戶執行role規定的權限;在租戶内的role中,使用者僅能在目前租戶内執行role規定的權限。Service服務,一個openstack的服務,例如nova,swift等。通常用不同的名稱來表示不同的服務。 Endpoint端點,一個可以通過網絡通路的位址,即服務通路的URL。具有public,private,admin三種權限。Token 令牌,是一把特殊的鑰匙。使用者通過使用者名和密碼擷取某個租戶的令牌,可以實作單點登入。Template 模版,一個端點集合,代表一組可用的openstack服務端點。
- 認證服務的流程
- 使用者名通過自己的使用者名和密碼向keystone申請令牌token,keystone認證其使用者名和密碼後,若正确則傳回一個token1。
- 使用者攜帶token1向keystone申請查詢其所擁有的租戶,keystone認證token1後,傳回其擁有的所有租戶的tenant資訊。
- 使用者選擇一個租戶,通過使用者名和密碼向keystone申請令牌token,keystone認證使用者名,密碼和租戶後,傳回token2。(前兩步是為了查詢使用者所擁有的租戶資訊的,如果已經知道租戶資訊,則省略前兩步)。
- 使用者攜帶token2向keystone發送提供服務的請求,keystone認證token2後(包括此token是否有效,是否有建立服務的權限等等),把請求下發到相應的服務,服務按照需求執行相應的操作并把執行結果傳回給使用者。 從上面的流程得知,使用者是從keystone擷取令牌和服務清單。并在通路某個服務的時候提供自己的token,然後此服務向keystone求證所攜帶token的合法性。
- 配置認證服務所需要的資料庫首先在資料庫中建立名為keystone的資料庫:
然後授權keystone使用者對keystone庫擁有完全權限:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iYlZTO3gDOhFjY5QWY1MWZ1UjYzkjZzQjYkZTOiRTO28CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- 安裝keystone軟體包
啟動memcached服務
修改keystone的配置檔案/etc/keystone/keystone.conf
a.在[DEFAULT]中,設定admin的token
注:随機碼用openssl rand –hex 10 生成
b.在[database]中,設定資料庫授權
c.在[memcache]中,設定memcache-server
d.在[token]中,配置UUID token和memcache driver
e.在[revoke]中,配置SQL的撤銷
填充認證服務資料庫
- 配置HTTP服務修改http配置檔案/etc/httpd/conf/httpd.conf,設定服務主機名
建立/etc/httpd/conf.d/wsgi-keystone.conf檔案,并寫入以下的行:
建立WSGI結構目錄
切換到上面的目錄下,然後下載下傳main和admin的檔案,其實兩個檔案是一樣的。
設定該目錄的權限和屬組
啟動http服務和開機自啟
- 建立服務實體和API endpoint首先建立認證token和endpoint:
為認證服務建立服務實體:
Openstack為每個服務建立了三個API endpoint:admin,internal,public。Admin的endpoint預設是可以修改使用者和租戶的,而其餘的是不可以的。這樣分開也是為了安全考慮。另外,openstack為了擴充性還支援多區域,預設使用RegionOne區域。
建立認證服務的API endpoint:
注:每個openstack的服務都必須在認證服務中有一個服務的實體和API endpoint
- 建立租戶、使用者、角色建立admin租戶
建立admin使用者
建立admin的角色
添加admin的角色到admin的租戶和使用者中
建立一個service的租戶,用來存放openstack的各種服務:
建立一個普通租戶demo:
建立demo的使用者
建立角色user
添加角色user到demo租戶和使用者中:
- 認證服務的搭建
- 認證服務的驗證
為了安全考慮,禁用臨時認證token,修改/usr/share/keystone/keystone-dist-paste.ini
删除[pipeline:public_api],[pipeline:admin_api],[pipeline:api_v3]區域中的admin_token_auth
取消OS_TOKEN和OS_URL的定義 OS_TOKEN OS_URL
作為admin使用者,請求一個認證token
為了支援版本3的API,要求至少包含default域或者使用ID:
作為admin請求租戶清單;
作為admin請求使用者清單:
作為admin請求角色清單:
作為demo使用者向API v3請求token:
作為demo使用者不能操作admin使用者的指令。
建立環境腳本admin-openrc.sh和demo-openrc.sh
admin-openrc.sh
Demo-openrc.sh
驗證環境腳本;
到此keystone服務搭建完畢。