您好,登錄后才能下訂單哦!
這篇文章主要介紹“openstack云計算keystone組件工作流程及服務關系是什么”,在日常操作中,相信很多人在openstack云計算keystone組件工作流程及服務關系是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”openstack云計算keystone組件工作流程及服務關系是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
keystone是OpenStack的身份服務,暫且可以理解為一個'與權限有關'的組件。
Keystone項目的主要目的是為訪問openstack的各個組件(nova,cinder,glance...)提供一個統一的驗證方式,具體的:
openstack是由眾多組件構成的一套系統,該系統的功能是對外提供服務,因而我們可以將其定義為一個‘龐大的軟件’,沒有軟件不考慮安全因素,Keystone對于通常的應用場景所不同的是他要解決分布式環境下的統一認證。
openstack是一個SOA架構,理論上各子項目獨立提供相關服務,互不依賴,且是分布式的。如nova提供計算服務,glance提供鏡像服務等。
實際上所有的組件都依賴keystone(單點的),它集成了三個功能:
(1)管理身份驗證(managing authentication):驗證用戶身份
(2) 授權(authorization):基于角色role的權限管理
(3)服務目錄(catalog of services):提服務目錄(ServiceCatalog:包括service和endpoint)服務,類似于UDDI服務的概念,用戶(無論是Dashboard, APIClient)都需要訪問Keystone獲取服務列表,以及每個服務的地址(Openstack中稱為Endpoint)
User
:使用Openstack組件的客戶端可以是人、服務、系統,任何的客戶端來訪問openstack組件,都需要有一個用戶名。
Credentials
:是用于確認用戶身份的憑證,說白了就是‘信物’,具體可以是:
用戶名和密碼
用戶名和API key
一個 Keystone 分配的身份token
Authentication
:
是驗證用戶身份的過程。Keystone 服務通過檢查用戶的 Credential 來確定用戶的身份。
最開始,使用用戶名/密碼或者用戶名/API key作為credential。當用戶的credential被驗證后,Kestone 會給用戶分配一個 authentication token 供該用戶后續的請求使用。
Keystone中通過Policy(訪問規則)來做到基于用戶角色(Role)的訪問控制。
Token
:
是一個數字字符串,訪問資源時需要"亮出"你的令牌。在keystone中主要是引入令牌機制來保護用戶對于資源的訪問,同時引入PKI(公鑰基礎實施)對令牌加以保護。
Token包含了在指定范圍和有效時間內可以被訪問的資源。EG. 在Nova中一個tenant可以是一些虛擬機,在Swift和Glance中一個tenant可以是一些鏡像存儲,在Network中一個tenant可以是一些網絡資源。
Role
:
本質就是一堆ACL的集合,用于劃分權限
可以通過給User指定Role,使User獲得Role對應的操作權限。
Keystone返回給User的Token包含了Role列表,被訪問的Services會判斷訪問它的User和User提供的Token中所包含的Role,及每個role訪問資源或者進行操作的權限。
系統默認使用管理Role admin和成員Role user(過去的普通用戶角色是:_member_) 。
user驗證時必須帶有Project(Tenant)
Policy
:
對于Keystone service來說,Policy就是一個JSON文件,默認是/etc/keystone/policy.json。通過配置這個文件,Keystone實現了對User基于Role的權限管理。
OpenStack對User的驗證除了OpenStack的身份驗證以外,還需要鑒別User對某個Service是否有訪問權限。Policy機制就是用來控制User對Project(Tenant)中資源的操作權限。
Project(Tenant)
:
是一個人、或服務所擁有的資源集合。不同的Project之間資源是隔離的,資源可以設置配額。
在一個Project(Tenant)中可以包含多個User,每一個User都會根據權限的劃分來使用Project(Tenant)中的資源。比如通過Nova創建虛擬機時要指定到某個Project中,在Cinder創建卷也要指定到某個Project中。
User訪問Project的資源前,必須要與該Project關聯,并且指定User在Project下的Role,一個assignment(關聯)即:Project-User-Role
Service:即Openstack中運行的各個組件服務。
Endpoint
:
是一個可以通過網絡來訪問和定位某個Openstack service的地址,通常是一個URL
不同的region有不同的endpoint(我們可以通過endpoint的region屬性去定義多個region)。
當Nova需要訪問Glance服務去獲取image 時,Nova通過訪問Keystone拿到Glance的endpoint,然后通過訪問該endpoint去獲取Glance服務。
Endpoint 分為三類:
admin url –> 給admin用戶使用,Port:35357
internal url –> OpenStack內部服務使用來跟別的服務通信,Port:5000
public url –> 互聯網用戶可以訪問的地址,Port:5000
Catalog
:
用戶和服務可以使用使用keystone管理的catalog,定位到其他的服務,catalog一個openstack部署的相關服務的集合,每個服務都有一個或者多個endpoint(即可以訪問的url地址),即catalog=services+endpoint。每個endpoint可以分為三種類型:
admin,internal,public,在生產環境中,不同endpoint類型位于不同的網絡來為不同的用戶使用(提高安全性),比如:
public API:對整個互聯網可見,這樣客戶就可以方便的管理自己的云了。
admin API:應該嚴格限定只有管理云基礎設施的組織內的運營商,才能使用該API
internel API:應該被限定只有那些安裝有OpenStack服務的主機,才能使用該API
Service與Endpoint關系介紹:
在openstack中,每一個service都有三種endpoint. Admin, public, internal(創建完service后需要為其創建API EndPoint. )
Admin是用作管理用途的,如它能夠修改user/tenant(project)。
public 是讓客戶調用的,比如可以部署在外網上讓客戶可以管理自己的云。
internal是openstack內部調用的。
三種endpoints 在網絡上開放的權限一般也不同。Admin通常只能對內網開放,public通常可以對外網開放,internal通常只能對安裝有openstack對服務的機器開放。
我們使用keystone為服務5d533c68-d234-11e6-a0d7-0088653ea1ec定制endpoint:
$ keystone endpoint-create \ --region RegionOne \ --service-id=5d533c68-d234-11e6-a0d7-0088653ea1ec \ --publicurl='https://public-ip:8776/v1/%(tenant_id)s' \ --internalurl='https://management-ip:8776/v1/%(tenant_id)s' \ --adminurl='https://management-ip:8776/v1/%(tenant_id)s'
然后你可以配置 OpenStack service 使用另一個 service 的 endpoint 的 internalurl 去訪問另一個資源。
Regions
:
openstack支持多個可擴展的regions,OpenStack的支持可擴展的多個區域。為簡單起見,一般使用管理網絡ip地址作為所有endpoint類型(三種api)的ip,且所有的endpoint類型(三種api)都使用一個區域,即regionone區。
每個你部署的openstack服務都需要綁定endpoint(存儲在keystone中)來提供服一個服務的入口,因而我們第一需要部署的組件就是keystone。
Tenant 重命名為 Project
添加了 Domain 的概念
添加了 Group 的概念
keystone管理和保存了user信息,管理user相關的tenant,role,group和domain等;用戶credential的存放,驗證,token管理,下圖是各部分關系
User: has account credentials, is associated with one or more projects or domains
Group: a collection of users, is associated with one or more projects or domains
Project: unit of ownership in OpenStack, contains one or more users
Domain: unit of ownership in OpenStack, contains users, groups and projects
Role: a first-class piece of metadata associated with many user-project pairs.
Token: identifying credential associated with a user or user and project
Extras: bucket of key-value metadata associated with a user-project pair.
Rule: describes a set of requirements for performing an action.
注意:user2,user3,user4的關系同user1一樣,也可以屬于一個或者多個group,此處為了圖示簡潔,省去了它們的連線
keystone包含三類組件:
1 Server
使用RESTful接口(三種api)提供認證和授權服務的集中式server
2 Drivers
指的是被集成到server內的驅動或者服務后端,它們被用來在openstack組件之外的庫中訪問身份信息(言外之意:mysql并不屬于openstack的組件/服務),并可能已經存在于openstack部署的架構中(比如, SQL databases or LDAP servers).
3 Modules
中間件運行在正在使用認證服務的openstack組件的地址空間,這些模塊(中間件)攔截服務請求,提取用戶的credentials,并且把它們發送給server去認證授權,在openstack中間件與openstack組件直接的整合操作使用Python Web Server Gateway Interface,即wsgi。
keystone是用戶與云平臺交互的第一個服務,一旦認證通過,用戶就會使用自己的身份來訪問其他的opnestack服務,同樣,被訪問的openstack服務會去跟keystone再次確認用戶(不能只能用戶的片面之詞)并且通過keystone可以發現其他服務(catalog的原因),keystone的還可以整合其他的用戶管理系統,比如LDAP
(1) User從Keystone獲取令牌以及服務列表;
(2) User訪問服務時,亮出自己的令牌。
(3)相關的服務向Keystone求證令牌的合法性。
用戶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。
到此,關于“openstack云計算keystone組件工作流程及服務關系是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。