指定集成

https://blueprints.launchpad.net/sahara/+spec/designate-integration

Designate 提供 DNS 作为服务,因此我们可以使用主机名而不是 IP 地址。本规范旨在在 Sahara 中实现此功能。

问题描述

用户希望使用有意义的主机名而不是仅仅使用 IP 地址。目前 Sahara 仅在部署集群时更改 /etc/hosts 文件,并且仅允许通过控制台以及在这些虚拟机之间通过主机名解析虚拟机。但是,通过 Designate 集成,可以在仪表板中使用虚拟机的hostname,并且无需更改 /etc/hosts

提议的变更

通过此更改,我们可以这样操作:用户在控制器机器上预先安装 Designate 并将其与网络设置好(参见 [0])。用户还将 DNS 地址添加到客户端机器上的 /etc/resolv.conf 文件中。用户在集群模板中选择用于内部和外部解析的域名。然后用户启动集群,其所有实例都可以通过其主机名解析

  1. 从用户客户端机器(例如,Sahara 仪表板中的链接)

  2. 在实例之间

Designate 集成将在我们配置 Sahara 使用它时生效。因此,应该在 default 部分添加一个新的配置选项

  • use_designate:一个布尔变量,指示 Sahara 是否应该使用 Designate(默认值为 False)。

  • nameservers:预先安装了 Designate 的服务器 IP 地址列表。如果 ‘use_designate’ 选项为 True,则这是必需的。

域名记录格式将为 instance_name.domain_name.。域名记录将在集群创建过程的创建 Heat 堆栈步骤中由 Heat 创建。主机名冲突的可能性不大:1. Designate 仅允许唯一的域名,因此用户无法在不同的租户中创建具有相同名称的域名。域名也在同一个租户内创建,并且在另一个租户中不可用。2. Nova 允许使用相同的名称启动实例,但 Sahara 为每个实例名称添加索引(0,1,2,...)。唯一的冲突情况是,当我们启动两个具有相同节点组名称和相同集群名称的集群时,Designate 不允许创建重复的记录,因此用户可以更改集群名称。

我们应该保持向后兼容性。向后兼容性情况

  • 旧版本的 Openstack。然后用户可以通过 use_designate = false 关闭 designate(此值为默认值)。

  • 集群已经存在。然后用户无法使用 designate 功能。

为了使这些虚拟机能够成功解析创建的域名记录,应该将域名服务器的地址写入每个虚拟机上的 /etc/resolv.conf 文件。这可以使用 cloud-init 功能完成。

替代方案

无。我们可以保持原样:现在我们更改 /etc/hosts 文件以解析虚拟机之间的主机名。

数据模型影响

集群、集群模板和实例实体应该有两个新的列

  • internal_domain_name

  • external_domain_name

REST API 影响

其他最终用户影响

用户需要自行预先安装和设置 designate(参见 [0])。用户还应该更改适当机器上的 resolv.conf 文件,以便使用 designate 解析服务器。

部署者影响

开发者影响

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

集群模板创建页面将包含一个额外的“DNS”选项卡,其中包含两个下拉字段:内部域名和外部域名。

实现

负责人

主要负责人

msionkin (Michael Ionkin)

工作项

  • 实现 designate heat 模板

  • 实现将 dns 服务器地址写入 resolv.conf 文件

  • 提供向后兼容性

  • 添加新的数据库字段

  • 在 Sahara 仪表板中为集群模板页面添加选项卡和字段

  • 添加单元测试

依赖项

  • Sahara 仪表板的 python-designateclient

测试

应该添加单元测试。

文档影响

应该记录此功能。

参考资料

[0] https://docs.openstack.org/mitaka/networking-guide/adv-config-dns.html