Designate 入门

Designate 是一个开源的 DNS-as-a-Service 实现,也是 OpenStack 云平台服务生态系统的一部分。为了理解 Designate 的功能和工作原理,有必要了解 DNS 的一些基本知识。

什么是 DNS?

域名系统 (DNS) 是一个用于为连接到网络的资源命名系统的系统,它通过存储各种类型的记录来工作,例如与域名关联的 IP 地址。在实践中,这由权威名称服务器实现,这些服务器包含这些记录,以及解析器,它们查询名称服务器以获取记录。名称被划分为一个分层区域,允许不同的名称服务器负责单独的区域组,并通过使用记录委派责任。

根区域,即简单地“.”,完全由委派各种顶级域名 (TLD) 到其他名称服务器的记录组成。TLD 名称服务器将包含其 TLD 内域名的记录,例如.com名称服务器拥有example.com记录,以及委派区域到其他名称服务器的记录,例如openstack.org可能有自己的名称服务器,以便他们可以创建cloud.openstack.org


../_images/Designate-DNS-Overview.png

解析器通常由两部分组成:一个存根解析器,通常只是用户计算机上的一个库,以及一个递归解析器,它将在返回结果给用户之前对名称服务器执行查询。在搜索域名时,解析器将从域名的末尾开始,然后逐步返回到开头。

例如,在下面的图中,当搜索 cloud.openstack.org 时,它将从根名称服务器“.”开始,根名称服务器将回复“.org”名称服务器的位置。然后,解析器可以联系“.org”名称服务器以获取“openstack.org”名称服务器,并从那里最终获取“cloud.openstack.org”记录并将其返回给用户。


../_images/Designate-DNS-Resolvers.png

为了提高效率,结果会在解析器上缓存,因此在第一个用户请求“cloud.openstack.org”之后,解析器可以为后续请求返回缓存的结果。

关于 DNS 及其工作原理的更多阅读资料请参见此处
虽然该系统本身是通过 RFC 定义的,例如

介绍 Designate

Designate 是一个 OpenStack 服务,允许用户和操作员通过 REST API 管理 DNS 记录、名称和区域,并可以配置现有的 DNS 名称服务器以包含这些记录。Designate 还可以由操作员配置为与 OpenStack 网络服务 (Neutron) 和计算服务 (Nova) 集成,以便在分别创建浮动 IP 和计算实例时自动创建记录,并使用 OpenStack 身份服务 (Keystone) 进行用户管理。由于 DNS 名称服务器有多种软件实现,Designate 具有可插拔的后端,可以配置为管理许多服务器,最著名的是 BIND9 和 PowerDNS。

Designate 架构

Designate 由几个不同的服务组成:API、Producer、Central、Worker 和 Mini DNS。它使用与 oslo.db 兼容的数据库来存储状态和数据,并使用与 oslo.messaging 兼容的消息队列来促进服务之间的通信。可以并行运行所有 Designate 服务的多个副本,以促进高可用性部署,API 进程通常位于负载均衡器后面。


../_images/Designate-Arch.png

Neutron 和 Designate 的其他用户只需要能够访问 API 服务器,而管理员应确保要配置的 DNS 名称服务器能够访问 Mini DNS,以便从 Mini DNS 请求更新。

下面我们可以看到一个常见的部署场景

用户在 Designate 中创建了两个区域:zone1.cloud.openstack.orgzone2.cloud.openstack.org。这将导致在 Designate 管理的名称服务器上创建两个新区域,并带有 SOA 记录。

然后,用户在 Neutron 中创建了两个网络:一个私有网络,分配给zone1.cloud.openstack.org,一个公共网络,分配给zone2.cloud.openstack.org

然后,他们创建了虚拟机vm1在 Nova 中,连接到 Neutron 中的私有网络并附加到浮动 IP,以及虚拟机vm2直接连接到公共网络。这些操作中的每一个都会触发一系列事件,这些事件将导致 Neutron 请求 Designate 代表用户创建记录,最终结果是在权威名称服务器中创建记录,将 vm 名称映射到域名,以及允许反向查找的 PTR 记录。


../_images/Designate-DNS-Integration.png

有关配置 Neutron 与 Designate 协同工作的信息,请参见 Neutron 文档:https://docs.openstack.org/neutron/2025.2/admin/config-dns-int-ext-serv.html

使用 Designate

Designate 提供了一个 REST API,通常通过以下三种方法之一使用。最常见的是使用 OpenStack 客户端,一个 Python 命令行工具,其中包含用于与 OpenStack 服务交互的命令。OpenStack 客户端的文档可在 https://docs.openstack.org/python-openstackclient/ 找到。还需要安装 designate 插件 用于 OpenStack 客户端

pip install python-openstackclient
pip install python-designateclient

使用 Designate 的另一种流行方式是通过 OpenStack Dashboard,Horizon。管理员需要将 Designate Horizon 插件添加到仪表板中,以启用 Designate 功能。

最后,对于 Python 开发人员,上述 Designate 插件可以作为 Python 库使用。其他语言可能具有来自第三方 SDK 的绑定可供使用。