管理区域¶
在域名系统 (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 |
+----------------+--------------------------------------+
在此示例中,必须在创建区域时指定特定的池 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 |
+----------------+----------------------------------------------+
验证区域是否已创建
$ openstack zone list
+--------------------------------------+---------------+---------+------------+--------+--------+
| id | name | type | serial | status | action |
+--------------------------------------+---------------+---------+------------+--------+--------+
| 54f2bcaa-65ef-8274-5fde-987234508afe | example.com. | PRIMARY | 2385822109 | ACTIVE | NONE |
+--------------------------------------+---------------+---------+------------+--------+--------+