您好,登錄后才能下訂單哦!
這篇文章主要介紹“openstack云計算keystone組件工作流程及服務(wù)關(guān)系是什么”,在日常操作中,相信很多人在openstack云計算keystone組件工作流程及服務(wù)關(guān)系是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”openstack云計算keystone組件工作流程及服務(wù)關(guān)系是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
keystone是OpenStack的身份服務(wù),暫且可以理解為一個'與權(quán)限有關(guān)'的組件。
Keystone項目的主要目的是為訪問openstack的各個組件(nova,cinder,glance...)提供一個統(tǒng)一的驗證方式,具體的:
openstack是由眾多組件構(gòu)成的一套系統(tǒng),該系統(tǒng)的功能是對外提供服務(wù),因而我們可以將其定義為一個‘龐大的軟件’,沒有軟件不考慮安全因素,Keystone對于通常的應(yīng)用場景所不同的是他要解決分布式環(huán)境下的統(tǒng)一認(rèn)證。
openstack是一個SOA架構(gòu),理論上各子項目獨立提供相關(guān)服務(wù),互不依賴,且是分布式的。如nova提供計算服務(wù),glance提供鏡像服務(wù)等。
實際上所有的組件都依賴keystone(單點的),它集成了三個功能:
(1)管理身份驗證(managing authentication):驗證用戶身份
(2) 授權(quán)(authorization):基于角色role的權(quán)限管理
(3)服務(wù)目錄(catalog of services):提服務(wù)目錄(ServiceCatalog:包括service和endpoint)服務(wù),類似于UDDI服務(wù)的概念,用戶(無論是Dashboard, APIClient)都需要訪問Keystone獲取服務(wù)列表,以及每個服務(wù)的地址(Openstack中稱為Endpoint)
User
:使用Openstack組件的客戶端可以是人、服務(wù)、系統(tǒng),任何的客戶端來訪問openstack組件,都需要有一個用戶名。
Credentials
:是用于確認(rèn)用戶身份的憑證,說白了就是‘信物’,具體可以是:
用戶名和密碼
用戶名和API key
一個 Keystone 分配的身份token
Authentication
:
是驗證用戶身份的過程。Keystone 服務(wù)通過檢查用戶的 Credential 來確定用戶的身份。
最開始,使用用戶名/密碼或者用戶名/API key作為credential。當(dāng)用戶的credential被驗證后,Kestone 會給用戶分配一個 authentication token 供該用戶后續(xù)的請求使用。
Keystone中通過Policy(訪問規(guī)則)來做到基于用戶角色(Role)的訪問控制。
Token
:
是一個數(shù)字字符串,訪問資源時需要"亮出"你的令牌。在keystone中主要是引入令牌機(jī)制來保護(hù)用戶對于資源的訪問,同時引入PKI(公鑰基礎(chǔ)實施)對令牌加以保護(hù)。
Token包含了在指定范圍和有效時間內(nèi)可以被訪問的資源。EG. 在Nova中一個tenant可以是一些虛擬機(jī),在Swift和Glance中一個tenant可以是一些鏡像存儲,在Network中一個tenant可以是一些網(wǎng)絡(luò)資源。
Role
:
本質(zhì)就是一堆ACL的集合,用于劃分權(quán)限
可以通過給User指定Role,使User獲得Role對應(yīng)的操作權(quán)限。
Keystone返回給User的Token包含了Role列表,被訪問的Services會判斷訪問它的User和User提供的Token中所包含的Role,及每個role訪問資源或者進(jìn)行操作的權(quán)限。
系統(tǒng)默認(rèn)使用管理Role admin和成員Role user(過去的普通用戶角色是:_member_) 。
user驗證時必須帶有Project(Tenant)
Policy
:
對于Keystone service來說,Policy就是一個JSON文件,默認(rèn)是/etc/keystone/policy.json。通過配置這個文件,Keystone實現(xiàn)了對User基于Role的權(quán)限管理。
OpenStack對User的驗證除了OpenStack的身份驗證以外,還需要鑒別User對某個Service是否有訪問權(quán)限。Policy機(jī)制就是用來控制User對Project(Tenant)中資源的操作權(quán)限。
Project(Tenant)
:
是一個人、或服務(wù)所擁有的資源集合。不同的Project之間資源是隔離的,資源可以設(shè)置配額。
在一個Project(Tenant)中可以包含多個User,每一個User都會根據(jù)權(quán)限的劃分來使用Project(Tenant)中的資源。比如通過Nova創(chuàng)建虛擬機(jī)時要指定到某個Project中,在Cinder創(chuàng)建卷也要指定到某個Project中。
User訪問Project的資源前,必須要與該Project關(guān)聯(lián),并且指定User在Project下的Role,一個assignment(關(guān)聯(lián))即:Project-User-Role
Service:即Openstack中運行的各個組件服務(wù)。
Endpoint
:
是一個可以通過網(wǎng)絡(luò)來訪問和定位某個Openstack service的地址,通常是一個URL
不同的region有不同的endpoint(我們可以通過endpoint的region屬性去定義多個region)。
當(dāng)Nova需要訪問Glance服務(wù)去獲取image 時,Nova通過訪問Keystone拿到Glance的endpoint,然后通過訪問該endpoint去獲取Glance服務(wù)。
Endpoint 分為三類:
admin url –> 給admin用戶使用,Port:35357
internal url –> OpenStack內(nèi)部服務(wù)使用來跟別的服務(wù)通信,Port:5000
public url –> 互聯(lián)網(wǎng)用戶可以訪問的地址,Port:5000
Catalog
:
用戶和服務(wù)可以使用使用keystone管理的catalog,定位到其他的服務(wù),catalog一個openstack部署的相關(guān)服務(wù)的集合,每個服務(wù)都有一個或者多個endpoint(即可以訪問的url地址),即catalog=services+endpoint。每個endpoint可以分為三種類型:
admin,internal,public,在生產(chǎn)環(huán)境中,不同endpoint類型位于不同的網(wǎng)絡(luò)來為不同的用戶使用(提高安全性),比如:
public API:對整個互聯(lián)網(wǎng)可見,這樣客戶就可以方便的管理自己的云了。
admin API:應(yīng)該嚴(yán)格限定只有管理云基礎(chǔ)設(shè)施的組織內(nèi)的運營商,才能使用該API
internel API:應(yīng)該被限定只有那些安裝有OpenStack服務(wù)的主機(jī),才能使用該API
Service與Endpoint關(guān)系介紹:
在openstack中,每一個service都有三種endpoint. Admin, public, internal(創(chuàng)建完service后需要為其創(chuàng)建API EndPoint. )
Admin是用作管理用途的,如它能夠修改user/tenant(project)。
public 是讓客戶調(diào)用的,比如可以部署在外網(wǎng)上讓客戶可以管理自己的云。
internal是openstack內(nèi)部調(diào)用的。
三種endpoints 在網(wǎng)絡(luò)上開放的權(quán)限一般也不同。Admin通常只能對內(nèi)網(wǎng)開放,public通??梢詫ν饩W(wǎng)開放,internal通常只能對安裝有openstack對服務(wù)的機(jī)器開放。
我們使用keystone為服務(wù)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支持多個可擴(kuò)展的regions,OpenStack的支持可擴(kuò)展的多個區(qū)域。為簡單起見,一般使用管理網(wǎng)絡(luò)ip地址作為所有endpoint類型(三種api)的ip,且所有的endpoint類型(三種api)都使用一個區(qū)域,即regionone區(qū)。
每個你部署的openstack服務(wù)都需要綁定endpoint(存儲在keystone中)來提供服一個服務(wù)的入口,因而我們第一需要部署的組件就是keystone。
Tenant 重命名為 Project
添加了 Domain 的概念
添加了 Group 的概念
keystone管理和保存了user信息,管理user相關(guān)的tenant,role,group和domain等;用戶credential的存放,驗證,token管理,下圖是各部分關(guān)系
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的關(guān)系同user1一樣,也可以屬于一個或者多個group,此處為了圖示簡潔,省去了它們的連線
keystone包含三類組件:
1 Server
使用RESTful接口(三種api)提供認(rèn)證和授權(quán)服務(wù)的集中式server
2 Drivers
指的是被集成到server內(nèi)的驅(qū)動或者服務(wù)后端,它們被用來在openstack組件之外的庫中訪問身份信息(言外之意:mysql并不屬于openstack的組件/服務(wù)),并可能已經(jīng)存在于openstack部署的架構(gòu)中(比如, SQL databases or LDAP servers).
3 Modules
中間件運行在正在使用認(rèn)證服務(wù)的openstack組件的地址空間,這些模塊(中間件)攔截服務(wù)請求,提取用戶的credentials,并且把它們發(fā)送給server去認(rèn)證授權(quán),在openstack中間件與openstack組件直接的整合操作使用Python Web Server Gateway Interface,即wsgi。
keystone是用戶與云平臺交互的第一個服務(wù),一旦認(rèn)證通過,用戶就會使用自己的身份來訪問其他的opnestack服務(wù),同樣,被訪問的openstack服務(wù)會去跟keystone再次確認(rèn)用戶(不能只能用戶的片面之詞)并且通過keystone可以發(fā)現(xiàn)其他服務(wù)(catalog的原因),keystone的還可以整合其他的用戶管理系統(tǒng),比如LDAP
(1) User從Keystone獲取令牌以及服務(wù)列表;
(2) User訪問服務(wù)時,亮出自己的令牌。
(3)相關(guān)的服務(wù)向Keystone求證令牌的合法性。
用戶alice登錄keystone系統(tǒng)(password或者token的方式),獲取一個臨時的token和catalog服務(wù)目錄(v3版本登錄時,如果沒有指定scope,project或者domain,獲取的臨時token沒有任何權(quán)限,不能查詢project或者catalog)。
alice通過臨時token獲取自己的所有的project列表。
alice選定一個project,然后指定project重新登錄,獲取一個正式的token,同時獲得服務(wù)列表的endpoint,用戶選定一個endpoint,在HTTP消息頭中攜帶token,然后發(fā)送請求(如果用戶知道project name或者project id可以直接第3步登錄)。
消息到達(dá)endpoint之后,由服務(wù)端(nova)的keystone中間件(pipeline中的filter:authtoken)向keystone發(fā)送一個驗證token的請求。(token類型:uuid需要在keystone驗證token,pki類型的token本身是包含用戶詳細(xì)信息的加密串,可以在服務(wù)端完成驗證)
keystone驗證token成功之后,將token對應(yīng)用戶的詳細(xì)信息,例如:role,username,userid等,返回給服務(wù)端(nova)。
服務(wù)端(nova)完成請求,例如:創(chuàng)建虛擬機(jī)。
服務(wù)端返回請求結(jié)果給alice。
到此,關(guān)于“openstack云計算keystone組件工作流程及服務(wù)關(guān)系是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。