1.前言
上一篇我们介绍了Openstack的整体架构,了解了Openstack包含的服务及服务之间的关系.从这一篇开始我们深入到Openstack各个服务(模块)内部,深入了解下Openstack的设计及通信方式,从而更加深入地了解Openstack的设计.
2.Keystone
Keystone是openstack的identity service,主要提供两种服务:
1) 用户、角色、租户的管理
2) 其他服务的认证与授权管理、服务API权限控制.
keystone为各个服务提供认证服务,需要与各个模块交互.比如在创建虚拟机的过程中,keystone首先需要为用户提供认证服务,其次需要为nova,neutron,swift等服务提供认证服务.下图展示了创建虚拟机过程中,各个相关的模块交互的情形.
通过上图,我们可以发现,在调用每一个服务之前,都必须由keystone对Token进行校验,校验通过则调用目标服务.这种机制是如何实现的呢?其实是采用了Filter的机制.这种机制类似于Spring中的Filter的概念,也类似ASP.NET MVC中的Filter的概念.通过这种AOP的机制,可以很好地实现对请求的拦截.对于Openstack来说,使用的是OSGI的机制,关于OSGI,请参考:OSGI介绍
下面介绍下各个模块和keystone的交互关系.
Keystone 里面涉及到的相关的概念:
1)User
User可简单的理解为用户,用户携带信物(token)能够访问openstack各个服务和资源。
2)Tenant
Tenant即租户,早期版本又称为project,它是各个服务中的一些可以访问的资源集合。比如通过nova创建虚拟机时要指定到某个租户中,在cinder创建卷也要指定到某个租户中。用户访问租户的资源前,必须与该租户关联,并且指定该用户在该租户下的角色。
3)Role
Role即角色,可以理解为VIP等级,用户的Role越高,在openstack中能访问的服务和资源就更多。
4)Service
Service即服务,如Nova、Glance、Swift、heat、ceilometer等。Nova提供云计算的服务,Glance提供镜像管理服务,Swift提供对象存储服务,heat提供资源编排服务,ceilometer则是提供告警计费服务,cinder提供块存储服务。
5)Endpoint
Service的显得太抽象笼统。Endpoint则具体化Service。Endpoint翻译为“端点”,我们可以理解它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的endpoint,而endpoint一般为url,我们知道了服务的url,我们就可以访问它。Endpoint 的url具有public、private和admin这三种权限。public url可以被全局访问,private url只能被局域网访问,admin url被从常规的访问中分离。
6)Token
Token即是信物、令牌,用户通过用户名和密码获取在某个租户下的token,通过token,可以实现单点登录。
7)Credentials
该术语可以简单的理解为用户和密码。
keystone支持多种认证方式:
1) Certificates for PKI
PKI(Public Key Infrastructure) 是一种公钥加密的机制.类似Https加密的机制.
2) Httpd 和 X.509
3) LDAP 协议
4) 第三方的认证