1,Keystone 的架构
Keystone(OpenStack Identity Service)是 OpenStack 框架中负责管理身份验证, 服务规则和服务令牌功能的模块. Keystone 作为 Openstack 的核心模块, 为 Nova(计算),Glance(镜像),Swift(对象存储),Cinder(块存储),Neutron(网络)以及 Horizon(Dashboard)提供身份验证和授权服务. Keystone 架构如图 1-1 所示.
除了涉及到 Keystone 模块之外, 还有 KeystoneMiddleware 子项目, KeystoneMiddleware 是对 Keystone 提供的对令牌合法性进行验证的中间件, 缓存了相关的证书和令牌信息.
Keystone 项目本身, 除了后端的数据库, 主要包含了一个处理 RestFful 请求的 API 服务进程, 这些 API 涵盖了 Identity,Token,Catalogy 和 Plolicy 提供的各种各种服务, 不同的服务都是有相应的后端 Driver(BackendDriver)来实现.
2, Keystone 的基本概念
? User
User 即用户, 他们代表可以通过 keystone 进行访问的人, 服务或程序. Users 通过认证信息 (credentials, 如密码, API Keys 等) 进行验证.
? Tenant 新版叫 Project
Tenant 即租户, 它是各个服务中的一些可以访问的资源集合. 例如, 在 Nova 中一个 tenant 可以是一些机器, 在 Swift 和 Glance 中一个 tenant 可以是一些镜像存储, 在 Neutron 中一个 tenant 可以是一些网络资源. Users 默认的总是绑定到某些 tenant 上.
? Role
Role 即角色, Roles 代表一组用户可以访问的资源权限, 例如 Nova 中的虚拟机, Glance 中的镜像. Users 可以被添加到任意一个全局的或租户的角色中. 在全局的 role 中, 用户的 role 权限作用于所有的租户, 即可以对所有的租户执行 role 规定的权限; 在租户内的 role 中, 用户仅能在当前租户内执行 role 规定的权限.
? Service
Service 即服务, 如 Nova,Glance,Swift. 根据前三个概念 (User,Tenant 和 Role) 一个服务可以确认当前用户是否具有访问其资源的权限. 但是当一个 user 尝试着访问其租户内的 service 时, 他必须知道这个 service 是否存在以及如何访问这个 service, 这里通常使用一些不同的名称表示不同的服务.
? Endpoint
Endpoint, 翻译为 "端点", 我们可以理解它是一个服务暴露出来的访问点, 如果需要访问一个服务, 则必须知道他的 endpoint. 因此, 在 keystone 中包含一个 endpoint 模板, 这个模板提供了所有存在的服务 endpoints 信息. 一个 endpoint template 包含一个 URLs 列表, 列表中的每个 URL 都对应一个服务实例的访问地址, 并且具有 public,private 和 admin 这三种权限. public url 可以被全局访问(如 http://compute.example.com),private url 只能被局域网访问(如 http://compute.example.local),admin url 被从常规的访问中分离.
? Token
Token 是访问 openstack 资源的钥匙. 它是通过 Keystone 验证后的返回值, 在之后的与其他服务交互中只需要携带 Token 值即可. 用户已经确认身份后每个 Token 都有一个有效期, Token 只在有效期内是有效的.
3, 上述概念之间的关系
各种概念之间的关系如图 1-2 所示.
图 1-2 各个概念之间的关系
1, 租户下, 管理着一堆用户(人, 或程序).
2, 每个用户都有自己的 credentials(凭证)用户名 + 密码或者用户名 + API key, 或其他凭证.
3, 用户在访问其他资源 (计算, 存储) 之前, 需要用自己的 credential 去请求 keystone 服务, 获得验证信息 (主要是 Token 信息) 和服务信息(服务目录和它们的 endpoint).
4, 用户拿着 Token 信息, 就可以去访问特点的资源了.
4,keystone 在 Openstack 中的工作流程实例
Keystone 在 OpenStack 中的工作流程如图 1-3 所示.
图 1-3 keystone 在 OpenStack 中的工作流程
5, 实战: Keystone 的手动搭建
备注: 为方便操作, 密码均使用 openstack
5.1 控制节点的安装配置
数据库相关操作:
- [[email protected] ~]# MySQL -uroot -popenstack <<EOF
- create database keystone;
- GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'openstack'; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'openstack';
- EOF
安装相关包并配置
- [[email protected] ~]# yum -y install openstack-keystone httpd mod_wsgi -y
- [[email protected] ~]# VIM /etc/keystone/keystone.conf
- [database]
- connection = MySQL+pymysql://keystone:[email protected]/keystone
- [token]
- provider = fernet
初始化数据库, 创建数据结构:
- [[email protected] ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
- [[email protected] ~]# MySQL -hlocalhost -ukeystone -popenstack -e "use keystone;show tables;"
初始化 fernet 密钥存储库
- [[email protected] ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
- [[email protected] ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
创建 keystone 的服务端口:
[[email protected] ~]# keystone-manage Bootstrap --Bootstrap-password openstack --Bootstrap-admin-url http://controller:35357/v3/ --Bootstrap-internal-url http://controller:5000/v3/ --Bootstrap-public-url http://controller:5000/v3/ --Bootstrap-region-id RegionOne
配置 http 服务
- [[email protected] ~]# VIM /etc/httpd/conf/httpd.conf
- ServerName controller
给 / usr/share/keystone/wsgi-keystone.conf 创建一个软连接(通过 httpd 发布)
[[email protected] ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
服务启动并设置开机自启
[[email protected] ~]# systemctl enable httpd.service && systemctl start httpd.service
创建管理员账号
- [[email protected] ~]# VIM admin_openrc
- export OS_USERNAME=admin
- export OS_PASSWORD=openstack
- export OS_PROJECT_NAME=admin
- export OS_USER_DOMAIN_NAME=Default
- export OS_PROJECT_DOMAIN_NAME=Default
- export OS_AUTH_URL=http://controller:35357/v3
- export OS_IDENTITY_API_VERSION=3
5.2 创建域, 项目, 用户和角色
创建 service 租户
- [[email protected] ~]# source admin_openrc
- [[email protected] ~]# openstack project create --domain default --description "Service Project" service
- +-------------+----------------------------------+
- | Field | Value |
- +-------------+----------------------------------+
- | description | Service Project |
- | domain_id | default |
- | enabled | True |
- | id | d83f6daf971b4e9986a0062187593b56 |
- | is_domain | False |
- | name | service |
- | parent_id | default |
- | tags | [] |
- +-------------+----------------------------------+
创建 demo 租户
- [[email protected] ~]# openstack project create --domain default --description "Demo Project" demo
- +-------------+----------------------------------+
- | Field | Value |
- +-------------+----------------------------------+
- | description | Demo Project |
- | domain_id | default |
- | enabled | True |
- | id | f14a6d3761374969a246a0298c603ec3 |
- | is_domain | False |
- | name | demo |
- | parent_id | default |
- | tags | [] |
- +-------------+----------------------------------+
下面这句要分开执行, 要输入密码:
创建用户
- [[email protected] ~]# openstack user create --domain default --password-prompt demo
- User Password:
- Repeat User Password:
- +---------------------+----------------------------------+
- | Field | Value |
- +---------------------+----------------------------------+
- | domain_id | default |
- | enabled | True |
- | id | 24cb008774ef4261a615364101001f43 |
- | name | demo |
- | options | {
- } |
- | password_expires_at | None |
- +---------------------+----------------------------------+
- [[email protected] ~]# openstack role create user
- +-----------+----------------------------------+
- | Field | Value |
- +-----------+----------------------------------+
- | domain_id | None |
- | id | 754ea87392464f0e90dfac519d9002d5 |
- | name | user |
- +-----------+----------------------------------+
将 demo 用户添加到 demo 角色中
- [[email protected] ~]# openstack role add --project demo --user demo user
- [[email protected] ~]# openstack user list
- +----------------------------------+-------+
- | ID | Name |
- +----------------------------------+-------+
- | 24cb008774ef4261a615364101001f43 | demo |
- | 6b9ad33971ae453983f4290cb4c0c380 | admin |
- +----------------------------------+-------+
- [[email protected] ~]# openstack project list
- +----------------------------------+---------+
- | ID | Name |
- +----------------------------------+---------+
- | d83f6daf971b4e9986a0062187593b56 | service |
- | db82536ef7124608b3f3931ba4ce9615 | admin |
- | f14a6d3761374969a246a0298c603ec3 | demo |
- +----------------------------------+---------+
- [[email protected] ~]# openstack role list
- +----------------------------------+-------+
- | ID | Name |
- +----------------------------------+-------+
- | 754ea87392464f0e90dfac519d9002d5 | user |
- | c5930f0961104f12aaaab694bd5c8639 | admin |
- +----------------------------------+-------+
- [[email protected] ~]# openstack endpoint list
- ---------+-----------+-----------------------------+
- | ID | Region | Service Name | Service Type | Enabled | Interface | URL |
- ---------+-----------+-----------------------------+
- | 01ccfab5acb0407888620ca056f93dfe | RegionOne | keystone | identity | True | admin | http://controller:35357/v3/ |
- | 4c2bd465260043039bcf7bf78776dd6b | RegionOne | keystone | identity | True | internal | http://controller:5000/v3/ |
- | bdc34c7c99bb432eb13fa83a45d0065e | RegionOne | keystone | identity | True | public | http://controller:5000/v3/ |
- ---------+-----------+-----------------------------+
5.3 验证
[[email protected] ~]# unset OS_AUTH_URL OS_PASSWORD
下面这句要分开执行, 要输入 admin 用户的密码:
- [[email protected] ~]# openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name admin --os-username admin token issue
- Password:
- +------------+--------------------------------------------+
- | Field | Value |
- +------------+--------------------------------------------+
- | expires | 2020-03-16T16:37:24+0000 |
- | id | gAAAAABeb5009UNgv97bPsYxet9Vz3UG6ywl3L-u04rJY1M7uO6Vq9NLhzejFLnEA6vcbR1nsmu5iVh0-Z32pm3p0UDSMgoAMirHcYnHaJXesly2Gh1tvnz5dKAzh31vbXW-gdMcGMxe7geqPmQMKSHKXmXFEN1F9H5elKw_eyNIhWCyCwe6_iA |
- | project_id | db82536ef7124608b3f3931ba4ce9615 |
- | user_id | 6b9ad33971ae453983f4290cb4c0c380 |
- +------------+---------------------------------------------+
下面这句要分开执行, 要输入 demo 用户的密码:
[[email protected] ~]# openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name demo --os-username demo token issue
执行结果:
- Password:
- +------------+------------------------------------------------+
- | Field | Value |
- +------------+--------------------------------------+
- | expires | 2020-03-16T16:37:58+0000 |
- | id | gAAAAABeb51Wsct3Yi_BPrfj1isFihwQKgV_h-I1H8gvoT4Grvesol3lK_RqolZHV07eUd5l0HYrBBqdZaowJq_QbvzpjEtWG4BbyZlNg0mrI1zeIeAZZdkcdkQA7Pb9iZ7twqJtVuTsdd2z7SzoAcIqd47uMPjcHD-Veo2xRZRXtnCwDw1IlWE |
- | project_id | f14a6d3761374969a246a0298c603ec3 |
- | user_id | 24cb008774ef4261a615364101001f43 |
- +------------+------------------------------------------------------+
5.4 创建 openstack 客户端的脚本环境
创建管理员的账号
- [[email protected] ~]# VIM admin_openrc
- export OS_PROJECT_DOMAIN_NAME=Default
- export OS_USER_DOMAIN_NAME=Default
- export OS_PROJECT_NAME=admin
- export OS_USERNAME=admin
- export OS_PASSWORD=openstack
- export OS_AUTH_URL=http://controller:35357/v3
- export OS_IDENTITY_API_VERSION=3
- export OS_IMAGE_API_VERSION=2
创建 demo 用户的账号
- [[email protected] ~]# VIM demo_openrc
- export OS_PROJECT_DOMAIN_NAME=Default
- export OS_USER_DOMAIN_NAME=Default
- export OS_PROJECT_NAME=demo
- export OS_USERNAME=demo
- export OS_PASSWORD=openstack
- export OS_AUTH_URL=http://controller:5000/v3
- export OS_IDENTITY_API_VERSION=3
- export OS_IMAGE_API_VERSION=2
使用脚本验证
- [[email protected] ~]# source admin_openrc
- [[email protected] ~]# openstack token issue
可获取 token admin 用户的 token
- [[email protected] ~]# source demo_openrc
- [[email protected] ~]# openstack token issue
可以获取 token demo 用户的 token
至此完成 keystone 的安装, 下一章节简介 Glance 组件, 以及它的安装过程
来源: http://www.bubuko.com/infodetail-3485081.html