1.Keystone的介紹
Keystone在N版已經是V3版本。在Keystone中主要涉及以下幾個概念:
User:使用服務的使用者,可以是人,服務或者系統,隻要是使用了openstack服務的對象都可以稱為使用者。當User對OpenStack進行通路時,Keystone會對其身份進行驗證。
project(tenant)租戶,可以了解為一個人,項目或者組織擁有的資源的合集。在一個租戶中可以擁有很多個使用者,這些使用者可以根據權限的劃分使用租戶中的資源
Role:角色,用于配置設定操作的權限。角色可以被指定給使用者,使得該使用者獲得角色對應的操作權限。
安全包含兩部分:Authentication(認證)和 Authorization(鑒權)
Authentication 解決的是“你是誰?”的問題
Authorization 解決的是“你能幹什麼?”的問題
Keystone 是借助 Role 來實作 Authorization 的:
Token:認證成功後,keystone會生成一串比特值或者字元串,用來作為通路資源的令牌,token中有可通路資源的範圍和有效時間
service:服務,nova,glance都是屬于一個服務,需要在keystone上進行建立,指定類型。
建立服務有一個服務,就建立一個endpoint,會根據服務類型去查找那個服務。Service 決定每個 Role 能做什麼事情 ,Service 通過各自的 policy.json 檔案對 Role 進行通路控制
endpoint:端點,是一個服務暴露出來的通路點,如果需要通路一個服務,就必須知道他的endpoint。每個endpoint都有三個url通路位址(admin,internal,public)。public url可以被全局通路,private url隻能被區域網路通路,admin url被從正常的通路中分離。User 通過 Endpoint 通路資源和執行操作
2.Keystone V3 API 新特性
Keystone V3 做出了許多變化和改進,我們選取其中較為重要的進行闡述:
将 Tenant 改稱為 Project
引入 Domain 的概念
引入 Group 的概念
将 Tenant 改為 Project 并在其上添加 Domain 的概念,這更加符合現實世界和雲服務的映射。
V3 利用 Domain 實作真正的多租戶(multi-tenancy)架構,Domain 擔任 Project 的高層容器。雲服務的客戶是 Domain 的所有者,他們可以在自己的 Domain 中建立多個 Projects、Users、Groups 和 Roles。通過引入 Domain,雲服務客戶可以對其擁有的多個 Project 進行統一管理,而不必再向過去那樣對每一個 Project 進行單獨管理。
Group 是一組 Users 的容器,可以向 Group 中添加使用者,并直接給 Group 配置設定角色,那麼在這個 Group 中的所有使用者就都擁有了 Group 所擁有的角色權限。通過引入 Group 的概念,Keystone V3 實作了對使用者組的管理,達到了同時管理一組使用者權限的目的。這與 V2 中直接向 User/Project 指定 Role 不同,使得對雲服務進行管理更加便捷。

3.Keystone服務部署過程
(1)資料庫各服務庫的建立和授權
tips:配置 OpenStack 身份認證服務前,必須建立一個資料庫和管理者令牌。由于其餘服務也需要用到資料庫,此處将所有的服務所需要的庫都進行建立并授權
(2)keystone服務配置:/etc/keystone/keystone.conf
(3)初始化身份認證服務的資料庫,并驗證是否初始化成功:
(4)keystone服務配置:/etc/keystone/keystone.conf
(5)檢視keystone服務所有的配置
(6)初始化Fernet key:
(7)初始化指令bootstrap,初始化自動建立一個admin使用者以及相關權限,直接在keystone上進行注冊服務,建立endpoint。
(8)配置apache http伺服器
tips:kesytone是python寫的,apache有一個wsgi子產品,可以通過這個子產品和python進行通信。端口為5000和35357,預設情況下,Kestone服務仍然監聽這些端口
①編輯<code>/etc/httpd/conf/httpd.conf</code> 檔案,配置<code>ServerName</code> 選項為控制節點:
②建立一個連結到<code>/usr/share/keystone/wsgi-keystone.conf</code>檔案
③設定apache開機自啟動
(9)開始使用keystone就需要進行驗證,有兩種方式連接配接Keystone:第一種方式使用參數,另外一種方式就通過環境變量方式進行連接配接。
(10)建立域、項目、使用者、角色
為什麼建立service項目?在前面已經概述到一個使用者需要屬于一個項目(使用者組),并且要賦予一種角色(權限)進行管理服務。而其餘服務需要連接配接keystone,需用使用使用者名密碼連接配接,那其他服務自然就需要有屬于某一個項目,是什麼使用者,什麼角色去連接配接Keystone。此處預設的域建立為為default,對域的概念不明白可以參考前文。
在這裡:我們分别建立了service項目,并配置了預設的域為default。也建立了glance、nova、neutron、cinder使用者,并賦予admin角色,使openstack的服務元件可以與Keystone進行通信。
正常(非管理)任務應該使用無特權的項目和使用者。作為例子,這裡采用demo項目和demo使用者
建立demo項目,demo使用者密碼,建立use角色并賦予demo使用者user角色
建立glance、nova、neutron、cinder使用者,并賦予admin角色
(11)驗證操作:在安裝其他服務之前确認身份認證服務操作
在控制節點(192.168.56.11)上操作這些指令
①撤銷臨時環境變量<code>OS_AUTH_URL</code>和<code>OS_PASSWORD</code>
②作為 admin 使用者,請求認證令牌:
③作為<code>demo</code> 使用者,請求認證令牌:
tips:能夠正常擷取到tonken,說明keystone服務是正常。
(12)建立 OpenStack 用戶端環境腳本
① 建立 admin 和 <code>demo</code>項目和使用者建立用戶端環境變量腳本
②加載<code>admin-openrc</code>檔案來身份認證服務的環境變量位置和<code>admin</code>項目和使用者證書:
③ 請求認證令牌:
到此,Keystone服務就算配置完成了。
OpenStack 排查問題的方法主要是通過日志。
每個 Service 都有自己的日志檔案。
Keystone 主要有兩個日志:
keystone.log 和 keystone_access.log
儲存在 /var/log/apache2/ 目錄裡。
如果需要得到最詳細的日志資訊,可以在 /etc/keystone/keystone.conf 中打開 debug 選項
總結Keystone常見的錯誤:
401 #驗證失敗,keystone相關使用者賬戶密碼設定錯誤,時間不同步,或者輸入的項目名稱不對
403 #可能未初始化OS_token變量,需要使用source指令使其生效,也可能是配置的配置檔案未生效,需要重新開機相關服務
409 #keystone建立使用者,使用者已存在
500 #伺服器内部錯誤,服務配置有問題,看日志,檢查配置
503 #keystone相關賬戶密碼設定有問題,請将相關的glance賬戶删除,重新建立即可
服務故障 #相關服務沒有起來
Keystone的配置/etc/keystone/keystone.conf總結:
①由于Keystone需要使用資料庫,需要配置資料庫的連接配接
②由于需要将token存儲到memcache,減少對資料庫的通路,需要配置memcached伺服器位址和端口
③由于tonken的生成是基于某種算法,此處選用的是fernet方式,需要配置令牌提供者為fernet
④在選用memcache作為緩存token的方式,需要配置驅動方式(driver)
版權聲明:原創作品,謝絕轉載。否則将追究法律責任
本文轉自 IT_外賣小哥 51CTO部落格,原文連結:http://blog.51cto.com/jinlong/2049477