(一)Keystone端的操作
(二)如何在OpenStack服務上部署Keystone中間件
部署OpenStack時一般先安裝Keystone服務, 一旦Keystone運行, 管理員搭建起服務目錄, 形成OpenStack系統的框架. 創建"服務用戶"和服務目錄在上一篇隨筆中有詳細的介紹.
配置OpenStack服務與Keystone協同工作, 需要在這些服務上部署"keystonemiddleware"(即Keystone中間件), 通過該中間件完成令牌驗證等需要和與Keystone交互的功能.
Keystone中間件的大體工作流程:
1. 客戶端向服務發送服務請求是會攜帶從Keystone那里獲得的令牌;
2. Keystone中間件會查詢並驗證這個令牌的有效性, 並采取相應的措施;
3. Keystone中間件會從有效的令牌中提取諸如用戶名, 用戶ID, 項目名, 項目ID, 角色等信息, 並將這些信息以header的形式傳遞給"下游"的OpenStack服務.
配置Keystone中間件並不是工作的全部, 我們將在下文進行詳細的介紹.
Keystone中間件的"身份"和普通用戶的身份不同. Keystone中間件部署在OpenStack服務的Paste管道上, 代表服務攔截用戶的HTTP請求, 驗證用戶提供的令牌是否真實有效, 並判斷用戶是否具有相應的權限. 因此Keystone中間件的 "身份" 實質是其部署在OpenStack服務在Keystone服務端的身份. Keystone中間件是一個特殊的Keystone用戶.
下面介紹如何部署和配置Keystone中間件:
1. 安裝代碼. 在OpenStack服務所在主機上安裝"keystonemiddleware"項目代碼, 可采用pip, easy_install工具或從GitHub下載源碼等多種方式安裝. Git項目和Pypi包均名為"keystonemiddleware".
2. 定義Paste過濾器. 在OpenStack服務的Paste部署文件(如:api-paste.ini)中,設置如下的WSGI組件:
[filter:authtoken] paste.filter_factory = keystonemiddleware.auth_token:filter_factory
3. 安裝Keystone中間件. 將2中定義的Paste過濾器 "authtoken" 添加到Paste管道的適當位置, 完成在OpenStack服務上部署Keystone中間件.
4. 配置Keystone中間件. Keystone中間件的配置項包括Keystone服務的URL, 中間件用戶名, 密碼等. 具體的配置項我們在下一篇隨筆中進行詳細介紹. Keystone中間件有兩種配置方法, 一是在第2步定義過濾器時緊隨工廠函數設置. 另一種是將配置信息統一寫入到OpenStack服務的主配置 *.conf文件中, 保持Paste部署文件簡潔. 需注意當兩處進行了重復配置時, Paste配置文件中的配置項起決定作用.
注意兩種方法的細微差別:
(1) 在Paste部署文件中配置Keystone中間件,
[filter:authtoken] paste.filter_factory = keystonemiddleware.auth_token:filter_factory identity_uri = http://identity_url:35357/ admin_user = nova admin_password = password ...
這種方式的好處的是簡單方便, Keystone中間件的部署與配置點相同.
(2) 在*.conf配置文件中配置Keystone中間件,
[DEFAULT] ... auth_strategy=keystone ... [keystone_authtoken] identity_uri = http://identity_url:35357/ admin_user = nova admin_password = password
...
即首先要到*.conf文件的 [DEFAULT] 段落下找到 auth_strategy 字段, 設置為"keystone". 接着到 [keystone_authtoken] 段落下, 配置項同(1).
可采取這些流程配置Keystone中間件的OpenStack服務包括: Nova, Neutron, Cinder, Glance等. 具體的配置文件分別是,
Nova: nova.conf 和 api-paste.ini
Neutron: neutron.conf 和 api-paste.ini
Cinder: cinder.conf 和 api-paste.ini
Glance: glance-api.conf 和glance-api-paste.ini
對象存儲服務Swift略有不同. Swift默認的認證授權組件"tempauth"已經逐漸被社區棄用, 推薦一致地使用Keystone. Swift的默認配置目錄中沒有Paste部署文件, 因此對Keystone中間件的部署和配置都在Swift的proxy-server.conf文件中完成.
在Swift的proxy-server.conf文件中查找如下段落, 注意其中的 "tempauth"中間件,
[pipeline:main] pipeline = ... tempauth ... proxy-server
這里Swift默認使用自帶的Paste過濾器 tempauth , 要使用Keystone中間件, 就要將這個Paste管道中的 tempauth 替換成如下的兩個Paste過濾器:
[pipeline:main] pipeline = ... authtoken keystoneauth ... proxy-server
在文件proxy-server.conf中配置Paste過濾器 authtoken 和 keystoneauth :
[filter:authtoken] # paste.filter_factory = keystonemiddleware.auth_token:filter_factory # auth_uri = http://keystonehost:5000/ # admin_user = swift # admin_password = password ... [filter:keystoneauth] # use = egg:swift#keystoneauth ... # operator_roles = admin, swiftoperator ... # reseller_admin_role = ResellerAdmin ... # default_domain_id = default ... # allow_names_in_acls = true
配置文件模板會默認注釋掉所有配置項, 管理員根據旁邊的說明取消注釋, 將配置項設置成適當的值, 這樣就完成了在Swift上部署Keystone中間件的工作.
前文介紹了OpenStack的主要服務如何整合Keystone, 部署Keystone中間件. 這里還要簡單說明OpenStack的Dashboard如何與Keystone整合.
Horizon是 OpenStack 的 Web UI, 為了使用第三版的 Keystone API, 我們需要在 Horizon 的 openstack_dashboard/local/local_settings.py 文件中做如下改動:
1. 在配置項 OPENSTACK_API_VERSIONS 中添加 "identity": 3
2. 將配置項 OPENSTACK_KEYSTONE_URL 的URL以 /v3/ 結尾.
至此就完成了Keystone中間件的部署, 本文沒有涉及OpenStack的所有項目, 但是OpenStack不同服務的相似性很高, 后上馬的項目尊重前期項目得出的一致性經驗. 我們以OpenStack最核心的服務入手, 介紹了如何將其與Keystone服務整合. 接下來, 詳細配置Keystone中間件.