目录

Keystone 认证流程

  1. User 使用凭证(username/password) 到 keystone 验证并获得一个临时的 Token 和 Generic catalog(全局目录),临时的 Token 会存储在 keystone-client(cache UUID locally) 和 keystone-backend 中。
  2. User 使用这个临时 Token 发送给 keystone 并获得一个该 User 能访问的 Tenants 列表
  3. User 再跟 keystone 发送一个请求,表明希望访问的 Tenants
  4. keystone 就会向 User 发送一个管理这个 Tenants 的 Services 列表和允许访问这个 Tenants 的 Token (Tenants Token)
  5. User 会通过这个 Services 和 Generic catalog(全局目录) 映射找到 Services 的 endpoint,并通过 endpoint 找到实际 Services 组件的位置
  6. 然后 User 再拿着 Tenant Token 和 endpoint 来访问实际上的 Service 组
  7. Service 组件会拿着这个 User-Tennat Token 对到 keystone 做进一步的验证(Openstack 要保证每一步操作都是安全的)
  8. 如果通过了 7. 的验证的话,keystone 会返回一系列的确认信息和附加信息(User 希望操作的内容)给 Services
  9. 最后 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的更多相关文章

  1. Openstack组件部署 — Keystone Install & Create service entity and API endpoints

    目录 目录 前文列表 Install and configure Prerequisites 先决条件 Create the database for identity service 生成一个随机数 ...

  2. Openstack组件部署 — Netwotking service组件介绍与网络基本概念

    目录 目录 前文列表 Openstack Networking serivce 基本的Neutron概念 Neutron的抽象对象 网络networks 子网subnets 路由器routers 端口 ...

  3. Openstack组件部署 — keystone(domain, projects, users, and roles)

    目录 目录 前文列表 Create a domain projects users and roles domain projects users and roles的意义和作用 Create the ...

  4. Openstack组件部署 — Keystone功能介绍与认证实现流程

    目录 目录 前文列表 Keystone认证服务 Keystone认证服务中的概念 Keystone的验证过程 简单来说 前文列表 Openstack组件部署 - Overview和前期环境准备 Ope ...

  5. Openstack组件部署 — Networking service_安装并配置Controller Node

    目录 目录 前文列表 前提条件 网络环境 完成下面的步骤以创建数据库 创建service credentials服务凭证 创建Neutron的API Endpoints 配置自服务网络 安装网络组件 ...

  6. Openstack组件部署 — Nova_Install and configure a compute node

    目录 目录 前文列表 Prerequisites 先决条件 Install and configure a compute node Install the packages Edit the etc ...

  7. Openstack组件部署 — Nova_安装和配置Controller Node

    目录 目录 前文列表 Prerequisites 先决条件 To create the databases To create the service credentials Create the C ...

  8. Openstack组件部署 — Networking service_Compute Node

    目录 目录 前文列表 安装组件 配置通用组件 配置自服务网络选项 配置Linux 桥接代理 配置Nova使用网络 完成安装 验证操作Execute following commands on Cont ...

  9. Openstack组件部署 — Nova overview

    目录 目录 前文列表 前言 Compute service overview Nova 的组件 nova-api service nova-api-metadata service nova-comp ...

随机推荐

  1. Linux 下查看操作系统信息

    1.uname -a  可显示电脑以及操作系统的相关信息. 2.输入"cat /proc/version",说明正在运行的内核版本. 3.输入"cat /etc/issu ...

  2. jQuery-resize和scroll的性能优化

    ## 下面是进行测试和研究怎么实现的用的 Document 改变页面大小试试 Document 滚动滚动条试试

  3. centos7下zookeeper安装配置

    1.下载zookeeper文件 cd /opt/ wget http://mirrors.hust.edu.cn/apache/zookeeper/stable/zookeeper-3.4.9.tar ...

  4. 20150709---Web中GridView控件根据绑定的数据显示不同的图片

    示例图: 根据数据判断,显示各种不同的图片 该列的前端代码: <asp:TemplateField HeaderText="审图"> <ItemTemplate& ...

  5. 图解HTTP 读书笔记

    1 了解Web及网络基础 1.1   HTTP/1.0 HTTP正式作为标准被公布实在1996年五月,版本命名为HTTP/1.0,记载于RFC1945.至今仍广泛使用在服务器端. RFC1945 – ...

  6. The 13th Chinese Northeast Collegiate Programming Contest(B C E F H J)

    B. Balanced Diet 思路:把每一块选C个产生的价值记录下来,然后从小到大枚举C. #include<bits/stdc++.h> using namespace std; ; ...

  7. python基本数据类型的问题

    关于python中的索引和切片: 在之前看的视屏中是这么描述的:索引值以 0 为开始值,-1 为从末尾的开始位置. 然后今天忽然有了醍醐灌顶的感觉,索引值以 0 为开始值: 就是说从左向右以0开始递增 ...

  8. [心得]編寫Linux kernel modules時惱人的Makefile

    在一台機器上寫好這樣的Makefile用以編譯modules obj-m:=hello.o CURRENT_PATH:=$(shell pwd) VERSION_NUM:=$(shell uname ...

  9. ftrace 使用方法

    1. 追蹤Kernel function (以schedule()示範) 先至 /sys/kernel/debug/tracing# cat available_tracers 確定有無 函式追蹤器( ...

  10. 讲真,下次打死我也不敢随便改serialVersionUID了

    讲真,下次打死我也不敢随便改serialVersionUID了 码农沉思录 码农沉思录 微信号 code-thinker 功能介绍 笔者为国内某知名企业不知名码农,专注Java Web领域多年,有丰富 ...