openstack云計(jì)算keystone組件工作流程及服務(wù)關(guān)系
一 什么是keystone
keystone是OpenStack的身份服務(wù),暫且可以理解為一個(gè)'與權(quán)限有關(guān)'的組件。
二 為何要有keystone
Keystone項(xiàng)目的主要目的是為訪問(wèn)openstack的各個(gè)組件(nova,cinder,glance...)提供一個(gè)統(tǒng)一的驗(yàn)證方式,具體的:
openstack是由眾多組件構(gòu)成的一套系統(tǒng),該系統(tǒng)的功能是對(duì)外提供服務(wù),因而我們可以將其定義為一個(gè)‘龐大的軟件’,沒(méi)有軟件不考慮安全因素,Keystone對(duì)于通常的應(yīng)用場(chǎng)景所不同的是他要解決分布式環(huán)境下的統(tǒng)一認(rèn)證。
三 keystone的功能
openstack是一個(gè)SOA架構(gòu),理論上各子項(xiàng)目獨(dú)立提供相關(guān)服務(wù),互不依賴,且是分布式的。如nova提供計(jì)算服務(wù),glance提供鏡像服務(wù)等。
實(shí)際上所有的組件都依賴keystone(單點(diǎn)的),它集成了三個(gè)功能:
(1)管理身份驗(yàn)證(managing authentication):驗(yàn)證用戶身份
(2) 授權(quán)(authorization):基于角色role的權(quán)限管理
(3)服務(wù)目錄(catalog of services):提服務(wù)目錄(ServiceCatalog:包括service和endpoint)服務(wù),類似于UDDI服務(wù)的概念,用戶(無(wú)論是Dashboard, APIClient)都需要訪問(wèn)Keystone獲取服務(wù)列表,以及每個(gè)服務(wù)的地址(Openstack中稱為Endpoint)
四 keystone概念詳解
第一部分
User
:使用Openstack組件的客戶端可以是人、服務(wù)、系統(tǒng),任何的客戶端來(lái)訪問(wèn)openstack組件,都需要有一個(gè)用戶名。
Credentials
:是用于確認(rèn)用戶身份的憑證,說(shuō)白了就是‘信物’,具體可以是:
- 用戶名和密碼
- 用戶名和API key
- 一個(gè) Keystone 分配的身份token
Authentication
:
- 是驗(yàn)證用戶身份的過(guò)程。Keystone 服務(wù)通過(guò)檢查用戶的 Credential 來(lái)確定用戶的身份。
- 最開(kāi)始,使用用戶名/密碼或者用戶名/API key作為credential。當(dāng)用戶的credential被驗(yàn)證后,Kestone 會(huì)給用戶分配一個(gè) authentication token 供該用戶后續(xù)的請(qǐng)求使用。
- Keystone中通過(guò)Policy(訪問(wèn)規(guī)則)來(lái)做到基于用戶角色(Role)的訪問(wèn)控制。
Token
:
- 是一個(gè)數(shù)字字符串,訪問(wèn)資源時(shí)需要"亮出"你的令牌。在keystone中主要是引入令牌機(jī)制來(lái)保護(hù)用戶對(duì)于資源的訪問(wèn),同時(shí)引入PKI(公鑰基礎(chǔ)實(shí)施)對(duì)令牌加以保護(hù)。
- Token包含了在指定范圍和有效時(shí)間內(nèi)可以被訪問(wèn)的資源。EG. 在Nova中一個(gè)tenant可以是一些虛擬機(jī),在Swift和Glance中一個(gè)tenant可以是一些鏡像存儲(chǔ),在Network中一個(gè)tenant可以是一些網(wǎng)絡(luò)資源。
Role
:
- 本質(zhì)就是一堆ACL的集合,用于劃分權(quán)限
- 可以通過(guò)給User指定Role,使User獲得Role對(duì)應(yīng)的操作權(quán)限。
- Keystone返回給User的Token包含了Role列表,被訪問(wèn)的Services會(huì)判斷訪問(wèn)它的User和User提供的Token中所包含的Role,及每個(gè)role訪問(wèn)資源或者進(jìn)行操作的權(quán)限。
- 系統(tǒng)默認(rèn)使用管理Role admin和成員Role user(過(guò)去的普通用戶角色是:_member_) 。
- user驗(yàn)證時(shí)必須帶有Project(Tenant)
Policy
:
- 對(duì)于Keystone service來(lái)說(shuō),Policy就是一個(gè)JSON文件,默認(rèn)是/etc/keystone/policy.json。通過(guò)配置這個(gè)文件,Keystone實(shí)現(xiàn)了對(duì)User基于Role的權(quán)限管理。
- OpenStack對(duì)User的驗(yàn)證除了OpenStack的身份驗(yàn)證以外,還需要鑒別User對(duì)某個(gè)Service是否有訪問(wèn)權(quán)限。Policy機(jī)制就是用來(lái)控制User對(duì)Project(Tenant)中資源的操作權(quán)限。
Project(Tenant)
:
- 是一個(gè)人、或服務(wù)所擁有的資源集合。不同的Project之間資源是隔離的,資源可以設(shè)置配額。
- 在一個(gè)Project(Tenant)中可以包含多個(gè)User,每一個(gè)User都會(huì)根據(jù)權(quán)限的劃分來(lái)使用Project(Tenant)中的資源。比如通過(guò)Nova創(chuàng)建虛擬機(jī)時(shí)要指定到某個(gè)Project中,在Cinder創(chuàng)建卷也要指定到某個(gè)Project中。
- User訪問(wèn)Project的資源前,必須要與該P(yáng)roject關(guān)聯(lián),并且指定User在Project下的Role,一個(gè)assignment(關(guān)聯(lián))即:Project-User-Role
Service:即Openstack中運(yùn)行的各個(gè)組件服務(wù)。
Endpoint
:
是一個(gè)可以通過(guò)網(wǎng)絡(luò)來(lái)訪問(wèn)和定位某個(gè)Openstack service的地址,通常是一個(gè)URL
不同的region有不同的endpoint(我們可以通過(guò)endpoint的region屬性去定義多個(gè)region)。
當(dāng)Nova需要訪問(wèn)Glance服務(wù)去獲取image 時(shí),Nova通過(guò)訪問(wèn)Keystone拿到Glance的endpoint,然后通過(guò)訪問(wèn)該endpoint去獲取Glance服務(wù)。
Endpoint 分為三類:
- admin url –> 給admin用戶使用,Port:35357
- internal url –> OpenStack內(nèi)部服務(wù)使用來(lái)跟別的服務(wù)通信,Port:5000
- public url –> 互聯(lián)網(wǎng)用戶可以訪問(wèn)的地址,Port:5000
Catalog
:
用戶和服務(wù)可以使用使用keystone管理的catalog,定位到其他的服務(wù),catalog一個(gè)openstack部署的相關(guān)服務(wù)的集合,每個(gè)服務(wù)都有一個(gè)或者多個(gè)endpoint(即可以訪問(wèn)的url地址),即catalog=services+endpoint。每個(gè)endpoint可以分為三種類型:
admin,internal,public,在生產(chǎn)環(huán)境中,不同endpoint類型位于不同的網(wǎng)絡(luò)來(lái)為不同的用戶使用(提高安全性),比如:
public API:對(duì)整個(gè)互聯(lián)網(wǎng)可見(jiàn),這樣客戶就可以方便的管理自己的云了。
admin API:應(yīng)該嚴(yán)格限定只有管理云基礎(chǔ)設(shè)施的組織內(nèi)的運(yùn)營(yíng)商,才能使用該API
internel API:應(yīng)該被限定只有那些安裝有OpenStack服務(wù)的主機(jī),才能使用該API
Service與Endpoint關(guān)系介紹:
- 在openstack中,每一個(gè)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ò)上開(kāi)放的權(quán)限一般也不同。Admin通常只能對(duì)內(nèi)網(wǎng)開(kāi)放,public通??梢詫?duì)外網(wǎng)開(kāi)放,internal通常只能對(duì)安裝有openstack對(duì)服務(wù)的機(jī)器開(kāi)放。
endpoint舉例
我們使用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 使用另一個(gè) service 的 endpoint 的 internalurl 去訪問(wèn)另一個(gè)資源。
Regions
:
openstack支持多個(gè)可擴(kuò)展的regions,OpenStack的支持可擴(kuò)展的多個(gè)區(qū)域。為簡(jiǎn)單起見(jiàn),一般使用管理網(wǎng)絡(luò)ip地址作為所有endpoint類型(三種api)的ip,且所有的endpoint類型(三種api)都使用一個(gè)區(qū)域,即regionone區(qū)。
每個(gè)你部署的openstack服務(wù)都需要綁定endpoint(存儲(chǔ)在keystone中)來(lái)提供服一個(gè)服務(wù)的入口,因而我們第一需要部署的組件就是keystone。
V3新增的概念:
- Tenant 重命名為 Project
- 添加了 Domain 的概念
- 添加了 Group 的概念
第二部分
keystone管理和保存了user信息,管理user相關(guān)的tenant,role,group和domain等;用戶credential的存放,驗(yàn)證,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一樣,也可以屬于一個(gè)或者多個(gè)group,此處為了圖示簡(jiǎn)潔,省去了它們的連線
五 keystone內(nèi)包含的組件
keystone包含三類組件:
1 Server
使用RESTful接口(三種api)提供認(rèn)證和授權(quán)服務(wù)的集中式server
2 Drivers
指的是被集成到server內(nèi)的驅(qū)動(dòng)或者服務(wù)后端,它們被用來(lái)在openstack組件之外的庫(kù)中訪問(wèn)身份信息(言外之意:mysql并不屬于openstack的組件/服務(wù)),并可能已經(jīng)存在于openstack部署的架構(gòu)中(比如, SQL databases or LDAP servers).
3 Modules
中間件運(yùn)行在正在使用認(rèn)證服務(wù)的openstack組件的地址空間,這些模塊(中間件)攔截服務(wù)請(qǐng)求,提取用戶的credentials,并且把它們發(fā)送給server去認(rèn)證授權(quán),在openstack中間件與openstack組件直接的整合操作使用Python Web Server Gateway Interface,即wsgi,詳見(jiàn)http://www.cnblogs.com/linhaifeng/p/6268615.html
六 keystone與openstack其他服務(wù)的關(guān)系
七 keystone與其他組件協(xié)同工作流程
keystone是用戶與云平臺(tái)交互的第一個(gè)服務(wù),一旦認(rèn)證通過(guò),用戶就會(huì)使用自己的身份來(lái)訪問(wèn)其他的opnestack服務(wù),同樣,被訪問(wèn)的openstack服務(wù)會(huì)去跟keystone再次確認(rèn)用戶(不能只能用戶的片面之詞)并且通過(guò)keystone可以發(fā)現(xiàn)其他服務(wù)(catalog的原因),keystone的還可以整合其他的用戶管理系統(tǒng),比如LDAP
八 keystone工作流程詳解
(1) User從Keystone獲取令牌以及服務(wù)列表;
(2) User訪問(wèn)服務(wù)時(shí),亮出自己的令牌。
(3)相關(guān)的服務(wù)向Keystone求證令牌的合法性。
用戶alice登錄keystone系統(tǒng)(password或者token的方式),獲取一個(gè)臨時(shí)的token和catalog服務(wù)目錄(v3版本登錄時(shí),如果沒(méi)有指定scope,project或者domain,獲取的臨時(shí)token沒(méi)有任何權(quán)限,不能查詢project或者catalog)。
alice通過(guò)臨時(shí)token獲取自己的所有的project列表。
alice選定一個(gè)project,然后指定project重新登錄,獲取一個(gè)正式的token,同時(shí)獲得服務(wù)列表的endpoint,用戶選定一個(gè)endpoint,在HTTP消息頭中攜帶token,然后發(fā)送請(qǐng)求(如果用戶知道project name或者project id可以直接第3步登錄)。
消息到達(dá)endpoint之后,由服務(wù)端(nova)的keystone中間件(pipeline中的filter:authtoken)向keystone發(fā)送一個(gè)驗(yàn)證token的請(qǐng)求。(token類型:uuid需要在keystone驗(yàn)證token,pki類型的token本身是包含用戶詳細(xì)信息的加密串,可以在服務(wù)端完成驗(yàn)證)
keystone驗(yàn)證token成功之后,將token對(duì)應(yīng)用戶的詳細(xì)信息,例如:role,username,userid等,返回給服務(wù)端(nova)。
服務(wù)端(nova)完成請(qǐng)求,例如:創(chuàng)建虛擬機(jī)。
服務(wù)端返回請(qǐng)求結(jié)果給alice。
以上就是openstack云計(jì)算keystone組件工作流程及服務(wù)關(guān)系的詳細(xì)內(nèi)容,更多關(guān)于openstack云計(jì)算keystone工作流程服務(wù)關(guān)系的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
openstack pike單機(jī)一鍵安裝shell的方法
這篇文章主要介紹了openstack pike單機(jī)一鍵安裝shell的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03Openstack 創(chuàng)建項(xiàng)目和虛擬機(jī)詳細(xì)介紹
這篇文章主要介紹了Openstack 創(chuàng)建項(xiàng)目和虛擬機(jī)詳細(xì)介紹的相關(guān)資料,這里舉例說(shuō)明如何實(shí)現(xiàn),圖文教程,需要的朋友可以參考下2016-11-11OpenStack云計(jì)算快速入門教程(1)之OpenStack及其構(gòu)成簡(jiǎn)介
該教程基于Ubuntu12.04版,它將幫助讀者建立起一份OpenStack最小化安裝。這篇文章主要介紹了OpenStack云計(jì)算快速入門教程(1)之OpenStack及其構(gòu)成簡(jiǎn)介 ,需要的朋友可以參考下2016-11-11OpenStack之虛機(jī)熱遷移的代碼詳細(xì)解析
本篇文章主要介紹了OpenStack之虛機(jī)熱遷移,有需要的朋友可以了解下。2016-11-11OpenStack虛擬機(jī)快照和增量備份實(shí)現(xiàn)方法
快照針對(duì)要保存的數(shù)據(jù)分為內(nèi)存快照和磁盤快照,內(nèi)存快照就是保存當(dāng)前內(nèi)存的數(shù)據(jù),磁盤快照就是保存硬盤的數(shù)據(jù),這篇文章主要介紹了OpenStack虛擬機(jī)快照和增量備份實(shí)現(xiàn),需要的朋友可以參考下2022-04-04詳解Openstack組件部署 — Overview和前期環(huán)境準(zhǔn)備
本篇文章主要介紹了詳解Openstack組件部署 — Overview和前期環(huán)境準(zhǔn)備,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03Openstack 啟動(dòng)instance ''hvm''錯(cuò)誤問(wèn)題解決辦法
這篇文章主要介紹了Openstack 啟動(dòng)instance 'hvm'錯(cuò)誤問(wèn)題解決辦法的相關(guān)資料,需要的朋友可以參考下2016-11-11Openstack 網(wǎng)絡(luò)知識(shí)資料詳細(xì)介紹及總結(jié)
這篇文章主要介紹了Openstack 網(wǎng)絡(luò)知識(shí)資料詳細(xì)介紹及總結(jié)的相關(guān)資料,在開(kāi)發(fā)云計(jì)算的時(shí)候 Openstack 很多公司都在用,這里就整理下網(wǎng)絡(luò)知識(shí),需要的朋友可以參考下2016-12-12