《OpenStack高可用集群(上册):原理与架构》—2.2 OpenStack高可用集群服务组件
2.2 OpenStack高可用集群服务组件
2.2.1 认证服务Keystone
OpenStack集群中所有用户与服务的集中认证授权机制通过Keystone(OpenStack Identity服务)项目来实现,Keystone在OpenStack服务框架中负责用户身份验证、服务目录编目和身份令牌的管理功能,它实现了OpenStack的Identity API。Keystone类似一个服务总线,或者说是整个OpenStack服务框架的注册表,其他服务通过Keystone来注册其服务并获得该服务的Endpoint,即该服务的访问入口(服务访问的URL),此外,任何服务之间的相互调用,也要经过Keystone的身份验证才能获得目标服务的Endpoint以访问目标服务。Keystone支持多种形式的认证授权,包括常用的用户名和密码验证系统、基于Token的令牌验证系统和使用Public/Private秘钥对的验证系统,除此之外,Keystone还可以集成普遍使用的目录服务(Directory Service),如轻量级目录访问协议(LDAP)。
OpenStack集群中已经部署的所有服务项目都会在Keystone认证服务中进行编目,然后Keystone为每个编目的服务提供一个或多个Endpoint用于对这些服务进行请求访问,同时对外提供已编目的服务列表。Keystone使用租户的形式将OpenStack中的资源进行逻辑隔离,在Keystone中,不同租户在访问相同服务时,尽管访问的是相同的Endpoint,但是不同租户具有不同的令牌,因此看到的资源是完全不一样的,即一个租户的用户无法访问另一租户的资源。OpenStack中的用户在经过Keystone的验证后,会获得Keystone颁发并具有一定有效时长的Token,在允许用户访问目标服务的Endpoint之前,服务会请求Keystone验证用户的Token是否有效,有效则允许访问相应的服务,否则拒绝访问,同时OpenStack中的每一个用户都会被分配一个与租户和用户相关的身份角色(Role)。图2-8为OpenStack项目架构中Keystone与各个服务之间的认证关系。
图2-8 Keystone在OpenStack架构中的认证服务
Keystone的两个主要功能分别是用户管理和服务管理,要理解Keystone如何管理用户,则需要首先理解Keystone中用户管理的几个术语:
User(用户):User是一个使用OpenStack云服务的人、系统或者服务的字符称号,Keystone会对用户发起的资源调用请求进行验证,验证通过的用户可以登录OpenStack云平台并且通过Keystone颁发的Token去访问资源,用户可以被分配到一个或者多个tenant/project中。
Credential(用户凭据):Credential是用来证明用户身份的数据,可以是用户名和密码、用户名和API key,或者是Keystone认证后分配的Token。
Authentication(身份认证):Authentication是验证用户身份的一个过程。Keystone服务通过检查用户的Credential来确定用户的身份,在第一次对用户进行认证时,用户使用用户名/密码或者用户名/API key作为Credential,而当用户的Credential被验证后,Keystone会给用户分配一个Authentication Token供该用户后续的请求使用。
Token(令牌):Token是一个Keystone分配的用于访问OpenStack API和资源服务的字符文本字串。一个用户的Token可能在任何时间被撤销(revoke),即用户的Token是有时间限制的,在OpenStack中,Token是和特定的Tenant绑定的,因此如果用户属多个Tenant,则会有多个Token。
Tenant(租户):Tenant是对资源进行分组或者隔离的容器(有时也称为Project),一个Tenant可能对应一个云服务客户、一个服务账号、一个组织或者一个项目。在OpenStack中,用户可以属于多个Tenant,并且必须至少属于某个Tenant。Tenant中可使用资源的限制称为Tenant Quotas,它包括该Tenant 内可使用的各种资源限额,如CPU限额、内存限额等。
Service(服务):Service是一个OpenStack提供的服务,比如Nova、Swift或者Glance等,在OpenStack中,每个服务提供一个或者多个Endpoint以供不同角色的用户进行资源访问和操作。
Endpoint(服务入口):Endpoint是一个Service监听服务请求的网络地址,客户端要访问某个Service,则必须通过该Service提供的Endpoint,Endpoint通常是个可访问的URL地址,在OpenStack的多Region部署架构中,不同Region中相同的Service也具有不同的Endpoint。在OpenStack服务框架中,Service之间的相互访问也需要通过服务的Endpoint才可访问对应的目标Service,例如当Nova服务需要访问Glance服务以获取Image时,Nova就需要首先访问Keystone,从Keystone的服务列表中拿到Glance的Endpoint,然后通过访问该Endpoint以获取Glance服务。每个服务的Endpoint都具有Region属性,具有不同Region属性值的Endpoint也是不相同的。通常,一个服务会提供三类Endpoint供客户端使用:属性为adminurl的Endpoint只能被具有admin角色的用户访问;属性为internalurl的Endpoint被OpenStack内部服务用以彼此之间的服务通信;属性为publicurl的Endpoint用于其他用户的访问。
Role(角色):Role可以看成是一个访问控制列表(ACL)的集合。在Keystone的认证机制中,分配给用户的Token中包含了用户的角色列表。被用户访问的服务会解析用户角色列表中的角色所能进行的操作和可以访问的资源,在Keystone中,系统默认使用admin和_member_ role角色。
Policy(策略):Keystone对用户的验证除了包含对用户的身份进行验证,还需要鉴别用户对某个服务是否有访问权限(根据Role判断)。Policy机制就是用来控制某一个Tenant中的某个User是否具有某个操作的权限。这个与相关的Role关联的User能执行什么操作,不能执行什么操作,就是通过Policy机制来实现的。对于Keystone服务来说,Policy就是一个JSON格式的文件,默认位置是/etc/keystone/policy.json。通过配置这个文件,Keystone认证服务实现了基于用户角色的权限管理。
在Keystone中,不仅只是用户与Keystone发生认证机制,OpenStack内部各服务之间的通信也要Keystone的参与。以用户创建实例虚拟机为例,用户首先向Keystone发送如用户密码之类的身份信息,Keystone验证成功后向用户配发Token,之后用户向Nova发出带有Token的实例创建请求,Nova接收到请求后向Keystone验证Token的有效性,Token被证实有效后,由Nova向Glance服务发出带有Token的镜像传输请求,Glance同样要到Keystone去验证Token的有效性,被证实有效后Glance向Nova正式提供镜像目录查询和传递服务,Nova获取镜像后继续向Neutron发送带有Token的网络创建服务,再由Neutron向Keystone求证Token的有效性,Token被证实有效后,Neutron允许Nova使用网络服务,Nova启动虚拟机成功,同时向用户返回创建实例成功的通知,图2-9为用户创建实例过程中Keystone的响应流程。
图2-9 Keystone实例创建认证过程
- 点赞
- 收藏
- 关注作者
评论(0)