可配置实例主机名

https://blueprints.launchpad.net/nova/+spec/configurable-instance-hostnames

允许用户在创建实例时指定实例的显式主机名。

问题描述

Nova 通过元数据服务和配置驱动程序发布实例的主机名。此主机名基于实例显示名的清理版本,以及在 [api] dhcp_domain 中指定的值。在关于 bug 1581977 的讨论中,有人指出目前无法显式指定主机名,并将其与显示名分离。当 neutron 中启用 DNS 集成 时,我们会使用实例的主机名,这可能导致对主机名缺乏控制,从而阻止用户执行合理的操作,例如根据实例最终可用的完全限定域名来命名实例。

通过允许用户在创建实例时指定显式主机名来纠正这一差距。

用例

作为用户,我希望指定显式主机名,而不是依赖于(清理得不好)的显示名版本。

提议的变更

允许用户在创建新服务器(POST /servers)和更新现有服务器(PUT /servers/{id})时传递额外的 hostname 字段。此 hostname 属性将具有以下约束:

  • 它必须少于或等于 63 个字符

  • 它必须由字母数字字符和破折号 (-) 组成。句点、下划线和其他不在该集合中的字符将被拒绝

  • 它不能以破折号结尾

当请求多个实例时,主机名将以 -{idx} 为后缀,其中 {idx} 是从 1 开始的索引。如果组合后的名称和后缀超过 63 个字符限制,则名称将被拒绝。

当前仅限管理员访问的 OS-EXT-SRV-ATTR:hostname 实例属性现在将向非管理员用户显示,因为允许用户配置值而不查看它没有意义。

备选方案

  • 删除对 neutron DNS 集成功能的的支持,并要求用户在创建实例之前使用 dns_name 属性显式创建和配置端口。这将给 nova 带来额外的负担,并导致更差的用户体验。

  • 禁止在提供 hostname 属性时创建多个实例,类似于我们禁止提供端口时的情况。这是合理的,但会要求用户付出更多努力。

  • 开始拒绝不是有效主机名的实例名称。这是一个重大的破坏性更改,将影响许多用户。

数据模型影响

无。Instance 对象以及相应的数据库模型和表已经具有 hostname 字段/列。

REST API 影响

将引入一个新的微版本。当使用此微版本时,用户在创建新服务器(POST /servers)和更新现有服务器(PUT /servers/{id})时可以传递额外的 hostname 字段。此 hostname 属性将具有以下约束:

  • 它必须少于或等于 63 个字符

  • 它必须由字母数字字符和破折号 (-) 组成。句点、下划线和其他不在该集合中的字符将被拒绝

  • 它不能以破折号结尾

当请求多个实例时,主机名将以 -{idx} 为后缀,其中 {idx} 是从 1 开始的索引。如果组合后的名称和后缀超过 63 个字符限制,则名称将被拒绝。

在更新现有实例的主机名时,neutron 中端口的 dns_name 属性将被更新,元数据服务中公开的 hostname 属性也将被更新。

当前仅限管理员访问的 OS-EXT-SRV-ATTR:hostname 实例属性现在将可供非管理员用户访问。

安全影响

无。主机名将由 nova API 和 neutron 验证,以防止无效的主机名。

通知影响

无。

其他最终用户影响

需要更新 neutron 文档以反映行为的变化。

性能影响

无。

其他部署者影响

无。

开发人员影响

无。

升级影响

无。

实现

负责人

主要负责人

stephenfinucane

其他贡献者

功能联络人

功能联络人

stephenfinucane

工作项

  • 对 nova 进行必要的更改

  • 更新 neutron 文档

依赖项

无。

测试

可以通过 Tempest 测试进行测试,尽管这可能需要 designate-tempest-plugin 包。大部分工作将通过功能和单元测试完成。

文档影响

nova 和 neutron 的文档都需要更新,以引用此功能。api-ref 将更新以记录 API 请求中允许的新字段。

参考资料

历史

修订

发布名称

描述

Wallaby

引入