管理 DNS 区域
使用用户界面、CLI 或 API 管理 DNS 区域。
在管理 DNS 区域之前,必须具有 IBM Cloud® DNS Services 实例。 请参阅 创建 DNS Services 实例 以获取更多信息。
区域可以具有任意数量的级别,但不能少于两个级别。 例如,ibm.austin.texas.example.com
是有效的区域名称,但 com
不是。
您可以有多个专区,其中一个专区是另一个专区的后缀。 例如,sub.domain.example.com
和 domain.example.com
可以共存。
您还可以在添加的区域中定义子域。 例如,以下是区域 domain.example.com
中的所有有效名称。
subdomain.domain.example.com
hostname.domain.example.com
hostname.subdomain.domain.example.com
名称 host.sub.domain.example.com
可能是区域 domain.example.com
中的 host.sub
。 它也可能是 host.sub.domain
在区域内 example.com
。 两者可以同时存在,并且是分开的。
已知限制
DNS 解析器始终从最长匹配区域中查找记录,即使该记录可能不存在于最长匹配区域中,但确实存在于另一个非最长匹配区域中。
假设我们有两个专区: domain.example.com
和 example.com
。
example.com
的记录
{
myhost.domain.example.com A 1.1.1.1
me.domain.example.com A 8.8.8.8
}
domain.example.com
的记录
{
myhost.domain.example.com A 2.2.2.2
}
如果用户查询 myhost.domain.example.com
,那么预期结果 (即 2.2.2.2) 应该来自 domain.example.com
,因为 domain.example.com
与用户查询的匹配时间最长。
如果改为查询 me.domain.example.com
,那么解析器仅搜索最长的匹配区域。 由于 domain.example.com
中不存在 me.domain.example.com
,因此结果为 NXDOMAIN
。
更多信息,请参阅 已知问题和限制。
在控制台中创建 DNS 区域
- 从“资源”页面中,选择所需的 DNS Services 实例。
- 单击 DNS 区域页面上的创建区域。
- 在显示的面板中,在 名称 字段中输入区域名称。 (可选) 输入 标签 和 描述 字段。 请参阅 [受限 DNS 区域名称 (#restricted-dns-zone-names),以获取有关不允许使用的名称的信息。
- 单击 创建区域。
如果区域创建成功,那么会将您定向到“区域详细信息”页面。
新添加的区域具有暂挂状态,直到您将允许的网络添加到该区域为止。 添加允许的网络后,区域将变为活动状态。
如果区域创建失败,那么将显示错误通知,其中包含有关导致该错误的原因的信息。
受限 DNS 区域名称
不允许任何受限 2 级别区域的子域。 例如,my.host.ibm.com
是 ibm.com
的子域。 因此,my.host.ibm.com
也是受限区域。
不允许使用以下 DNS 区域名称。
ibm.com
softlayer.com
bluemix.net
softlayer.local
mybluemix.net
networklayer.com
ibmcloud.com
pdnsibm.net
appdomain.cloud
compass.cobaltiron.com
在控制台中编辑 DNS 区域
- 从“DNS 区域”页面中,选择区域。 此时将显示 标签 和 描述 选项。
- 单击 标签的“编辑”图标,然后输入标签并单击 保存。
- 单击 描述的“编辑”图标,然后输入描述并单击 保存。
在控制台中删除 DNS 区域
- 从 DNS 区域页面,单击要删除的区域行中的删除图标。 这将显示“确认”对话框。
- 单击删除。
通过 CLI 管理 DNS 区域
遵循以下 指示信息 来安装 DNS Services CLI 插件。
首先使用 ibmcloud dns instances
命令列出 DNS Services 实例,然后使用 ibmcloud dns instance-target
命令设置目标操作的 DNS Services 实例。
$ ibmcloud dns instances
Retrieving service instances for service 'dns-svcs' ...
OK
Name ID Location State Service Name
DNS Services-km ffffffff-b042-41fd-885e-000000000000 global active dns-svcs
$ ibmcloud dns instance-target "DNS Services-km"
通过 CLI 创建 DNS 区域
使用后跟区域名称的 ibmcloud dns zone-create
命令来创建区域。
$ ibmcloud dns zone-create example.com
Creating zone 'example.com' for service instance 'DNS Services-km' ...
OK
ID example.com:f7f40364-a5e6-48f7-9fc9-387434c579ae
Name example.com
Description
Label
State PENDING_NETWORK_ADD
Created On 2020-04-10 07:21:51.774444868 +0000 UTC
Modified On 2020-04-10 07:21:51.774444868 +0000 UTC
为了供将来参考,输出中的 "ID" 用作变量 DNS_ZONE_ID
。 运行以下命令以将其存储在变量 DNS_ZONE_ID
中:
DNS_ZONE_ID="example.com:f7f40364-a5e6-48f7-9fc9-387434c579ae"
通过 CLI 获取 DNS 区域
使用后跟区域标识的 ibmcloud dns zone
命令来获取现有区域的详细信息。
$ ibmcloud dns zone $DNS_ZONE_ID
Getting zone 'example.com:f7f40364-a5e6-48f7-9fc9-387434c579ae' for service instance 'DNS Services-km' ...
OK
ID example.com:f7f40364-a5e6-48f7-9fc9-387434c579ae
Name example.com
Description
Label
State PENDING_NETWORK_ADD
Created On 2020-04-10 07:21:51.774444868 +0000 UTC
Modified On 2020-04-10 07:21:51.774444868 +0000 UTC
通过 CLI 更新 DNS 区域
使用后跟区域标识的 ibmcloud dns zone-update
命令来更新区域。 指定 -d, --description
以更新描述和/或指定 -l, --label
以更新区域的标签。
$ ibmcloud dns zone-update $DNS_ZONE_ID -d "example zone" -l "us-south"
Updating zone 'example.com:f7f40364-a5e6-48f7-9fc9-387434c579ae' for service instance 'DNS Services-km' ...
OK
ID example.com:f7f40364-a5e6-48f7-9fc9-387434c579ae
Name example.com
Description example zone
Label us-south
State PENDING_NETWORK_ADD
Created On 2020-04-10 07:21:51.774444868 +0000 UTC
Modified On 2020-04-10 07:38:36.712131819 +0000 UTC
通过 CLI 列出 DNS 区域
使用 ibmcloud dns zones
命令可列出所有区域。
$ ibmcloud dns zones
Listing zones for service instance 'DNS Services-km' ...
OK
ID Name Status
example.com:f7f40364-a5e6-48f7-9fc9-387434c579ae example.com PENDING_NETWORK_ADD
通过 CLI 删除 DNS 区域
使用后跟区域标识的 ibmcloud dns zone-delete
来删除区域。
ibmcloud dns zone-delete $DNS_ZONE_ID
使用 API 管理 DNS 区域
首先将 API 端点存储在一个变量中,这样就可以在 API 请求中使用它,而无需键入完整的 URL。 例如,要在变量中存储生产端点,请执行以下命令:
DNSSVCS_ENDPOINT=https://api.dns-svcs.cloud.ibm.com
要验证该变量是否已保存,请运行 echo $DNSSVCS_ENDPOINT
并确保响应不为空。
认证
每次 API 调用都需要使用授权标头。 该头是用户的不记名令牌,可从 IAM 进行检索(例如,使用 ibmcloud iam oauth-tokens
命令)。
您必须获取 IAM 令牌,并将其导出到 $TOKEN
for DNS Services。
使用 API 创建 DNS 区域
使用以下 curl
命令创建新区域:
请求
curl -X POST \
$DNSSVCS_ENDPOINT/v1/instances/$INSTANCE_ID/dnszones \
-H "Authorization: $TOKEN" \
-d '{
"name": "example.com",
"description": "Example zone"
}'
响应
{
"success": true,
"result": {
"id": "ed10e4b2-8a64-4afa-a4e2-9e60a766d079",
"created_on": "2019-07-24 12:30:58.357201205 +0000 UTC",
"modified_on": "2019-07-24 12:30:58.357201205 +0000 UTC",
"instance_id": "1a34bda8-9c94-4232-bea7-7df163b21d23",
"name": "example.com",
"description": "Example zone",
"state": "PENDING_NETWORK_ADD",
"tag": "example.com:ed10e4b2-8a64-4afa-a4e2-9e60a766d079"
},
"errors": [],
"messages": []
}
作为将来的参考,响应中的 "id" 将用作 DNSZONE_ID
。
使用 API 获取 DNS 区域
使用以下命令获取现有区域。
请求
curl -X GET \
$DNSSVCS_ENDPOINT/v1/instances/$INSTANCE_ID/dnszones/$DNSZONE_ID \
-H "Authorization: $TOKEN"
响应
{
"success": true,
"result": {
"id": "example.com:ed10e4b2-8a64-4afa-a4e2-9e60a766d079",
"created_on": "2019-07-24 12:30:58.357201205 +0000 UTC",
"modified_on": "2019-07-24 12:30:58.357201205 +0000 UTC",
"instance_id": "1a34bda8-9c94-4232-bea7-7df163b21d23",
"name": "example.com",
"description": "Example zone",
"state": "PENDING_NETWORK_ADD"
},
"errors": [],
"messages": []
}
使用 API 更新 DNS 区域
使用以下命令更新现有区段。您可以更新描述和标签字段。 所有其他字段均为只读。
请求
curl -X PATCH \
$DNSSVCS_ENDPOINT/v1/instances/$INSTANCE_ID/dnszones/$DNSZONE_ID \
-H 'Content-Type: application/json' \
-H "Authorization: $TOKEN" \
-d '{
"description": "The DNS zone is used for VPCs in us-east region",
"label": "us-east"
}'
响应
{
"created_on": "2019-01-01T05:20:00.12345Z",
"description": "The DNS zone is used for VPCs in us-east region",
"id": "example.com:2d0f862b-67cc-41f3-b6a2-59860d0aa90e",
"instance_id": "1407a753-a93f-4bb0-9784-bcfc269ee1b3",
"label": "us-east",
"modified_on": "2019-01-01T05:20:00.12345Z",
"name": "example.com",
"state": "PENDING_NETWORK_ADD"
}
使用 API 列出 DNS 区域
使用以下 curl
命令列出域中的一个或多个区域:
请求
curl -X GET \
$DNSSVCS_ENDPOINT/v1/instances/$INSTANCE_ID/dnszones \
-H "Authorization: $TOKEN"
响应
{
"success": true,
"result": [
{
"id": "example.com:ed10e4b2-8a64-4afa-a4e2-9e60a766d079",
"created_on": "2019-07-24 12:30:58.357201205 +0000 UTC",
"modified_on": "2019-07-24 12:30:58.357201205 +0000 UTC",
"instance_id": "1a34bda8-9c94-4232-bea7-7df163b21d23",
"name": "example.com",
"description": "Example zone",
"state": "PENDING_NETWORK_ADD"
}
],
"errors": [],
"messages": []
}
使用 API 删除 DNS 区域
请求
curl -X DELETE \
$DNSSVCS_ENDPOINT/v1/instances/$INSTANCE_ID/dnszones/$DNSZONE_ID \
-H "Authorization: $TOKEN"
响应
HTTP/2 204 No Content