使用服务目录获取端点 URL¶
https://blueprints.launchpad.net/nova/+spec/use-service-catalog-for-endpoints
使用服务目录查找端点 URL,而不是从 nova 配置文件中读取。
问题描述¶
Nova 使用 nova.conf 文件中的配置参数来获取与 OpenStack 部署中的其他服务的 API 端点。这些服务主要包括 Glance、Cinder 和 Neutron 等服务。
理想情况下,这些 API 端点不应该被硬编码。我们应该有一种简单且一致的方式来检索 Nova 中的这些端点 URL。
本规范重点在于使用 Keystone 服务目录在 Nova 与 Cinder、Glance、Neutron 等交互时获取 API 端点。
服务目录由一个服务列表组成,这些服务代表 OpenStack 部署中的服务。每个服务都与一个或多个端点相关联。
用例¶
作为操作员,我希望配置服务目录,并让我的服务使用它来相互交互,这样我就不需要单独管理项目间的连接。
提议的变更¶
服务目录提供所有可用服务的列表,以及有关区域、API 端点和 API 版本的其他信息。它有助于有效地查找有关服务的相关信息,例如如何配置服务之间的通信。
目前,Nova 使用 nova.conf 文件中的配置设置来获取端点 URL。每个服务在 nova.conf 中都有选项,这些选项代表服务端点或(例如,在 cinder 的情况下)发现它们的方式。选项名称和格式因每个组而异。例如,在 nova.conf 中,有诸如
[glance]
api_servers = http://127.0.0.1:9292,http://glance2:9292
[neutron]
url = http://127.0.0.1:9696
[ironic]
api_endpoint = http://127.0.0.1:6385
[cinder]
catalog_info = volumev3:cinderv3:publicURL
Keystoneauth 提供了一种简单且一致的方式,可以从 Keystone 服务目录获取 API 端点,而不是在 conf 文件中进行配置。
为了使检索 API 端点保持一致,我们可以在 Nova 中添加一个新的方法 get_service_url()。为了建立与任何其他服务的通信,Nova 将调用此方法来查找 API 端点。
该方法将首先查看现有的配置选项,例如 [neutron]url,如果配置文件中存在这些选项,则使用这些选项。这样做是为了确保向后兼容性和平滑的升级体验。但是,旧样式的选项将在 Pike 中被弃用,设置它们将记录警告。旧的已弃用的端点选项将在 Queens 版本中删除。
例外情况是 [glance]api_servers,它将继续受到支持。Glance 需要一种指定服务端点列表的方式,而服务目录中没有可用的机制。
如果未找到现有的配置选项或没有值,则该方法将使用 keystoneauth 从 Keystone 服务目录中查找与 conf 组对应的 API 端点。
支持 get_service_url() 的 conf 组将包括以下选项集,基于 keystoneauth1.adapter.Adapter
service_typeservice_nameinterfaceregion_nameendpoint_override
如果未提供 service_type,将查阅从 conf 组名到相应服务类型的映射,并依次尝试每个映射,直到找到结果。(此映射最初可能是硬编码的,但最终应迁移到使用 os-client-config 或 service-types-authority。)
例如,默认映射的子集可能是
{
'glance': ['image'],
'cinder': ['block-storage', 'volumev3', 'volumev2', 'volume'],
'ironic': ['baremetal'],
'neutron': ['network'],
}
如果为 conf 组 cinder 调用 get_service_url(),并且 [cinder]service_type 在 conf 中为空或缺失,则该方法将尝试使用 service_type='block-storage'、然后 service_type='volumev3' 等进行查找。
如果未提供 interface,将依次尝试 internal、admin 和 public,直到找到结果。(值得注意的是,publicURL 是迄今为止一直使用的形式,但 public 是 keystone v3 版本的接口。配置应接受两者,但文档应更新以显示使用 public 的示例。)
Conf 组还必须包含 keystone 身份验证和会话选项,或者可以将现有的身份验证和/或会话对象传递给 get_service_url()。
通过添加此更改,我们将拥有从 Nova 连接到其他服务的一致方式。
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
除了 [glance]api_servers 之外,旧的端点配置选项将在 Pike 中被弃用,并在 Queens 中删除。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Eric Fried (efried@us.ibm.com)
- 其他贡献者
无
工作项¶
在
keystoneauth1.loading中添加方法,以注册和列出Adapterconf 选项,其方式类似于现有用于会话和身份验证的方法。在 Nova 中添加一个实用程序方法来从服务目录获取端点。
更新 conf 组以包含
Adapterconf 选项。更新 conf 组(Glance 除外)以弃用现有的与端点相关的选项。
更新使用端点的 Nova 代码,如果未指定旧的 conf 选项,则利用新的实用程序方法。
(Queens)删除已弃用的与端点相关的 conf 选项,以及使用它们的代码分支。
依赖项¶
需要在
keystoneauth和nova之间协调更改。
测试¶
需要添加单元测试。
文档影响¶
更新管理员指南以进行配置相关的更改。
参考资料¶
无
历史¶
发布名称 |
描述 |
|---|---|
Pike |
引入 |