(原創)OpenStack服務如何使用Keystone (二)---部署和配置Keystone中間件


  (一)Keystone端的操作

  (二)如何在OpenStack服務上部署Keystone中間件

  (三)詳細配置keystonemiddleware

 

  部署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中間件.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM