IBM Cloud Docs
管理 DNS 区域

管理 DNS 区域

使用用户界面、CLI 或 API 管理 DNS 区域。

在管理 DNS 区域之前,必须具有 IBM Cloud® DNS Services 实例。 请参阅 创建 DNS Services 实例 以获取更多信息。

区域可以具有任意数量的级别,但不能少于两个级别。 例如,ibm.austin.texas.example.com 是有效的区域名称,但 com 不是。

您可以有多个专区,其中一个专区是另一个专区的后缀。 例如,sub.domain.example.comdomain.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.comexample.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 区域

  1. 从“资源”页面中,选择所需的 DNS Services 实例。
  2. 单击 DNS 区域页面上的创建区域
  3. 在显示的面板中,在 名称 字段中输入区域名称。 (可选) 输入 标签描述 字段。 请参阅 [受限 DNS 区域名称 (#restricted-dns-zone-names),以获取有关不允许使用的名称的信息。
  4. 单击 创建区域

如果区域创建成功,那么会将您定向到“区域详细信息”页面。

新添加的区域具有暂挂状态,直到您将允许的网络添加到该区域为止。 添加允许的网络后,区域将变为活动状态。

如果区域创建失败,那么将显示错误通知,其中包含有关导致该错误的原因的信息。

受限 DNS 区域名称

不允许任何受限 2 级别区域的子域。 例如,my.host.ibm.comibm.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 区域

  1. 从“DNS 区域”页面中,选择区域。 此时将显示 标签描述 选项。
  2. 单击 标签的“编辑”图标,然后输入标签并单击 保存
  3. 单击 描述的“编辑”图标,然后输入描述并单击 保存

在控制台中删除 DNS 区域

  1. 从 DNS 区域页面,单击要删除的区域行中的删除图标。 这将显示“确认”对话框。
  2. 单击删除

通过 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