Cloud DNS FQDN 出站 DNS 转发

1. 简介

ef2d068c413a15bd.png

本 Codelab 将引导您使用完全限定域名 (FQDN) 作为转发目标来设置 Cloud DNS 出站转发区域。借助此功能,您可以将 DNS 流量定向到从 DNS 名称解析出的 IP 地址,而不是在转发区域的配置中对 IP 地址进行硬编码。当后端 DNS 解析器 IP 地址发生变化时,这一点尤为有用,因为您可以更新 FQDN 的 DNS 记录,Cloud DNS 会自动获取更改。

在本 Codelab 结束时,您将能够配置使用以下内容的 Cloud DNS 转发区域:

  • 与包含 A/AAAA 记录的专用区域匹配的 FQDN 目标。
  • 由 Cloud DNS 路由政策(地理定位或加权轮循)支持的 FQDN 目标,用于实现区域亲和度或流量分发。

FQDN 转发概览

借助 Cloud DNS 转发,您可以从 Google Cloud 平台资源解析托管在 Google Cloud 平台之外(例如本地或其他云端)的专用 DNS 名称。传统上,此功能支持转发到目标 IP 地址列表。FQDN 转发功能扩展了这一功能,允许您在转发区域中将 FQDN 指定为转发目标。

指定 FQDN 后,Cloud DNS 会使用内部查找(该查找使用来源网络的解析逻辑)将其解析为 IP 地址。这意味着,FQDN 目标可以与专用区域、DNS 路由政策(地理位置或加权轮询)甚至互联网公共域名匹配。然后,Cloud DNS 会将查询转发到解析出的目标 IP。

构建内容

使用新专用区域进行区域性 FQDN 转发

您将构建一个设置,以实现 DNS 流量的区域亲和性。这涉及创建一个专用 DNS 区域并在其中配置地理定位路由政策,然后将转发区域关联到此 FQDN 目标。这样可确保将来自特定区域(例如 us-east1)的流量转发到相应的区域 DNS 服务器。

使用现有专用区域进行 FQDN 转发

您将学习创建一个转发可用区,其目标是现有专用 DNS 区域中由 A/AAAA 记录支持的 FQDN。此示例演示了将查询转发到使用 FQDN 转发目标解析的静态定义 IP 地址。

学习内容

FQDN 转发的概念

您将了解,FQDN 转发扩展了 DNS 转发,因为您可以指定 FQDN 转发目标(而不仅仅是 IP 地址)作为出站查询的转发目标。

FQDN 转发的好处

您将了解,由于 Cloud DNS 会自动从 FQDN 的 DNS 记录中提取更改,因此您无需在后端 DNS 解析器 IP 地址发生变化时进行手动更新。此外,它还允许 DNS 服务器位于共享名称后面或动态扩缩,从而实现更灵活的 DNS 基础架构扩缩。

与 Cloud DNS 路由政策集成

您将了解如何将 FQDN 转发与 Cloud DNS 路由政策(地理定位或加权轮循)结合使用,以实现区域亲和性、针对地理位置不同的部署优化性能,以及根据配置的权重分配流量。

Google Cloud CLI 命令语法

您将熟悉用于设置 FQDN 转发区域的 gcloud dns managed-zones create 命令及其相关标志 (--forwarding-targets--private-forwarding-targets)。

前提条件

如需完成此 Codelab,您需要具备以下条件:

2. 准备工作

了解 FQDN 转发场景

Cloud DNS FQDN 转发支持多种使用场景:

  • 包含 A/AAAA 记录的专用区域:如果 FQDN 与专用区域中的 A/AAAA 记录匹配,系统会将解析出的 IP 地址添加到转发列表,其行为与直接转发到目标 IP 地址相同。
  • 采用地理定位政策的专用网域:借助地理定位政策,您可以指定来源地理位置并提供相应答案,以便根据地理位置验证流量分布情况。这对于区域 DNS 转发和亲和性至关重要。
  • 采用加权轮循 (WRR) 政策的专用网域:WRR 政策允许为 DNS 名称的每个 IP 地址指定不同的权重,以验证流量是否根据配置的权重进行分配。
  • 包含 A/AAAA 记录的公共区域:如果 FQDN 与同一网络中可见的任何专用名称都不匹配,Cloud DNS 会尝试使用公共互联网来解析它。

了解用于 FQDN 转发的 Google Cloud CLI 命令

如需使用 gcloud CLI 命令创建具有 FQDN 转发目标的转发区域,您将使用 gcloud dns managed-zones create 命令。用于指定 FQDN 目标的键标志为 --forwarding-targets--private-forwarding-targets。如需详细了解标准路由和专用路由方法,请参阅此文档

  • --forwarding-targets:要将查询转发到的目标名称服务器的 IPv4/IPv6 地址列表或一个域名。对于公开可见性,系统会忽略此属性。非 RFC1918 地址将通过互联网转发到目标。RFC1918 地址将通过 VPC 转发。
  • --private-forwarding-targets:要将查询转发到的目标名称服务器的 IPv4/IPv6 地址列表或一个域名。对于公开可见性,系统会忽略此属性。系统将通过 VPC 访问为此参数指定的所有地址。

示例语法:

gcloud dns managed-zones create NAME \
    --description=DESCRIPTION \
    --dns-name=DNS_SUFFIX \
    --networks=VPC_NETWORK_LIST \
    --forwarding-targets=DEFAULT_FQDN_TARGET \
    --visibility=private

请注意,您可以指定 --private-forwarding-targets,而不是 --forwarding-targets

设置您的 Google Cloud Platform 项目

登录 gcloud CLI。

gcloud auth login

创建一个项目。

gcloud projects create my-codelab-project

启用 Cloud DNS API。这项设置可能需要几分钟才能生效。

gcloud services enable dns.googleapis.com

本 Codelab 使用的是使用新项目创建的默认 VPC 网络。您也可以创建新的网络来替代。

3. 设置地区性 FQDN 转发(使用新的专用区域)

此场景演示了如何实现区域 DNS 转发,确保来自特定区域的流量转发到同一区域内的 DNS 服务器。

创建专用 DNS 区域

首先,创建一个专用 DNS 区域(例如 foo.com),用于托管您的 FQDN 及其关联的地理定位路由政策。此区域必须对您的默认网络可见。

gcloud dns managed-zones create my-zone \
    --description="Private Zone for FQDN outbound DNS forwarding." \
    --dns-name=foo.com. \
    --networks=default \
    --visibility=private

在专用区域内创建地理定位路由政策记录集

接下来,在 my-zone 中创建一个记录集(例如 geo.foo.com),并应用地理定位路由政策。此示例为 asia-east1 和 asia-west1 配置了 IP 地址。

gcloud dns record-sets create geo.foo.com. \
    --ttl="30" \
    --type="A" \
    --zone="my-zone" \
    --routing-policy-type="GEO" \
    --routing-policy-data="asia-east1=192.168.0.1;us-central1=192.168.0.2"

注意:如果停用了地理围栏(默认设置,也是推荐设置),当原始区域中的目标处于不健康状态时,系统会将查询定向到最近的健康区域。

使用 FQDN 目标创建转发区域

创建在同一默认网络中显示的转发区域 (geo.test.com.),并将 geo.foo.com.(具有地理位置路由政策的 FQDN)设置为其转发目标。

gcloud dns managed-zones create my-geo-fwd-zone \
    --description="Forwarding zone for FQDN outbound DNS forwarding for routing policy." \
    --dns-name=geo.test.com. \
    --networks=default \
    --private-forwarding-targets=geo.foo.com. \
    --visibility=private

现在,与 geo.test.com 匹配的任何 DNS 查询都会根据查询的来源区域,转发到 geo.foo.com 的解析 IP(例如 192.168.0.1 或 192.168.0.2)。

4. 设置 FQDN 转发(使用现有专用区域)

已有现有专用 DNS 区域

假设您已经有一个名为 my-zone (foo.com) 的专用 DNS 可用区,该可用区对 default 网络可见。

在此专用区域中创建 DNS 资源记录

在现有的 my-zone 中为 a.foo.com 创建 A 类型记录。

gcloud dns record-sets create a.foo.com. \
    --ttl="30" \
    --type="A" \
    --zone="my-zone" \
    --rrdatas=1.2.3.4

创建转发区域并指定 FQDN 目标

与区域性 FQDN 场景类似,创建一个转发可用区,并将 a.foo.com 指定为转发目标。

gcloud dns managed-zones create my-a-fwd-zone \
    --description="Forwarding zone for FQDN outbound DNS forwarding for A record." \
    --dns-name=a.test.com. \
    --networks=default \
    --private-forwarding-targets=a.foo.com. \
    --visibility=private

a.test.com 匹配的任何 DNS 查询都将转发到 a.foo.com 的已解析 IP 地址 1.2.3.4。

5. 清理

在删除专用区域之前,必须先删除专用区域中的所有 ResourceRecordSet(NS 和 SOA 记录除外,这两种记录由系统自动生成,并且必须始终存在于专用区域中)。

删除专用网域中的地理位置路由政策。

gcloud dns record-sets delete "geo.foo.com." --type="A" --zone="my-zone"

删除专用区域中的 A 记录。

gcloud dns record-sets delete "a.foo.com." --type="A" --zone="my-zone"

删除专用区域。

gcloud dns managed-zones delete "my-zone"

删除地理定位路由政策的转发区域。

gcloud dns managed-zones delete "my-geo-fwd-zone"

删除 A 记录的转发区域。

gcloud dns managed-zones delete "my-a-fwd-zone"

6. 恭喜

恭喜,您已成功学习使用 FQDN 出站 DNS 转发!

深入阅读

参考文档