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 ...
随机推荐
- Apache JMeter
https://en.wikipedia.org/wiki/Apache_JMeter Apache JMeter 是 Apache 的一个项目,它是一个负载测试工具可以用于进行各种服务器的性能测试分 ...
- ESET激活码,可用。
ESET Internet Security 12.1.31.0 Finalhttps://download.eset.com/com/eset/apps/home/eis/windows/v12/1 ...
- 如何使用Charles对手机进行抓包
步骤:(如下为ios步骤,安卓类似) 1)Mac安装Charles,保证手机与电脑在同一wifi(若没有WiFi时,Mac.MacBook,etc 自带热点功能) 2)在手机当前连接的wifi设置里配 ...
- viewport的深入调研
1.viewport概念:viewport就是设备的屏幕上能用来显示我们的网页的那一块区域. viewport的默认值980px或1024px等,以下是浏览器的默认viewport宽度 2.css中的 ...
- go 学习之函数
个人把go函数理解分三种: 1.普通函数 普通函数声明: func name(parameter-list) (result-list) { body} package main import &qu ...
- Add a system call on Ubuntu 13.04(x64) with x86_64
We added a system call to modify idt table, then programed it in modify_idt.c 1. Put our modify_idt. ...
- Excel_PowerQuery——秒杀Vlookup的表合并
终于,Power Query的第二弹来了,距离上一次PQ更博,已经将近半年. Excel_PoweQuery——条件计数.条件求和 使用PQ进行表格数据的连接合并是一件畅快的事情. 下面的数据是我随机 ...
- Centos 进入recovery模式,单用户模式
1.重启服务器,在选择内核界面使用上下箭头移动 2.选择内核并按“e” 3.找到下面这行 4.修改 这里要删除掉rhgb quiet,如下图 5.使用“ctrl + x” 来重启服务器就可以了,重启后 ...
- redis 主从复制+读写分离+哨兵
1.redis读写分离应用场景 当数据量变得庞大的时候,读写分离还是很有必要的.同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能.redis ...
- console.log的另一种用法
// console.log用法 var foo, bar; console.log(`foo's type: ${foo}`, `bar's type: ${bar}`); 输出: