首页 文章 精选 留言 我的

精选列表

搜索[部署],共10000篇文章
优秀的个人博客,低调大师

Openstack组件部署 — 将一个自定义 Service 添加到 Keystone

目录 目录 Keystone 认证流程 让 Keystone 为一个新的项目 Service 提供验证功能 最后 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 中.

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册