在开源社区openstack官网的介绍中keystone作为第一个组件被介绍,足以显示其在整个OpenStack架构中的重要地位,那么keystone在OpenStack架构中到底扮演者什么角色,今天就和大家聊一下 OpenStack第一个组件keystone。
keystone组件在整个OpenStack架构中主要是负责用户和服务的认证授权的,详细的分为其作用可以分成2大部分,第一个部分是 负责用户身份认证,这里面讲的用户是我们在安装每一个组件的时候创建的用户也就是我们用来登录dashboard页面的用户,第二部分就是服务目录编排以及token认证,所有的服务都需要向OpenStack的keystone组件进行认证注册,除keystone自身之外所有的组件都需要配置[keystone_authtoken]这快内容,其作用就是将服务向keystone进行注册。
既然keystone负责用户的身份认证那么我们就来讲解一下keystone中与用户相关的几个名词:
user: 这里可以是一个使用云服务(openstack)的一个自然人,一个机构或者一个组织,在其访登录dashboard管理页面的时候需,keystone首先是去验证该用户的身份信息的合法性,然后再给该用户颁发相应的token资源令牌,然后用户可以使用该资源令牌去访问资源,一个用户可以隶属于 多个project.
credential:凭据是用来证明用户身份信息的数据,我们可以把它理解为显示生活中的×××或者护照等等。
token:一个通过keystone认证之后的用户,keystone颁发给该用户访问资源的字符串,这个token是有时间限制的,它有点类似于我们在上网过程中产生的cookies但是他们却不是一个性质的事物。
Tenant:租户这是一个比较抽象的概念,比如现实生活中公司去写字楼组一个楼层,相对于出租方个体就是一个租户,比如公司去阿里云购买一个云主机,那么公司相对于阿里云来说就是一个租户,租户和用户不一样的地方在于,用户可以属于多个租户,用户至少要属于一个租户。
service:是云提供的服务,比如在OpenStack架构中有nova,neutron,cinder服务,服务是一种无形的,但是却和我们息息相关的东西。
Endpoint:服务节点或者服务入口,它是一个url形式的,比如Nova计算服务的http://10.37.129.100:8778,用户要去访问服务必须要通过该service提供的Endpoint去访问,在OpenStack架构中Endpoint有三种,一般只是地址不一样,一般分为内网,管理网,公网的endpoint,例如去访问glance服务获取glance镜像,nova必须要先去访问keystone(因为keystone保留着各种服务注册的endpoint )通过认证之后,办法相关的资源token,然后告诉其 glance服务的endpoint,然后通过该endpoint获取glance服务。

Role:角色 相当于显示生活中的一个职能部门,比如在公司中的角色有经理,副经理,组长等,但是他们的权限和能够调动的资源却不一样,OpenStack其实和其一样,在这里只是代表了他们所享有的权限和能够访问的资源。
Policy:策略 在OpenStack中keystone的主要功能是验证用户身份信息的合法性以及服务编排目录的功能,但是我们还要鉴别用户对某个资源是否有访问权限等等,这个是与role做关联的,它的配置文件默认是在/etc/keystone/policy.json
了解完了keystone的功能以及与之相关的知识,那么下面我们学习一下keystone的验证流程:
当一个用户在登录openstack管理页面的时候其实已经发生了验证过程,首先keystone首先会验证你是否有权限登录该页面,通过之后就会进入管理页面,当我们点击创建虚拟机,用户相关的信息会提交给keystone进行验证,验证通过之后keystone会向其颁发访问资源token,之后用户带着keystone颁发的资源token访问nova,nova收到相关请求之后,首先向keystone验证其token是否是来自keystone所颁发,通过之后向glance 服务发出带有token资源令牌的请求, glance同时向keystone验证其资源令牌的真实性,被证实之后glance向nova提供正式的镜像服务,,Nova获取到相关的镜像之后开始向neutron发出带有资源令牌的token请求创建网络,然后neutron也会向keystone验证其token的合法性,验证真实有效之后,neutron开始响应请求创建网路服务,此时创建nova 的指令完成,具体的流程可以参考下图。

keystone组件作用以及验证流程_第1张图片
keystone组件作用以及验证流程_第2张图片