添加、更新和删除记录

本页面介绍了如何添加、更新和删除资源记录集。

如需查看支持的资源记录类型列表,请参阅 DNS 记录概览

准备工作

您必须先拥有或创建托管区域,然后才能创建资源记录集。如需详细了解如何创建托管区域(您可以在其中创建 资源记录集),请参阅 创建托管区域

添加资源记录集

要添加资源记录集,请按以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud DNS 区域页面。

    前往 Cloud DNS 区域

  2. 点击要在其中添加记录的托管区域的名称。

  3. 区域详情页面上,点击添加标准

  4. 创建记录集页面的 DNS 名称字段中,输入 DNS 区域的子网域,例如 mail。结尾处会自动添加结尾句点。

    如需创建通配符 DNS 记录,请输入星号,例如 *.example.com

    at 符号 (@) 不会自动创建顶级域名记录。 如需在顶级域名下创建资源记录,请将 DNS 名称字段留空。

  5. 选择资源记录类型,例如 MX

  6. TTL 字段中,输入一个数值表示资源记录的生存时间,即该资源记录可缓存的时间期限。此值必须是正整数。

  7. TTL 单位菜单中,选择时间单位,例如 minutes

  8. 根据您已选择的资源记录类型,填充剩余字段

  9. 要输入其他信息,请点击添加一项

  10. 点击创建

gcloud

如需添加资源记录集,请使用 gcloud dns record-sets create 命令:

gcloud dns record-sets create RRSET_NAME \
    --rrdatas=RR_DATA \
    --ttl=TTL \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE

替换以下内容:

  • RRSET_NAME:匹配传入查询的 DNS 名称,并使用此区域的 DNS 名称作为其后缀,例如 test.example.com
  • RR_DATA:与资源记录集关联的任意值,例如 198.51.100.5;您还可以输入多个值 rrdata1 rrdata2 rrdata3,例如 198.51.100.5 10.2.3.4...
  • TTL:解析器缓存此资源记录集的 TTL(以秒为单位),例如 30
  • RRSET_TYPE:此资源记录集的资源记录类型,例如 A
  • MANAGED_ZONE:此资源记录集关联的代管区域(例如 my-zone-name);此资源记录集的名称必须以代管区域的 DNS 名称作为其后缀

API

如需添加资源记录集,请使用 resourceRecordSets.create 方法

POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets
{
    "name": "RRSET_NAME",
    "type": "RRSET_TYPE",
    "ttl": TTL,
    "rrdatas": [ RR_DATA ]
}

替换以下内容:

  • PROJECT_ID:项目的 ID
  • MANAGED_ZONE:此资源记录集关联的代管区域(例如 my-zone-name);此资源记录集的名称必须以代管区域的 DNS 名称作为其后缀
  • RRSET_NAME:匹配传入查询的 DNS 名称,并使用此区域的 DNS 名称作为其后缀,例如 test.example.com
  • RRSET_TYPE:此资源记录集的资源记录类型,例如 A
  • TTL:解析器缓存此资源记录集的 TTL(以秒为单位),例如 30
  • RR_DATA:与资源记录集关联的任意值,例如 "198.51.100.5";您还可以输入多个值(使用逗号分隔列表),例如 "198.51.100.5","10.2.3.4"

Terraform

resource "google_dns_managed_zone" "parent_zone" {
  name        = "sample-zone"
  dns_name    = "sample-zone.hashicorptest.com."
  description = "Test Description"
}

resource "google_dns_record_set" "default" {
  managed_zone = google_dns_managed_zone.parent_zone.name
  name         = "test-record.sample-zone.hashicorptest.com."
  type         = "A"
  rrdatas      = ["10.0.0.1", "10.1.0.1"]
  ttl          = 86400
}

在事务中添加一组资源记录集

您可以通过创建指定更改的事务来添加多个资源记录集。事务是一组必须作为一个单元应用的一项或多项 DNS 记录更改。事务要么整体成功要么整体失败,确保您的数据绝不会处于不一致的状态。您只能使用 gcloud CLI 或 Cloud DNS API 创建事务。

如需创建事务,请按以下步骤操作:

gcloud

  1. 如需启动一项事务,请使用 gcloud dns record-sets transaction start 命令

    gcloud dns record-sets transaction start \
       --zone=MANAGED_ZONE
    

    MANAGED_ZONE 替换为您要管理其资源记录集的托管区域的名称,例如 my-zone-name

  2. 如需在事务中添加资源记录集,请使用 gcloud dns record-sets transaction add 命令

    gcloud dns record-sets transaction add RR_DATA \
       --name=DNS_NAME \
       --ttl=TTL \
       --type=RECORD_TYPE \
       --zone=MANAGED_ZONE
    

    替换以下内容:

    • RR_DATA:与资源记录集关联的任意值,例如 198.51.100.5;您还可以输入多个值 rrdata1 rrdata2 rrdata3,例如 198.51.100.5 10.2.3.4...
    • DNS_NAME:要添加的记录集的 DNS 或域名,例如 test.example.com
    • TTL:记录集的存留时间 (TTL),以秒为单位,例如 300
    • RECORD_TYPE记录类型,例如 A
    • MANAGED_ZONE:您要管理其资源记录集的托管区域的名称,例如 my-zone-name
  3. 要执行事务,请使用 gcloud dns record-sets transaction execute 命令

    gcloud dns record-sets transaction execute \
       --zone=MANAGED_ZONE
    
  4. 如需添加通配符事务,请使用 gcloud dns record-sets transaction add 命令

    gcloud dns record-sets transaction add \
       --zone=MANAGED_ZONE \
       --name=WILDCARD_DNS_NAME \
       --type=RECORD_TYPE \
       --ttl=TTL
    

    替换以下内容:

    • MANAGED_ZONE:您要管理其资源记录集的托管区域的名称,例如 my-zone-name
    • WILDCARD_DNS_NAME:要添加的资源记录集的 DNS 或域名,例如 *.example.com.(注意在末尾处使用句点)
    • RECORD_TYPE记录类型,例如 CNAME
    • TTL:记录集的 TTL,以秒为单位(例如 300

API

要使用新资源记录集创建事务,请使用 changes.create 方法

POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/changes
{
  "deletions": []
  "additions": [
    {
      "name": DNS_NAME,
      "type": RECORD_TYPE,
      "ttl": TTL,
      "rrdatas": [
        RR_DATA
      ]
    }
  ]
}

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • MANAGED_ZONE:您的代管区域名称或 ID
  • DNS_NAME:记录集的 DNS 或域名,例如 test.example.com.(注意在末尾处使用句点)
  • RECORD_TYPE记录类型
  • TTL:记录集的存留时间 (TTL),以秒为单位,例如 30
  • RR_DATA:与资源记录集关联的任意值,例如 198.51.100.5;您还可以输入多个值 rrdata1 rrdata2 rrdata3,例如 198.51.100.5 10.2.3.4...

如要将电子邮件传送到您的网域,您必须向您的区域添加 MX 记录。如果您使用 Google Workspace 作为简单邮件传输协议 (SMTP) 提供方,请参阅设置 Google Workspace MX记录支持页面。否则,请使用提供方提供的 MX 记录详细信息,然后按照针对 Google Workspace 所述的设置流程操作。

查看某个区域的资源记录集

如需查看某个区域的资源记录集,请按照以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud DNS 页面。

    前往 Cloud DNS

  2. 区域标签页上,点击要查看资源记录集的区域。

    区域详情页面将显示该区域中所有资源记录集的详细信息。

gcloud

如需查看您的区域的 DNS 记录,请使用 gcloud dns record-sets list 命令

gcloud dns record-sets list \
   --zone="ZONE_NAME"

ZONE_NAME 替换为项目中某个 DNS 区域的名称:

该命令将输出前 100 条记录所对应资源记录集的 JSON 响应。您可以指定以下附加参数:

  • --limit:需要列出的最大记录集数
  • --name:仅列出具有此确切域名的资源记录集
  • --type:仅列出此类型的记录;如果存在,则还必须使用 --name 参数

API

如需查看您的区域的 DNS 记录,请使用 resourceRecordSets.list 方法

GET https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets

替换以下内容:

  • PROJECT_ID:项目的 ID
  • MANAGED_ZONE:此资源记录集关联的代管区域(例如 my-zone-name);此资源记录集的名称必须以代管区域的 DNS 名称作为其后缀

查看一个资源记录集的详细信息

此过程假定您已在托管 Cloud DNS 区域内创建资源记录集。

要查看现有资源记录集的详细信息,请按以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud DNS 区域页面。

    前往 Cloud DNS 区域

  2. 点击包含资源记录集的区域。

  3. 点击要查看详细信息的资源记录集。

    资源记录集详细信息页面会显示资源记录集的详细信息。

gcloud

如需查看现有资源记录集的详细信息,请使用 gcloud dns record-sets describe 命令

gcloud dns record-sets describe RRSET_NAME \
  --type=RRSET_TYPE \
  --zone=MANAGED_ZONE

替换以下内容:

  • RRSET_NAME:匹配传入查询的 DNS 名称,并使用此区域的 DNS 名称作为其后缀,例如 test.example.com
  • RRSET_TYPE:此资源记录集的资源记录类型,例如 A
  • MANAGED_ZONE:此资源记录集关联的代管区域(例如 my-zone-name);此资源记录集的名称必须以代管区域的 DNS 名称作为其后缀

API

如需获取现有资源记录集的详细信息,请使用 resourceRecordSets.get 方法

GET https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets/RRSET_NAME/RRSET_TYPE

替换以下内容:

  • PROJECT_ID:项目的 ID
  • MANAGED_ZONE:此资源记录集关联的代管区域(例如 my-zone-name);此资源记录集的名称必须以代管区域的 DNS 名称作为其后缀
  • RRSET_NAME:匹配传入查询的 DNS 名称,并使用此区域的 DNS 名称作为其后缀,例如 test.example.com
  • RRSET_TYPE:此资源记录集的记录类型,例如 A

更新资源记录集

要修改记录集,请按以下步骤操作:

控制台

要将部分更新应用于现有资源记录集,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 Cloud DNS 区域页面。

    前往 Cloud DNS 区域

  2. 点击要为其更新资源记录集的区域。

  3. 区域详情页面上,点击您要更新的资源记录集旁边的修改

  4. 完成必要的更新后,点击保存

gcloud

要对现有资源记录集应用部分更新,请使用 gcloud dns record-sets update 命令

gcloud dns record-sets update RRSET_NAME \
    --rrdatas=RR_DATA \
    --ttl=TTL \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE

替换以下内容:

  • RRSET_NAME:匹配传入查询的 DNS 名称,并使用此区域的 DNS 名称作为其后缀,例如 test.example.com
  • RR_DATA:与资源记录集关联的任意值,例如 198.51.100.5;您还可以输入多个值 rrdata1 rrdata2 rrdata3,例如 198.51.100.5 10.2.3.4...
  • TTL:解析器缓存此资源记录集的 TTL(以秒为单位),例如 30
  • RRSET_TYPE:此资源记录集的资源记录类型,例如 A
  • MANAGED_ZONE:此资源记录集关联的代管区域(例如 my-zone-name);此资源记录集的名称必须以代管区域的 DNS 名称作为其后缀

API

要对现有资源记录集应用部分更新,请使用 resourceRecordSets.patch 方法

PATCH https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets/RRSET_NAME/RRSET_TYPE
{
  "ttl": TTL,
  "rrdatas": RR_DATA,
  "update_mask": {
      "paths": ["rrset.ttl", "rrset.rrdatas"]
  }
}

替换以下内容:

  • PROJECT_ID:项目的 ID
  • MANAGED_ZONE:此资源记录集关联的代管区域(例如 my-zone-name);此资源记录集的名称必须以代管区域的 DNS 名称作为其后缀
  • RRSET_NAME:匹配传入查询的 DNS 名称,并使用此区域的 DNS 名称作为其后缀,例如 test.example.com
  • RRSET_TYPE:此资源记录集的资源记录类型,例如 A
  • TTL:解析器缓存此资源记录集的 TTL(以秒为单位),例如 30
  • RR_DATA:与资源记录集关联的任意值,例如 198.51.100.5;您还可以输入多个值 rrdata1 rrdata2 rrdata3,例如 198.51.100.5 10.2.3.4...

删除资源记录集

您删除资源记录集后,其 DNS 记录会永久移除,无法恢复。为避免丢失 DNS 记录,请在删除前导出资源记录集。如需了解如何导出资源记录集,请参阅导入和导出资源记录集

Cloud DNS 公开区域是权威的,并且域名服务器 (NS) 和授权起始 (SOA) 记录类型位于区域顶端,即该网域的根。 Cloud DNS 会在区域顶端自动创建 NSSOA 记录。这些记录无法使用 Cloud DNS API 删除,并且会在删除区域时自动删除。如需了解详情,请参阅 RFC 1034

如需删除资源记录集,请按照以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud DNS 页面。

    前往 Cloud DNS 区域

    区域详细信息页面上会列出该区域的记录。

  2. 如需删除某个区域中的资源记录集,请点击该区域的名称。

  3. 选中要删除的资源记录集旁边的复选框。

  4. 点击删除记录集

gcloud

如需删除现有的资源记录集,请使用 gcloud dns record-sets delete 命令

gcloud dns record-sets delete RRSET_NAME \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE

替换以下内容:

  • RRSET_NAME:匹配传入查询的 DNS 名称,并使用此区域的 DNS 名称作为其后缀,例如 test.example.com
  • RRSET_TYPE:此资源记录集的资源记录类型,例如 A
  • MANAGED_ZONE:此资源记录集关联的代管区域(例如 my-zone-name);此资源记录集的名称必须以代管区域的 DNS 名称作为其后缀

API

如需删除现有资源记录集,请使用 resourceRecordSets.delete 方法

DELETE https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets/RRSET_NAME/RRSET_TYPE

替换以下内容:

  • PROJECT_ID:项目的 ID
  • MANAGED_ZONE:此资源记录集关联的代管区域(例如 my-zone-name);此资源记录集的名称必须以代管区域的 DNS 名称作为其后缀
  • RRSET_NAME:匹配传入查询的 DNS 名称,并使用此区域的 DNS 名称作为其后缀,例如 test.example.com
  • RRSET_TYPE:此资源记录集的资源记录类型,例如 A

导入和导出资源记录集

如需将资源记录集复制到托管区域中以及从托管区域中复制资源记录集,您可以使用 importexport 命令。您可以导入和导出 BIND 区域文件格式或 YAML 文件格式。

gcloud

  1. 如需导入资源记录集,请使用 dns record-sets import 命令

    gcloud dns record-sets import -z=ZONE_NAME
    

    如果您想指定区域文件的格式,请使用上一条命令和 --zone-file-format 标志。如果省略此标志,则必须提供 YAML 格式的区域文件。

    ZONE_NAME 替换为您的区域的新名称。

    • 当您使用 gcloud dns record-sets import 命令和 --replace-origin-ns 标志时,它会将区域的 NS 记录替换为区域文件中指定的 NS 记录。这些记录必须与由 Cloud DNS 分配用以托管区域的域名服务器相匹配,此外还必须与父级(委派)区域中指定的 NS 记录相匹配。默认情况下,Cloud DNS 不会覆盖 NS 记录。如果您使用此标志,则必须验证 NS 记录是否正确。

    • 将记录集导入为 BIND 区域格式的文件时,请移除表示区域顶级域名的 @ 符号。在 BIND 区域格式的文件中,对于 example.com 之类的 DNS 名称,@ 符号表示 example.com.。不过,在 Cloud DNS 中,在定义记录名称时,@ 符号会按原样处理。如需在 Cloud DNS 中为区域的顶级域名创建资源记录集,请使用完整域名,例如 example.com.

      in.smtp              IN MX 5 gmail-smtp-in.l.google.com
      in.smtp.example.com. IN MX 5 gmail-smtp-in.l.google.com.example.com.
      

      如需导入区域文件,请在必须完全限定的任何域名末尾添加结尾句点 (.)。

  2. 如需导出资源记录集,请使用 dns record-sets export 命令:如需将资源记录集导出为 BIND 区域格式的文件,请使用 --zone-file-format 标志。例如:

    example.com. 21600 IN NS ns-gcp-private.googledomains.com.
    example.com. 21600 IN SOA ns-gcp-private.googledomains.com.
    cloud-dns-hostmaster.google.com. 1 21600 3600 259200 300
    host1.example.com. 300 IN A 192.0.2.91
    

    如果省略 --zone-file-format 标志,export 会将资源记录集导出为 YAML 格式的记录文件:

    gcloud dns record-sets export example.zone -z=examplezonename
    

    例如:

    ---
    kind: dns#resourceRecordSet
    name: example.com.
    rrdatas:
    - ns-gcp-private.googledomains.com.
    ttl: 21600
    type: NS
    ---
    kind: dns#resourceRecordSet
    name: example.com.
    rrdatas:
    - ns-gcp-private.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 259200 300
    ttl: 21600
    type: SOA
    ---
    kind: dns#resourceRecordSet
    name: host1.example.com.
    rrdatas:
    - 192.0.2.91
    ttl: 300
    type: A
    
    

    Cloud DNS 支持 ALIAS 记录类型,但该记录类型不是标准 DNS 记录类型,并且在 BIND 中不受支持。如果您要将资源记录集导出到 BIND,系统会跳过 ALIAS 记录。如果某个区域具有路由政策,则会将其导出为资源记录数据 (rrdata) 为空的记录。

后续步骤

  • 如需了解用于资源记录集的 gcloud 命令,请参阅 gcloud dns record-sets
  • 如需查看 gcloud 或 API 操作的状态,请参阅监控 DNS 传播
  • 如需了解您在使用 Cloud DNS 时可能会遇到的常见问题的解决方案,请参阅问题排查
  • 如需大致了解 Cloud DNS,请参阅 Cloud DNS 概览