允许在主机名字段中使用 FQDN¶
包含您的 Launchpad 蓝图的 URL
https://blueprints.launchpad.net/nova/+spec/fqdn-in-hostname
启用最终用户指定 FQDN 作为实例主机名
问题描述¶
最初,当 nova 创建时,实例主机名是从实例显示名称设置的。Nova 不允许在显示名称中使用 FQDN,并明确阻止了它,但后来将其作为 bugfix 移除。
由于对类似 FQDN 的字符串的过滤并非作为规范或功能完成,nova 从未提供 API 保证,即在创建服务器时可以使用 FQDN。在收到 Designate 的一些不良交互的 bug 报告后,我们决定扩展规范化,以删除非 ASCII 字母数字字符,同时也要从主机名中删除句点 .,在从显示名称初始化主机名时。
在 Xena 版本中,我们还通过在 API 中直接暴露主机名字段,引入了可配置的实例主机名,但仍然保持了禁止使用 FQDN 的规定。 https://specs.openstack.org/openstack/nova-specs/specs/xena/implemented/configurable-instance-hostnames.html
本规范旨在扩展主机名字段,以允许将 FQDN 用作实例的主机名。
用例¶
作为操作员,我希望为我的租户分配域,并使用自动化来验证虚拟机是否使用从该域派生的 FQDN 创建。
作为 VNF 供应商,我希望在通过 API 创建实例时,自动将 /etc/hostname 的值设置为 FQDN,利用 cloud-init 或其他工具,而无需使用用户数据。
提议的变更¶
添加一个新的 API 微版本,以选择在主机名字段中使用 FQDN。
将主机名字段的字符长度限制从 63 增加到 255
删除对“.”和其他 FQDN 中合法字符的拒绝。
当前,尝试使用带有
--hostname参数的 multi-create 会导致错误 400。本规范继续此行为:无论 FQDN 还是短名称,带有--hostname的 multi-create 仍然是不允许的。
..NOTE
Today the instance.hostname field is propagated into the hostname field of
the instance metadata. With this change the instance.hostname field can be an
FQDN and that will also be propagated as done today without alteration.
备选方案¶
Nova 可以添加一个 FQDN 字段,例如 openstack server create –FQDN …
这会引发何时使用 –hostname 与 –FQDN 的歧义,并且需要更改数据模型以存储新字段。
Nova 可以添加一个域字段,例如 openstack server create –hostname my-host –domain my.domain.com …
这比 –FQDN 更好,但仍然需要对数据库和对象进行更改,收益很小。
Nova 可以尝试将主机名更改传播到 neutron 端口和浮动 IP。这被认为是有风险的、复杂的且难以理解的。
首先,如果 nova 要将主机名更改传播到端口 dns_name 字段,它只能对 nova 创建的端口执行此操作,而不能对 API 用户传入的预创建端口执行此操作。如果更新传入的端口,可能会破坏现有用例,其中最终用户设置了所需名称。
其次,浮动 IP dns_name 通常与实例 FQDN 不同。实例主机名或 FQDN 通常是应用程序中使用的内部名称,而浮动 IP 用于暴露服务的公共名称。例如,实例可能被称为 webserver.cloud.com,而浮动 IP 的 dns_name 可能是 blog.mysite.example.com。
鉴于上述两个原因,以及 nova 不希望管理网络,将主机名更改传播到 neutron 端口不在范围之内。
由于这仅在与 designate 一起使用时才有用,并且 designate 已经监视 nova 的通知端点,以使用 designate-sink 组件更新 dns 记录,因此 designate 在未来可以实施此功能。
出于这些原因,当 nova 中的主机名更新时,在其他服务中更新主机名不在范围之内。
..NOTE
As is done today, if the instance.hostname is updated on an instance it will
be updated in the metadata service but not in the config-drive. If the
config-drive is ever regenerated such as via a cross cell
resize then the new value will be available to the guest via the
config drive. This does not change the behavior from before this change.
数据模型影响¶
无
数据库字段已经足够大,可以容纳任何有效的 FQDN,因此不需要对数据库进行更改。实例对象将主机名字段声明为字符串,也不需要更改。
REST API 影响¶
将引入一个新的 API 微版本,以允许在主机名字段中使用 FQDN。在使用了新的微版本时,将需要对长度限制进行有条件更改并禁用一些当前的验证,但代码将保留用于旧的微版本。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
用户可以将虚拟机的hostname设置为FQDN,但是如果没有使用 designate 等外部服务来通告FQDN,则可能无法解析,需要手动干预。
Nova 不保证最终用户提供的 FQDN 的唯一性或可访问性。
与今天一样,nova 仅在首次创建服务器时,将 dns_name 设置到 neutron 端口一次。如果最终用户更新 instance.hostname,它将在 nova 数据库中更新,并在 metadata API hostname 字段中可见。将此主机名更改传播到任何 neutron 端口、浮动 IP 或 dns 记录,不在 nova 项目的范围内。
性能影响¶
无
其他部署者影响¶
部署者应注意,使用现有的 [DEFAULT]/osAPI_compute_unique_server_name_scope 配置选项无法强制执行唯一的 FQDN 或主机名,因为它提供了显示名称的唯一性,而不是主机名。
本规范没有引入强制主机名或 FQDN 在任何范围内都唯一的方法。
开发人员影响¶
应扩展 osc 以支持新的微版本。
升级影响¶
无
实现¶
负责人¶
- 主要负责人
notartom
- 其他贡献者
无
功能联络人¶
- 功能联络人
sean-k-mooney
工作项¶
移除 API 限制
更新 API 示例测试
提供新的微版本和 API 参考
更新 osc
依赖项¶
无
测试¶
这完全可以通过 API/功能测试进行测试。
文档影响¶
API 参考将被更新
参考资料¶
无
历史¶
发布名称 |
描述 |
|---|---|
2023.1 Antelope |
引入 |