使用 keystoneauth1 适配器进行端点¶
https://blueprints.launchpad.net/nova/+spec/use-ksa-adapter-for-endpoints
keystoneauth1 适配器用于端点发现和版本控制,自 keystoneauth1 3.x.x 版本发布以来,已经整合并可用。目前正在推动在任何需要端点发现的情况下,一致地使用这些机制。此举旨在利用适配器,使 Nova 在其使用的各种服务中实现端点发现的一致性:身份验证 (keystone)、镜像 (glance)、块存储 (cinder)、网络 (neutron)、裸机 (ironic) 和放置 (placement)。
注意
这是在 蓝图 use-service-catalog-for-endpoints 基础上持续发展的工作。
问题描述¶
Nova 使用来自 nova.conf 文件的 API 端点配置参数,与 OpenStack 部署中的其他服务进行通信。这些服务包括
身份验证 (keystone)
镜像 (glance)
块存储 (cinder)
网络 (neutron)
裸机 (ironic)
密钥管理 (barbican)
放置 (placement)
目前,存在多种不同的方式来发现和配置服务端点。例如,不同的服务使用不同的配置键来表示相同的端点特征;例如,端点 URL 可以指定为
裸机,作为一个名为
[ironic]api_endpoint的单个 URIOpt网络,作为一个名为
[neutron]url的单个 URIOpt镜像,作为一个名为
[glance]api_servers的 URL 字符串列表 (实际上,这是设置镜像服务端点的唯一方式)块存储,由一个使用上下文对象中的值进行插值的 StrOpt 模板 (
[cinder]endpoint_template)密钥管理,作为一个名为
[barbican]barbican_endpoint的单个 StrOpt放置和身份验证,根本没有 (不允许端点覆盖)
此举的目的是在 Nova 中暴露一个清晰、一致的端点发现机制;并对 Nova 与其通信的所有服务使用该机制。
用例¶
作为操作员,我希望有一种一致的方式来配置我的服务的端点发现。
作为维护代码的开发人员,我只想学习一种服务端点设置和配置的范例。
作为创建与新服务通信的代码的开发人员,我希望能够采用与其他服务相同的方式。
提议的变更¶
keystoneauth1 库提供了一种简单而一致的方式来配置服务的端点发现。keystoneauth1 的使用者需要执行以下步骤
- # 在
oslo_config设置中,注册 keystoneauth1 的 conf 选项 auth、Session 和 Adapter 对象通过
keystoneauth1.loading.register_*_conf_options。- # 在运行时创建 Adapter,通过链式调用
keystoneauth1.loading.load_*_from_conf_options来加载 auth、Session 和 Adapter,并将注册的 conf 组提供给这些方法。(或者,可以向 Adapter 加载器提供现有的 auth 和/或 Session。)- # 使用结果 Adapter 的发现方法,例如
get_endpoint,根据需要。
注意
也可以直接使用 Adapter 与 REST 服务进行通信,通过标准方法 (get、post 等)。未来的工作可能会着重消除每个服务的自定义客户端,而支持这种机制。
从操作员的角度来看,这提供了一种一致的方式来配置服务端点。对于每种服务类型,配置选项具有相同的名称和语义。(对于某些服务类型,可以从上下文中获取身份验证信息,从而消除身份验证配置的需要。)
为了使开发人员体验一致,我们建议在 Nova 中添加一个新方法 get_ksa_adapter()。为了与任何其他服务建立通信,Nova 将调用此方法并使用结果 Adapter 来发现端点数据。此方法将使用 服务类型权威机构 通过 os-service-types 将服务类型名称映射到基于项目名称的各自的 conf 组(例如,服务类型 image 映射到 glance 项目,因此映射到 [glance] conf 组)。
注意
在未来的某个时候,应该努力将 conf 组从项目名称重命名为各自的服务类型名称。这不在本蓝图的范围内。
在 Queens 周期中,现有的配置选项和发现机制将继续受到支持。如果指定了遗留配置选项,则它将优先;否则,将使用新机制。这是为了确保向后兼容性和平滑的升级体验。但是,旧样式的选项将在 Queens 中被弃用,设置它们将记录警告。弃用的遗留端点选项将在 Rocky 版本中删除。
例外是 [glance]api_servers,它将继续受到支持。操作员需要一种指定列表镜像服务端点的方式,而 keystoneauth1 适配器中没有这种机制。
如果未通过 valid_interfaces conf 选项另有说明,keystoneauth1 默认情况下会尝试,按顺序,public、internal、admin。Nova 的实现将覆盖默认设置,尝试 internal,然后 public。(值得注意的是,publicURL 是迄今为止一直使用的形式,但 public 是 keystone v3 版本的接口。配置应该接受两者,但附加到 keystoneauth1 暴露的 conf 选项的文档显示使用 public 的示例。)
关于 Barbican 的说明¶
Barbican 配置选项由 castellan 库提供和使用。可能可以覆盖/弃用这些选项来自 Nova,以使其符合本规范其余部分的标准。但是,使其发生正确的方法是让 castellan 项目本身转向通用的 keystoneauth 配置。因此,在本规范的范围内,将不会努力“修复”[barbican] 或 [key_manager] conf 部分。
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
在某些配置下(例如,如果未指定 endpoint_override),端点发现可能需要额外的 API 调用。将尽一切努力通过缓存发现的副产品(Adapter 对象、结果客户端等)来限制这些调用,以便在最坏的情况下,影响每个服务类型和端点版本一次。
其他部署者影响¶
除了 [glance]api_servers 之外,旧的端点配置选项将在 Queens 中被弃用,并在 Rocky 中删除。
开发人员影响¶
无
升级影响¶
鼓励升级到 Queens 的部署者过渡到使用本规范中描述的新端点发现机制。但是,不这样做不应立即产生功能影响。任何现有的端点相关 conf 选项将继续工作,但将开始记录弃用警告。不包含端点相关 conf 选项的配置部分应开始无缝使用新机制。
升级到 Rocky 的部署者必须过渡到新的 conf 机制。这种影响将在 Rocky 的后续工作中进一步描述。
没有数据库或 REST API 的升级影响。没有外部可见的行为变化。
实现¶
负责人¶
- 主要负责人
Eric Fried (efried@us.ibm.com)
- 其他贡献者
无
工作项¶
添加用于一致 conf 设置的实用程序。这是为了集中例如
valid_interfaces的覆盖。修改现有服务的 conf 设置文件,以
使用这些实用程序和 keystoneauth1.loading 方法来注册和列出 keystoneauth1 auth、Session 和 Adapter 对象的 conf 选项。
弃用与端点发现相关的遗留选项(不包括
[glance]api_servers)。
添加 Nova 中的一个实用程序方法来从 conf 创建 keystoneauth1 Adapter。
更新使用端点的 Nova 代码,如果未指定遗留 conf 选项,则利用新的实用程序方法。
(Rocky) 删除已弃用的端点相关 conf 选项,以及使用它们的代码分支。
依赖项¶
keystoneauth1 3.2.0 或更高版本
os-service-types 1.1.0 或更高版本
服务类型权威机构(这是支持 os-service-types 的与语言无关的数据存储库。它不是 pypi 包,也没有 Nova 的
requirements.txt中的位置。)
测试¶
需要添加单元测试。
将提出在 devstack 和其他项目的 devstack 设置中删除遗留端点相关 conf 选项和/或指定新选项的补丁。这些补丁通过各种 devstack 门控将证明新机制有效。(其中一些补丁最终可能会合并,但这不是本规范范围内的要求。)
文档影响¶
样本 conf 文件将通过对各种
oslo_config设置模块的更改自动更新。受影响服务的管理员、用户和安装指南将被清理,以删除对受影响配置选项的引用。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Pike |
|
Queens |
更新以反映 keystoneauth1 适配器使用的方向 |