OpenStack入门之核心组件梳理(1)——Keystone篇
前言
先前的文章中笔者从整体上介绍了有关OpenStack相关内容,包括:概念、主要组件及项目、部署节点类型以及整体架构。那么从本文开始我们将介绍有关OpenStack核心项目的理论知识,逐一详细介绍各个服务项目。
友情链接:下面的三篇文章对于初学者或多或少可以帮你在宏观上了解云计算以及OpenStack。
云计算浅谈
OpenStack概念以及核心组件概述
OpenStack部署节点类型和架构
那么,首先来讲一下核心项目之一的Keystone相关的内容。本文将从概念作用、主要组成、模式架构、工作原理四个部分层层介绍,最后对Keystone这个项目做一个总结。
一、Keystone的概念作用
通过前面的文章,应该对OpenStack的核心组件服务有了整体上的认知了。本文将针对OpenStack集群服务中Keystone项目服务进行讲解。本小节将详述Keystone的概念。
Keystone是OpenStack组件之一——Identity Service(认证服务)成立的核心项目。该项目整体上相对于其他项目并不复杂,其类似于一个服务总线,也可以理解为整个OpenStack服务框架的注册表,OpenStack中其他项目通过Keystone可以注册其服务然后获得该服务的Endpoint(服务的访问端口,或者理解为入口),这个Endpiont可以是一个也可以是多个。此外,任何服务之间的调用也需要通过Keystone的认证才能获得目标服务的Endpoint来访问对应服务。
当然,既然是认证服务,就有一定的认证机制,那么思考一下在生活中可以想到有什么类似认证的例子?
其实,这样的例子很多,家家户户的锁匙就是一种认证机制,再比如支付宝账号密码登录也是认证机制的典型例子,再如,各种门票入场券都可以认为是一种认证机制。
总而言之,Keystone项目就是通过相应的认证授权形式来向其他服务或其他服务之间提供服务支持,其主要功能就是对用户和服务进行管理的。因此我们要理解如何管理用户以及服务,就需要对Keystone的主要模块构成熟悉理解。
二、Keystone的主要组成
本小节将介绍Keystone对用户和服务进行管理层面上对应组成概念及作用的介绍,介绍过程中涉及的术语都会在下文进行详细介绍,可以自行查阅理解。
2.1 User
表示使用服务的用户,可以是人,服务或者系统,只要是使用了openstack服务的对象都可以称为用户。当User对OpenStack进行访问时,Keystone会对其身份进行验证,验证通过的用户可以登录OpenStack云平台并且通过其颁发的Token(下面会讲解)去访问资源,用户可以被分配到一个或者多个tenant或project(下文给出介绍)中。
2.2 Tenant
表示使用访问的租户,作用是对资源进行分组,或者说是为了使提供的资源之间互相隔离,可以理解为一个一个容器,也称为Project。
在一个租户中可以拥有很多个用户,用户也可以隶属于多个租户,但必须至少属于某个租户。租户中可使用资源的限制称作Tenant Quotas,联想一下Linux系统磁盘管理的磁盘配额,这个Quotas的含义就是配额、限额。用户可以根据权限的划分使用租户中的资源。
2.3 Token
表示提供进行验证的令牌,是Keystone分配的用于访问OpenStack API和资源服务的字符串文本。用户的令牌可能在任何时间被撤销(revoke),就是说用户的Token是具有时间限制的,并且在OpenStack中Token是和特定的Tenant(租户)绑定的,也就是说如果用户属于多个租户,那么其就有多个具有时间限制的令牌。
2.4 Credential
表示用户凭据,用来证明用户身份的数据,可以是用户名和密码、用户名和API Key,或者是Keystone认证分配的Token。
2.5 Authentication
表示身份认证,是验证用户身份的过程。将上面的几个结合起来简单说明一下该过程。
首先,用户申请访问等请求,Keystone服务通过检查用户的Credential确定用户身份;然后,在第一次对用户进行认证时,用户使用用户名和密码或用户名和API Key作为Credential;其次,当用户的Credential被验证之后,Keystone会给用户(用户必定至少属于一个租户)分配一个Authentication Token来给该用户之后去使用。
2.6 Service
表示服务,有OpenStack提供,例如Nova、Swift或者Glance等等,每个服务提供一个或多个Endpoint(服务的入口)来给不同角色的用户进行资源访问以及操作。
2.7 Endpoint
表示服务的入口,是一个由Service监听服务请求的网络地址。客户端要访问某个service,就需要通过该service通过的Endpoint(通常是可以访问的一个URL地址)。在OpenStack服务架构中,各个服务之间的相互访问也需要通过服务的Endpoint才可以访问对应的目标服务。
2.8 Role
表示角色,类似一访问控制列表——ACL的集合。主要是用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限。其实在Keystone的认证机制中,分配给用户的Token中包含了用户的角色列表。
换言之,Role扮演的作用可以理解为:当服务被用户访问时,该服务会去解析用户角色列表中的角色的权限(例如可以进行的操作权限、访问哪些资源的权限)。
2.9 Policy
表示策略,用于控制某一个Tenant中的某一个User是否具备某个操作的权限。也就是说,通过Policy机制,依据配置文件(默认是在/etc/keystone/目录下的policy.json文件),可以决定User可以执行什么操作,不能执行什么操作。
该文件内容格式如下(大致了解一下即可):
1 {
2 "admin_required": "role:admin or is_admin:1",
34 "identity:get_project": "rule:admin_required",
35 "identity:list_projects": "rule:admin_required",
......
45 "identity:delete_user": "rule:admin_required",
46 "identity:change_password": "rule:admin_or_owner",
47}
三、Keystone的架构理解
上篇文章介绍OpenStack的架构的时候给出过如下的一个架构图,不知道是否有所印象或者之前在其他的文章中看见过:
通过该图,我们可以直观上了解Identity Service的Keystone服务是一个提供统一整体认证的项目,不仅建立自身与用户之间的关系,也是其他服务之间进行资源访问等操作的纽带。
Keystone内部结构图如下所示:
该结构非常简单,上面是Keystone的服务和管理的API,下面是对应的各个后端服务应用,例如:令牌、编目、策略以及身份等方面的服务集合。说到这里,需要补充一点,Keystone可以集成普遍使用的目录服务,如LDAP(轻量级目录访问协议)。
四、Keystone的工作原理
通过以上内容,想必对Keystone概念主要作用、组成部分以及结构模型有了自己的理解了。那么下面来理一下Keystone是如何进行工作的,或者说它的响应的流程是怎样的。
下面通过一个用户创建实例的过程中对于Keystone认证过程,结合示意图来介绍整个Keystone服务的响应流程。在阅读整个过程的同时体会理解上面的9个组成部分的作用,进行自己的思考加深理解。
下面以该创建实例虚拟机为例描述Keystone与其他服务之间的响应流程:
一次建立:
1、用户首先向Keystone发送如用户密码之类的身份信息(用户名和密码或者用户名和API key),Keystone验证成功后向用户配发Token;
三次请求,三次确认:
2、之后用户向Nova发出带有Token的实例创建请求,Nova接收到请求后向Keystone验证Token的有效性,确定该Token是否有效;
3、上述的Token被证实有效后,由Nova向Glance服务发出带有Token的镜像传输请求,Glance同样要到Keystone去验证Token的有效性;
4、上述的Token被证实有效后Glance向Nova正式提供镜像目录查询和传递服务,Nova获取镜像后继续向Neutron发送带有Token的网络创建服务,再由Neutron向Keystone求证Token的有效性;
5、Token被证实有效后,Neutron允许Nova使用网络服务;
一个最终结果:
6、Nova启动虚拟机成功,同时向用户返回创建实例成功的通知。
五、Keystone的理论总结
本文旨在介绍Keystone的作用和工作原理,重点在于Keystone提供的认证服务,包含的9个主要部分内容,脑海里有其与其他组件以及用户之间的关系,最为重要的就是Keystone是如何工作的,要对整个响应的工作流程非常熟悉理解。
笔者能力有限,如果有什么疏漏之处还望指出,谢谢阅读!