使用服务目录获取端点 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_type

  • service_name

  • interface

  • region_name

  • endpoint_override

如果未提供 service_type,将查阅从 conf 组名到相应服务类型的映射,并依次尝试每个映射,直到找到结果。(此映射最初可能是硬编码的,但最终应迁移到使用 os-client-configservice-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,将依次尝试 internaladminpublic,直到找到结果。(值得注意的是,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 中添加方法,以注册和列出 Adapter conf 选项,其方式类似于现有用于会话和身份验证的方法。

  • 在 Nova 中添加一个实用程序方法来从服务目录获取端点。

  • 更新 conf 组以包含 Adapter conf 选项。

  • 更新 conf 组(Glance 除外)以弃用现有的与端点相关的选项。

  • 更新使用端点的 Nova 代码,如果未指定旧的 conf 选项,则利用新的实用程序方法。

  • (Queens)删除已弃用的与端点相关的 conf 选项,以及使用它们的代码分支。

依赖项

  • 需要在 keystoneauthnova 之间协调更改。

测试

  • 需要添加单元测试。

文档影响

  • 更新管理员指南以进行配置相关的更改。

参考资料

历史

修订版

发布名称

描述

Pike

引入