管理区域

在域名系统 (DNS) 中,区域 用于将命名空间分解为更易于管理的片段。例如,在根区域 . 中,存在针对每个顶级域名(例如 .org..com.)的区域,并且这些区域的责任可能由不同的组织承担。在这些区域内,又存在对其他区域的委派,例如 example.org.example.com.,这些区域可能再次由不同的组织和/或一组名称服务器管理。这形成了一个责任层次结构,较高层级主要由对较低层级的委派组成。

Designate 中的区域

Designate 中的区域模拟了 DNS 本身的所有权概念,任何给定的区域只能由单个租户拥有。但是,虽然 DNS 能够支持区域层次结构,但不支持将子区域委派给另一个租户,并且一个租户不能创建位于另一个租户区域内的区域。

在 Designate 中创建区域还会自动创建两个记录集:一个 SOA 记录和一个 NS 记录。默认情况下,这些记录无法在没有管理员角色的情况下进行修改。

区域与顶级域名

虽然从 DNS 的角度来看,顶级域名被认为是区域,但在 Designate 中,它们通常不被作为区域管理,而是具有自己的 TLD 类型,允许任何租户在该 TLD 内创建区域,并限制租户创建不在受管 TLD 内的区域。如果 Designate 中没有管理任何 TLD,则租户可以创建任何区域,除了根区域和顶级域名。

创建区域

创建区域只需要区域的名称和负责该区域的方的电子邮件地址。

$ openstack zone create --email dnsmaster@example.com example.com.
+----------------+--------------------------------------+
| Field          | Value                                |
+----------------+--------------------------------------+
| action         | CREATE                               |
| attributes     | {}                                   |
| created_at     | 2016-07-13T14:54:16.000000           |
| description    | None                                 |
| email          | dnsmaster@example.com                |
| id             | 14093115-0f0f-497a-ac69-42235e46c26f |
| masters        |                                      |
| name           | example.com.                         |
| pool_id        | 794ccc2c-d751-44fe-b57f-8894c9f5c842 |
| project_id     | 656bc359067844fba6005d400f19df76     |
| serial         | 1468421656                           |
| status         | PENDING                              |
| transferred_at | None                                 |
| ttl            | 3600                                 |
| type           | PRIMARY                              |
| updated_at     | None                                 |
| version        | 1                                    |
+----------------+--------------------------------------+

请注意,状态为 PENDING。Designate 已经接收到创建区域的请求,但可能尚未完成。稍后,验证 DNS 区域是否成功创建。

$ openstack zone list
+--------------------------------------+--------------+---------+------------+--------+--------+
| id                                   | name         | type    |     serial | status | action |
+--------------------------------------+--------------+---------+------------+--------+--------+
| 14093115-0f0f-497a-ac69-42235e46c26f | example.com. | PRIMARY | 1468421656 | ACTIVE | NONE   |
+--------------------------------------+--------------+---------+------------+--------+--------+

现在将有两条记录集显示在区域中

$ openstack recordset list example.com.
+--------------------------------------+--------------+------+---------------------------------------------------------------------+--------+--------+
| id                                   | name         | type | records                                                             | status | action |
+--------------------------------------+--------------+------+---------------------------------------------------------------------+--------+--------+
| 269cf8d2-c498-49a8-aef9-01e81d078313 | example.com. | SOA  | ns1.devstack.org. admin.example.com. 1618291836 3509 600 86400 3600 | ACTIVE | NONE   |
| 31b50023-88b2-4011-b31b-474fa25a8e39 | example.com. | NS   | ns1.devstack.org.                                                   | ACTIVE | NONE   |
+--------------------------------------+--------------+------+---------------------------------------------------------------------+--------+--------+

SOA 记录上的刷新、重试、最小和过期值由 Designate 操作员设置。但是,可以通过区域修改 TTL。

$ openstack zone set example.com. --ttl 3000
+----------------+--------------------------------------+
| Field          | Value                                |
+----------------+--------------------------------------+
| action         | UPDATE                               |
| attributes     |                                      |
| created_at     | 2021-04-13T05:30:36.000000           |
| description    | None                                 |
| email          | admin@example.com                    |
| id             | b9861a55-0e50-4896-8ab9-25d8c4494f64 |
| masters        |                                      |
| name           | example.com.                         |
| pool_id        | 794ccc2c-d751-44fe-b57f-8894c9f5c842 |
| project_id     | 9d69e3a004aa40c581f00d7bb7763e0a     |
| serial         | 1618545015                           |
| status         | PENDING                              |
| transferred_at | None                                 |
| ttl            | 3000                                 |
| type           | PRIMARY                              |
| updated_at     | 2021-04-16T03:50:15.000000           |
| version        | 11                                   |
+----------------+--------------------------------------+

可以使用 dig 工具查询后端名称服务器之一以确认结果。在此示例中,有一个 DNS 服务器位于 192.168.122.186,由 designate 作为默认池的一部分管理。

$ dig @192.168.122.186 example.com.

; <<>> DiG 9.11.20-RedHat-9.11.20-5.el8_3.1 <<>> @192.168.122.186 example.com.
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63663
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 970f584e4cb93505eaf46f526079097ac959da76062f1d0a (good)
;; QUESTION SECTION:
;example.com.                        IN      A

;; AUTHORITY SECTION:
example.com.         3000    IN      SOA     ns1.devstack.org. admin.example.com. 1618545015 3509 600 86400 3600

;; Query time: 0 msec
;; SERVER: 192.168.122.186#53(192.168.122.186)
;; WHEN: Fri Apr 16 03:50:18 UTC 2021
;; MSG SIZE  rcvd: 126

AUTHORITY 部分中,名称和 IN 之间的数字值是 TTL,它已更新为新的值 3000。

删除区域

可以使用区域的名称或 ID 删除区域

$ openstack zone delete example.com.
+----------------+--------------------------------------+
| Field          | Value                                |
+----------------+--------------------------------------+
| action         | DELETE                               |
| attributes     |                                      |
| created_at     | 2021-04-13T05:30:36.000000           |
| description    | None                                 |
| email          | admin@example.com                    |
| id             | b9861a55-0e50-4896-8ab9-25d8c4494f64 |
| masters        |                                      |
| name           | example.com.                         |
| pool_id        | 794ccc2c-d751-44fe-b57f-8894c9f5c842 |
| project_id     | 9d69e3a004aa40c581f00d7bb7763e0a     |
| serial         | 1618545024                           |
| status         | PENDING                              |
| transferred_at | None                                 |
| ttl            | 3000                                 |
| type           | PRIMARY                              |
| updated_at     | 2021-04-16T10:18:05.000000           |
| version        | 15                                   |
+----------------+--------------------------------------+

区域中存在的任何记录也会被删除,并且将不再解析。

注意

具有共享的区域不能在删除共享或使用 delete-shares 修饰符之前被删除。

将区域与池关联

当您的管理员配置 designate 使用多个 DNS 服务器池时,您可能需要在创建区域时指定特定的池属性或 ID。您的管理员将向您提供创建区域所需的池信息。

在此示例中,指示多个服务层级之一的池属性,必须在创建区域时指定

$ openstack zone create --email dnsmaster@example.com example.com. --attributes service_tier:silver
 +----------------+--------------------------------------+
 | Field          | Value                                |
 +----------------+--------------------------------------+
 | action         | CREATE                               |
 | attributes     | service_tier:silver                  |
 |                |                                      |
 | created_at     | 2023-04-04T18:30:45.000000           |
 | description    | None                                 |
 | email          | dnsmaster@example.com                |
 | id             | d106e7b0-9973-41a1-b3db-0fb34b6d952c |
 | masters        |                                      |
 | name           | example.com.                         |
 | pool_id        | 10cec123-43f0-4b60-98a8-1204dd826c67 |
 | project_id     | 5160768b59524fd283a4fa82d7327644     |
 | serial         | 1674585045                           |
 | status         | PENDING                              |
 | transferred_at | None                                 |
 | ttl            | 3600                                 |
 | type           | PRIMARY                              |
 | updated_at     | None                                 |
 | version        | 1                                    |
 +----------------+--------------------------------------+

注意

请记住

[service:central] scheduler_filters = attribute

配置设置是必需的,才能将新创建的区域与现有池关联。

在此示例中,必须在创建区域时指定特定的池 ID 7a2cde6b-d321-fa11-f99e-ccc378fe3dd1

$ openstack zone create --email dnsmaster@example.com example.com. --attributes pool_id:7a2cde6b-d321-fa11-f99e-ccc378fe3dd1
 +----------------+----------------------------------------------+
 | Field          | Value                                        |
 +----------------+----------------------------------------------+
 | action         | CREATE                                       |
 | attributes     | pool_id:7a2cde6b-d321-fa11-f99e-ccc378fe3dd1 |
 |                |                                              |
 | created_at     | 2023-04-04T18:39:12.000000                   |
 | description    | None                                         |
 | email          | dnsmaster@example.com                        |
 | id             | 54f2bcaa-65ef-8274-5fde-987234508afe         |
 | masters        |                                              |
 | name           | example.com.                                 |
 | pool_id        | 7a2cde6b-d321-fa11-f99e-ccc378fe3dd1         |
 | project_id     | 5160768b59524fd283a4fa82d7327644             |
 | serial         | 2385822109                                   |
 | status         | PENDING                                      |
 | transferred_at | None                                         |
 | ttl            | 3600                                         |
 | type           | PRIMARY                                      |
 | updated_at     | None                                         |
 | version        | 1                                            |
 +----------------+----------------------------------------------+

注意

请记住

[service:central] scheduler_filters = pool_id_attribute

配置设置是必需的,才能将新创建的区域与现有池关联。

验证区域是否已创建

$ openstack zone list
+--------------------------------------+---------------+---------+------------+--------+--------+
| id                                   | name          | type    |     serial | status | action |
+--------------------------------------+---------------+---------+------------+--------+--------+
| 54f2bcaa-65ef-8274-5fde-987234508afe | example.com.  | PRIMARY | 2385822109 | ACTIVE | NONE   |
+--------------------------------------+---------------+---------+------------+--------+--------+