管理 DNS 路由政策

DNS 路由政策根据查询引导流量(例如轮循或地理定位)。您可以通过创建具有特定路由政策值的特殊 ResourceRecordSets(在集合意义上)来配置路由政策。

本页面介绍如何使用 Cloud DNS 创建、修改和删除 DNS 路由政策。在进行此页面的操作之前,请先熟悉 DNS 政策概览

如需使用 DNS 路由政策,请创建 ResourceRecordSet 并选择以下某个 DNS 路由政策以应用于 ResourceRecordSet

  • 加权轮循 (WRR) 路由政策:使用 WRR 可为每个 ResourceRecordSet 的 DNS 域名指定不同的权重。DNS 路由政策可确保根据配置的权重分配流量。系统不支持将 WRR 路由政策与地理定位路由政策结合使用。

  • 地理定位 (GEO) 路由政策:使用 GEO 指定来源地理位置,并提供与这些地理位置相对应的响应。如果流量来源与所有政策项都无法完全匹配,则地理定位路由政策会应用与来源位置最接近的匹配项。

    GEO 通过以下方式映射公共和专用 DNS 的来源:

    • 对于公共 DNS:系统将使用查询的来源 IP 地址或 DNS 扩展机制 (EDNS) 的客户端子网。
    • 对于专用 DNS:系统将使用接收查询的位置,例如查询虚拟机的区域或接收入站转发查询的位置。

    对于入站转发,查询会使用其进入 Virtual Private Cloud (VPC) 网络时所在的位置作为来源位置,而不是使用与入站转发器的 IP 地址关联的位置。

    例如,假设一个查询被发送到 us-west1 的转发器 IP 地址,但您的路由配置为让该查询到达 us-east1。那么,即使 Cloud DNS 具有 us-west1 转发地址,也仍会使用 us-east1 作为来源区域。

DNS 路由政策还支持每个地理位置拥有多个 IP 地址。为给定地理位置指定了多个 IP 地址时,系统会根据等效的加权 WRR 政策返回这些地址。系统不支持将基于地理位置的路由政策与自定义加权 WRR 政策结合使用。

准备工作

您必须已创建代管区域并已满足创建区域的前提条件。

创建 DNS 路由政策

如需创建 ResourceRecordSet 并对其应用路由政策,请按照以下步骤操作。

控制台

  1. 在 Google Cloud Console 中,转到 Cloud DNS 区域页面。

    转到 Cloud DNS 可用区

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

  3. 地区详情页面上,点击添加记录集

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

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

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

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

  8. 选择路由政策。您可以选择加权轮循基于地理位置。如果您不想在记录中附加路由政策,请选择默认记录类型

  9. 如果您选择了加权轮循,请在新建代管式记录数据部分中,执行以下操作:

    1. 输入与资源记录 (RR) 数据的此子部分相对应的权重。此权重应为介于 0.0 到 1000.0 之间的非负数。路由到目标的流量比率是根据各个权重与所有权重之和的比率计算的。
    2. 根据您选择的记录类型,在下一个字段中输入相关详细信息。例如,如果记录类型为 A,请在 IPv4 地址字段中,输入主机的数字 IP 地址,例如 203.0.113.1。对于 AAAA 记录,请输入主机的 IPv6 地址,以此类推。
  10. 如果您选择了基于地理位置,请在新建代管式记录数据部分中,执行以下操作:

    1. 请输入有效的 Google Cloud 来源区域,例如 asia-east1
    2. 根据您选择的记录类型,在下一个字段中输入相关详细信息。例如,如果记录类型为 A,请在 IPv4 地址字段中,输入主机的数字 IP 地址,例如 203.0.113.1。对于 AAAA 记录,请输入主机的 IPv6 地址,以此类推。
  11. 如需根据您选择的记录类型输入其他数据,请点击添加项。下表列出了记录类型以及您可以输入的其他数据。

    适用的记录类型 输入其他数据
    A IPv4 地址
    AAAA IPv6 地址
    CNAME 标准名称
    MX 邮件交换记录
    SRV Host/port (<aclass="external" l10n-attrs-original-order="href,class" l10n-encrypted-href="fbj0fi6rS3pPqxfn3YD3etONK6A9Q8tQ5MUfKCg7jl5ONxJ2KV+27oDWYJ43g//U">RFC 2782) </aclass="external">
    TXT 文本数据
  12. 如需输入其他代管式记录数据,请点击添加代管式记录数据

  13. 点击创建

gcloud

运行 gcloud beta dns record-sets create 命令:

gcloud beta dns record-sets create RRSET_NAME \
    --ttl=TTL \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE \
    --routing_policy_type=ROUTING_POLICY_TYPE \
    --routing_policy_data=ROUTING_POLICY_DATA

替换以下内容:

  • RRSET_NAME:匹配传入查询的 DNS 名称,并使用此可用区的 DNS 名称作为其后缀,例如 service.example.com
  • TTL:解析器缓存此 ResourceRecordSet 的 TTL(以秒为单位),例如 30
  • RRSET_TYPE:此 ResourceRecordSet 的资源记录类型,例如 A

    如需查看受支持的记录类型的列表,请参阅选择资源记录类型

  • MANAGED_ZONE:与此 ResourceRecordSet 关联的代管式区域,例如 service-zone;此 ResourceRecordSet 的名称必须以该代管式区域的 DNS 名称作为后缀

  • ROUTING_POLICY_TYPE:路由政策的类型

    输入 WRR 表示加权轮循,输入 GEO 表示地理定位。在政策具有选定类型后,您将无法修改此字段;您只能删除现有政策并添加具有其他类型的新政策。

  • ROUTING_POLICY_DATA:路由政策数据

    • 对于 --routing_policy_type=WRR,请输入格式为 ${weight_percent}=${rrdatas} 的分号分隔列表,例如 .8=10.128.1.1;.2=10.130.1.1。将权重指定为任何非负小数。
    • 对于 --routing_policy_type=GEO,请输入格式为 ${region}=${rrdatas} 的分号分隔列表,例如 asia-east1=10.128.1.1;us-central1=10.130.1.1。您可以通过重复使用某个区域来为单个区域指定多个 IP 地址。

API

使用 resourceRecordSets.create 方法:

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

            }
      }
}

替换以下内容:

  • PROJECT_ID:项目的 ID
  • MANAGED_ZONE:与此 ResourceRecordSet 关联的代管式区域,例如 service-zone;此 ResourceRecordSet 的名称必须以该代管式区域的 DNS 名称作为后缀
  • RRSET_NAME:匹配传入查询的 DNS 名称,并使用此可用区的 DNS 名称作为其后缀,例如 service.example.com
  • RRSET_TYPE:此 ResourceRecordSet 的资源记录类型,例如 A
  • TTL:解析器缓存此 ResourceRecordSet 的 TTL(以秒为单位),例如 30
  • LOCATION:您需要为其创建政策的地理位置,例如 asia-east
  • RR_DATA:与资源记录集关联的任意值,例如 198.51.100.5;您还可以输入多个值 rrdata1 rrdata2 rrdata3,例如 198.51.100.1 203.0.113.1...

更新 DNS 路由政策

如需更新 ResourceRecordSet 的路由政策,请按照以下步骤操作。

控制台

  1. 在 Cloud Console 中,转到 Cloud DNS 可用区页面。

    转到 Cloud DNS 可用区

  2. 点击要为其更新 ResourceRecordSet 的路由政策的可用区。

  3. 区域详情页面上,点击要更新的 ResourceRecordSet 旁边的修改

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

gcloud

运行 gcloud beta dns record-sets update 命令:

gcloud beta dns record-sets update RRSET_NAME \
    --ttl=TTL \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE \
    --routing_policy_type=ROUTING_POLICY_TYPE \
    --routing_policy_data=ROUTING_POLICY_DATA

替换以下内容:

  • RRSET_NAME:匹配传入查询的 DNS 名称,并使用此可用区的 DNS 名称作为其后缀,例如 service.example.com
  • TTL:解析器缓存此 ResourceRecordSet 的 TTL(以秒为单位),例如 30
  • RRSET_TYPE:此 ResourceRecordSet 的资源记录类型,例如 A

    如需查看受支持的记录类型的列表,请参阅选择资源记录类型

  • MANAGED_ZONE:与此 ResourceRecordSet 关联的代管式区域,例如 service-zone;此 ResourceRecordSet 的名称必须以该代管式区域的 DNS 名称作为后缀

  • ROUTING_POLICY_TYPE:政策类型

    您可以输入 WRR 表示加权轮循,输入 GEO 表示地理定位。在政策具有选定类型后,您将无法修改此字段;如需进行更改,唯一的方法是删除现有政策并添加具有其他类型的新政策。

  • ROUTING_POLICY_DATA:路由政策数据

    • 对于 --routing_policy_type=WRR,请输入格式为 ${weight_percent}:${rrdatas} 的分号分隔列表,例如 .8=203.0.113.1;.2=198.51.100.1。将权重指定为任何非负小数。
    • 对于 --routing_policy_type=GEO,请输入格式为 ${region}=${IP_address} 的分号分隔列表,例如 asia-east1=198.51.100.1;us-central1=203.0.113.1。您可以通过重复使用某个区域来为单个区域指定多个 IP 地址。

API

使用 resourceRecordSets.patch 方法。 只能指定 rrset.rrdatasrrset.routingPolicy 中的一项。如果指定 routingPolicy,则必须完整指定新的 routingPolicy 字段。

PATCH https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets
{
        "name": "RRSET_NAME.",
        "type": "RRSET_TYPE",
        "ttl": TTL,
        "routingPolicy": {
          "geoPolicy": {
              "item": [
                    {
                        "location": "LOCATION",
                        "rrdatas": ["RR_DATA"]
                    },
                    {
                        "location": "LOCATION",
                        "rrdatas": ["RR_DATA"]
                     }
               ],
               "failover": [
                     {
                         "location": "LOCATION",
                         "rrdatas": ["RR_DATA"]
                     },
                     {
                         "location": "LOCATION",
                         "rrdatas": ["RR_DATA"]
                     }
               ],

            }
      }
}

替换以下内容:

  • PROJECT_ID:项目的 ID
  • MANAGED_ZONE:与此 ResourceRecordSet 关联的代管式区域,例如 service-zone;此 ResourceRecordSet 的名称必须以该代管式区域的 DNS 名称作为后缀
  • RRSET_NAME:匹配传入查询的 DNS 名称,并使用此可用区的 DNS 名称作为其后缀,例如 service.example.com
  • RRSET_TYPE:此 ResourceRecordSet 的资源记录类型,例如 A
  • TTL:解析器缓存此 ResourceRecordSet 的 TTL(以秒为单位),例如 30
  • LOCATION:您需要为其创建政策的地理位置,例如 asia-east
  • RR_DATA:与资源记录集关联的任意值,例如 198.51.100.5;您还可以输入多个值 rrdata1 rrdata2 rrdata3,例如 198.51.100.5 203.0.113.1...

删除 DNS 路由政策

如需删除路由政策,您必须删除包含路由政策的 ResourceRecordSet。请按以下步骤操作。

控制台

  1. 在 Cloud Console 中,转到 Cloud DNS 可用区页面。

    转到 Cloud DNS 可用区

  2. 点击要为其删除 ResourceRecordSet 的地区。

  3. 可用区详情页面上,选中要删除的 ResourceRecordSet 的 DNS 名称旁边的复选框。

  4. 点击删除记录集

gcloud

运行 gcloud beta dns record-sets delete 命令:

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

替换以下内容:

  • RRSET_NAME:匹配传入查询的 DNS 名称,并使用此可用区的 DNS 名称作为其后缀,例如 service.example.com
  • RRSET_TYPE:此 ResourceRecordSet 的资源记录类型,例如 A

    如需查看受支持的记录类型的列表,请参阅选择资源记录类型

  • MANAGED_ZONE:与此 ResourceRecordSet 关联的代管式区域,例如 service-zone;此 ResourceRecordSet 的名称必须以该代管式区域的 DNS 名称作为后缀

API

使用 resourceRecordSets.delete 方法:

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

替换以下内容:

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

后续步骤

  • 如需创建、更新、列出和删除代管式可用区,请参阅管理可用区
  • 如需了解您在使用 Cloud DNS 时可能会遇到的常见问题的解决方案,请参阅问题排查
  • 如需大致了解 Cloud DNS,请参阅 Cloud DNS 概览