前言
OpenStack概念不多讲了,因为讲不明白。只了解过keystone,其他服务是干什么的,怎么用的,目前还没有驱动力去了解,所以就自觉闭嘴了,只贴一张比较有意思的图。
Openstack社区非常活跃,开发者很多,代码和文档更新也很频繁,最近几天看文档的过程中就发现过文档内容调整的情况,虽然官网上的文档非常多,但是感觉有点分散,加上V2和V3 版本并存,有些概念和设计在不断演进,新学者刚开始不太容易理出头绪,下面对这段时间学习keystone的一些心得做个总结。
“keystone"的中文意思是拱心石,就是石拱门上面最中间那块石头,将两边的石头塞住不会掉下来,如图:
Keystone是Openstack家庭的一个成员,在2012年的Essex版本成为核心服务,它将内部的Identity, Catalog, Token和Policy服务统一对外提供给Openstack的其他服务。两个最主要的功能一是用户身份认证以及允许用户做什么,另一个功能是为服务编目,有哪些服务可用以及它们的访问点是什么。
基本概念
Keystone的核心概念主要包括:user, project(tenant), domain,token, role, service, endpoint等,V3版本将V2 版本的tenant改名为project,同时增加了domain概念。
下面是我总结的领域模型:
- user代表一个用户,有相关联的用户名和密码以及其他诸如email等数据
- project包含了一些基础设施资源,记得有人举例说project(以前的tenant)就好比一个宾馆,里面有各种设施
- domain是V3新增加的概念,类似于命名空间,在不同的domain之间,用户名、project、group名字可以相同。但是domain和role的名字必须全局唯一
- role就是角色,比如admin,member等,名字可以随便起,叫”女王陛下“完全没问题,但是各个服务有权利自己解释角色的定义,后面会进一步说明这一点
- group似乎也是V3新增的概念,可以将用户分组,直接给group赋予权限,有GBP(Group based policy)。group在Keystone中不是必须的
- token就是令牌,用户认证通过后被分配给一个令牌,以后拿着这个令牌可以在规定的范围内活动,也就是说令牌不仅有身份信息,比如用户角色,还有作用范围,通常是project和domain;另外token还有有效期,过期失效;如果中间表现不好,还可能被提前吊销(revoke)
进一步说明一下上面几个概念的关系: role是相对的,一个用户在不同project里面可以有不同的role,在给user或者group授予role时必须指定domain或者project; domain是目前最大的概念,可以包含project,user等,在两个domain里面可以