共计 2049 个字符,预计需要花费 6 分钟才能阅读完成。
关于 OpenStack Keystone 模块,我将从整体架构与功能,用户信息管理,认证服务 3 个模块用 3 篇文章进行分析。
1. keystone 的基本功能
keystone 作为 OpenStack 的 Identity Service,提供了用户信息管理和完成各个模块认证服务。
用户信息管理:user/tenant 基本信息,tenant 管理
认证服务:登录认证,各个组件 API 的权限控制
2.keystone 的架构
既然 keystone 为各个模块提供认证服务,所以各个模块与 keystone 都有所交互。其中登录认证体现在用户访问各个组件的 API 时,调用了 WSGI 框架的 authtoken filter,该 filter 最调用 keystoneclient,最终通过 keystone 验证 token,完成对用户的登录认证。如果认证失败,用户将不能访问该 API。
以 nova 为例,authtoken filter 在 /etc/paste.ini 目录中(如果不熟悉 WSGI 框架,暂且忽略之)
keystone 在 openstack 的位置如下:
3. 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 里面的概念很多,其中最重要的是 User 和 Tenant。其它的概念是由于安全和权限等因素引入。通俗的说:
如果把宾馆比作为 Tenant,住宿的人就是 User,而宾馆就是 Tenant,宾馆可以提供多种诸如住宿、娱乐、饮食等多种服务(Service),具体来说,住宿是一种具体的服务(Endpoint)。就住宿而言,有普通间和总统套房,如果你的 VIP 等级(Role)高,你可以享受到豪华的总统套房。入住前,我们需要拿身份证开房(Credential),认证身份证不是冒牌货后(Authenticaiton),会给你一个房卡(Token),然后你拿着房卡,就可以进入房间和享受各种服务。
User | 住宾馆的人 |
Credentials | 身份证 |
Authentication | 认证你的身份证 |
Token | 房卡 |
Tenant | 宾馆 |
Service | 宾馆可以提供的服务类别,比如,饮食类,娱乐类 |
Endpoint | 具体的一种服务,比如吃烧烤,打羽毛球 |
Role | VIP 等级,VIP 越高,享有越高的权限 |
4. keystone 的访问流程
以创建一个虚拟机(server)为例,结合下图简述下 keystone 在 openstack 的访问流程。
1)用户 Alice 通过自己的户名和密码向 keystone 申请 token,keystone 认证用户名和密码后,返回 token1
2)Alice 通过 token1 发送 keystone 查询他所拥有的租户,keystone 验证 token1 成功后,返回 Alice 的所有 Tenant
3) Alice 选择一个租户,通过用户名和密码申请 token,keystone 认证用户名、密码、tenant 后,返回 token2。(其实 1、2 步仅仅是为了查询 tenant,如果已经知道 tenant,可以忽略 1、2 步)
4)Alice 通过 token2 发送创建 server 的请求,keystone 验证 token2(包括该 token 是否有效,是否有权限创建虚拟机等) 成功后,然后再把请求下发到 nova,最终创建虚拟机