Openstack组件部署 — 将一个自定义 Service 添加到 Keystone
目录
Keystone 认证流程
- User 使用凭证(username/password) 到 keystone 验证并获得一个临时的 Token 和 Generic catalog(全局目录),临时的 Token 会存储在 keystone-client(cache UUID locally) 和 keystone-backend 中。
- User 使用这个临时 Token 发送给 keystone 并获得一个该 User 能访问的 Tenants 列表
- User 再跟 keystone 发送一个请求,表明希望访问的 Tenants
- keystone 就会向 User 发送一个管理这个 Tenants 的 Services 列表和允许访问这个 Tenants 的 Token (Tenants Token)
- User 会通过这个 Services 和 Generic catalog(全局目录) 映射找到 Services 的 endpoint,并通过 endpoint 找到实际 Services 组件的位置
- 然后 User 再拿着 Tenant Token 和 endpoint 来访问实际上的 Service 组
- Service 组件会拿着这个 User-Tennat Token 对到 keystone 做进一步的验证(Openstack 要保证每一步操作都是安全的)
- 如果通过了 7. 的验证的话,keystone 会返回一系列的确认信息和附加信息(User 希望操作的内容)给 Services
- 最后 Services 执行一系列的操作
让 Keystone 为一个新的项目 Service 提供验证功能
- 在新项目的配置文件中指定使用 Keytone 认证方式
[keystone_authtoken]
auth_uri = http://<keystone_service_ip>:5000
project_domain_id = default
project_name = service
user_domain_id = default
password = fanguiju
username = <new_service_name>
auth_url = http://<keystone_service_ip>:35357
auth_plugin = password
该配置项的意义:
Because most OpenStack services must access the Identity Service, you must configure the IP address of the keystone server to be able to access it. You must also configure the admin_tenant_name, admin_user, and admin_password options for each service to work.
简而言之, 就是让每个不同的 Openstack Service 都使用一个特定的注册在 Keystone 中的 User 去访问 Keystone Service 并请求获得验证服务. 并且该配置项还指定了该项目属于的 Project(资源), 也就是早期版本中的 Tenant. 这里设置的是: 该项目属于 Tenant service. 这个在之后我们会使用到.
- 所以, 我们首先需要为这个新的项目在 Keystone 中注册一个用户.
fanguiju@fanguiju:~/devstack$ keystone user-create --name <new_service_name> --pass fanguiju --enabled true
fanguiju@fanguiju:~/devstack$ openstack user list
+----------------------------------+----------+
| ID | Name |
+----------------------------------+----------+
| 135b2cb86962401c82044fd4ca9daae4 | admin |
| 40d75aebc9c34978b23081f8c8ca9af5 | <new_service_name> |
| 626110b81b2b4509becafc1964121b7f | nova |
| 85c6b9fa9127439880276f070c60dad6 | demo |
| 887a5e92599847698c1f601d0f337421 | glance |
| 9dc44b1518184c2cacecb2d2f9f8b050 | alt_demo |
| b340851dd5a24eb39a2383bb3f1ff36c | cinder |
+----------------------------------+----------+
- 因为新的项目的Service 属于 Tenant service, 所以需要在这个 Tenant 中注册该项目的 Service
fanguiju@fanguiju:~/devstack$ openstack service create --name <new_service_name> --description "<new_service_name> Service" recovery
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | <new_service_name> Service |
| enabled | True |
| id | c22ebcb4cdd24114a2d581ce18cdd0ca |
| name | <new_service_name> |
| type | recovery |
+-------------+----------------------------------+
fanguiju@fanguiju:~/devstack$ openstack service list
+----------------------------------+-------------+----------------+
| ID | Name | Type |
+----------------------------------+-------------+----------------+
| 1cfc85bed3e84f2b93c5a9b9c293e1ed | cinder | volume |
| 348c1b372deb4c3fa817d340b439728b | ec2 | ec2 |
| 3fa397c2b5d647389edae03515c64583 | nova | compute |
| 41cfab784e6942189c8dc48fbda59c4e | glance | image |
| 7b534b13bd024a04b44f6eeee882208a | keystone | identity |
| 9b8de3d592054fc9b6b992be056ffd0a | nova_legacy | compute_legacy |
| aed90494567e4deababddd494fc33338 | cinderv2 | volumev2 |
| c22ebcb4cdd24114a2d581ce18cdd0ca | <new_service_name> | recovery |
+----------------------------------+-------------+----------------+
NOTE: Name 是用于显示的标识, 实际在 Servces 之间生效的是 Type .
- 在 Tenant service 中注册完之后, 还需要创建 endpoint 记录, 让不同项目的 Services 之间可以定位到该新项目的服务
fanguiju@fanguiju:~/devstack$ openstack endpoint create --region RegionOne <new_service_name> --publicurl 'http://<new_service_ip>:8760/v1/$(tenant_id)s' --internalurl 'http://<new_service_ip>:8760/v1/$(tenant_id)s' --adminurl 'http://<new_service_ip>:8760/v1/$(tenant_id)s'
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| adminurl | http://<new_service_ip>:8760/v1/$(tenant_id)s |
| id | 3c35ecc67e7444648dd079d5c0562f5b |
| internalurl | http://<new_service_ip>:8760/v1/$(tenant_id)s |
| publicurl | http://<new_service_ip>:8760/v1/$(tenant_id)s |
| region | RegionOne |
| service_id | 513308f8e46944ac8baf1c9758062660 |
| service_name | <new_service_name> |
| service_type | recovery |
+--------------+------------------------------------------+
到目前为止, 其实还没有完成新项目 Service 的添加, 因为现在为止在 Keystone 中新注册的 User 是没有权限访问这个 Tenant 的, 那么自然也无法获取 Tenant 中的 Services 列表. 所以无法为新项目完成验证的功能.
- 将 User 绑定到 Tenant 和 Role 中
# 先获取 <new_service_id>/<service_id>/<member_id>
openstack user list # <new_service_id>
keystone tenant-list # <service_id>
openstack role list # <member_id>
# 将用户绑定到 Relo admin 和 Tenant service 中
keystone user-role-add --user <new_service_id> --role <member_id> --tenant <service_id>
keystone user-role-add --user <new_service_id> --role <admin_id> --tenant <service_id>
- 验证 User 的权限
fanguiju@fanguiju:~/devstack$ source openrc <new_user> service
fanguiju@fanguiju:~/devstack$ keystone user-list
+----------------------------------+----------+---------+----------------------+
| id | name | enabled | email |
+----------------------------------+----------+---------+----------------------+
| 135b2cb86962401c82044fd4ca9daae4 | admin | True | |
| 9dc44b1518184c2cacecb2d2f9f8b050 | alt_demo | True | alt_demo@example.com |
| b340851dd5a24eb39a2383bb3f1ff36c | cinder | True | |
| 85c6b9fa9127439880276f070c60dad6 | demo | True | demo@example.com |
| 40d75aebc9c34978b23081f8c8ca9af5 | <new_service_user> | True | |
| 887a5e92599847698c1f601d0f337421 | glance | True | |
| 626110b81b2b4509becafc1964121b7f | nova | True | |
+----------------------------------+----------+---------+----------------------+
使用 <new_user> 也能够访问完全的 User list, 表示该 User 具有了 admin 的权限.
最后
小结:
1. Openstack Service 需要一个注册在 Keystone 中的 User 来访问 Keystone service
2. Openstack Service 应该属于 Tenant service 中, 属于服务资源.
3. 这个 User 对 Tenant service 应该具有 admin 或者 member 权限, 所以需要将 User/ Tenant service/Role admin 绑定到一起.
4. 为了 Openstack services 之间可以相互访问, 需要在 service 的 URL 注册到 endpoint 中.
Openstack组件部署 — 将一个自定义 Service 添加到 Keystone的更多相关文章
- Openstack组件部署 — Keystone Install & Create service entity and API endpoints
目录 目录 前文列表 Install and configure Prerequisites 先决条件 Create the database for identity service 生成一个随机数 ...
- Openstack组件部署 — Netwotking service组件介绍与网络基本概念
目录 目录 前文列表 Openstack Networking serivce 基本的Neutron概念 Neutron的抽象对象 网络networks 子网subnets 路由器routers 端口 ...
- Openstack组件部署 — keystone(domain, projects, users, and roles)
目录 目录 前文列表 Create a domain projects users and roles domain projects users and roles的意义和作用 Create the ...
- Openstack组件部署 — Keystone功能介绍与认证实现流程
目录 目录 前文列表 Keystone认证服务 Keystone认证服务中的概念 Keystone的验证过程 简单来说 前文列表 Openstack组件部署 - Overview和前期环境准备 Ope ...
- Openstack组件部署 — Networking service_安装并配置Controller Node
目录 目录 前文列表 前提条件 网络环境 完成下面的步骤以创建数据库 创建service credentials服务凭证 创建Neutron的API Endpoints 配置自服务网络 安装网络组件 ...
- Openstack组件部署 — Nova_Install and configure a compute node
目录 目录 前文列表 Prerequisites 先决条件 Install and configure a compute node Install the packages Edit the etc ...
- Openstack组件部署 — Nova_安装和配置Controller Node
目录 目录 前文列表 Prerequisites 先决条件 To create the databases To create the service credentials Create the C ...
- Openstack组件部署 — Networking service_Compute Node
目录 目录 前文列表 安装组件 配置通用组件 配置自服务网络选项 配置Linux 桥接代理 配置Nova使用网络 完成安装 验证操作Execute following commands on Cont ...
- Openstack组件部署 — Nova overview
目录 目录 前文列表 前言 Compute service overview Nova 的组件 nova-api service nova-api-metadata service nova-comp ...
随机推荐
- Linux sudo 详解
简单的说,sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码.严谨些说,sudo 允许一个已授权用户以超级用户或者其它用户的角色 ...
- IDEA默认快捷键
idea常用快捷键大全 Idea常用快捷键大全,拿小本本记下来,忘记了可以方便查找.编写代码Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最 ...
- webbrowser 防止读取 缓存
http://bbs.csdn.net/topics/240011502 引用 3 楼 kelei0017 的回复: Delphi(Pascal) codeprocedure TInformation ...
- FTP- Download, upload, Delete & find files
Public Function Func_FTP(Operation,ServerName,UserName,Password,RemoteLocation,LocalLocation) 'Set u ...
- OKVIS框架之前端
1. 数据流入 在okvis_app_sychronous.cpp内,把IMU和图像数据加入到各自的队列里.由ThreadedKFVio负责队列的各种操作.作者对队列加了特殊功能,保证队列是线程安全的 ...
- SqlServer 行转列 查询 并 导出 到 Excel 中 自动换行
SELECT A.Hawb, ( SELECT GoodsNameCn+char(10) FROM HawbBody hl WHERE hl.Hawb=A.Hawb FOR XML PATH('') ...
- C#log4net的使用
一,下载log4net.dll,在项目中添加引用 二,在站点根目录添加,配置文件(log4net.xml), <file value="logs/logfile.txt"/& ...
- 【记录】解决前端form表单回车禁止刷新页面
最近弄前端 有form表单的情况下 按回车会自动刷新当前页面. 现记录解决方案如下: 1.去掉表单 2.不要让表单中只有一个文本框(增加一个隐藏的文本框就行) 3.以上两点都不想使用,那么就还可以在表 ...
- 大哥带我走渗透ii--时间盲注,布尔盲注
5/27 基于布尔的盲注 我连题目都看不懂555,先去补充一点知识.https://blog.csdn.net/weixin_40709439/article/details/81355856 返回的 ...
- 使用python开启你的opencv之旅---图像的读入,存储
python的便捷是如此的引人着迷,而opencv给python提供的接口使我们能够使用python来快速验证我们的想法,或者与别的模块快速结合,在这个系列文章我会通过jupyter notebook ...