Cloud DNS ResourceRecordSets API

1. 简介

64e18005b6cdcd83.png

上次更新日期:2021 年 1 月 6 日

什么是 Cloud DNS?

请参阅我们的首页

构建内容

在此 Codelab 中,您将使用 gcloud 创建 Cloud DNS ManagedZone 和相关的 ResourceRecordSet,以管理对某些虚拟机实例的名称解析。

学习内容

如何创建、读取、删除和更新各个 ResourceRecordSet。

所需条件

2. 准备工作

设置 Google Cloud Platform 项目

登录 gcloud

gcloud auth login

创建项目

gcloud projects create my-codelab-project

启用 Cloud DNS API

gcloud services enable dns.googleapis.com

此操作可能需要几分钟时间才能生效

3. 创建专用 ManagedZone

ManagedZone 包含 ResourceRecordSet。

记下您要为其添加 DNS 记录的域名。在此示例中,我们将使用“my-domain.com”,并假设您的虚拟机实例位于默认网络中。

gcloud dns managed-zones create my-zone \
    --description="ManagedZone for Cloud DNS ResourceRecordSets codelab." \
    --dns-name=my-domain.com. \
    --networks=default \
    --visibility=private

4. 管理 ResourceRecordSets

在本部分结束时,通过虚拟专用网络针对您的网域发出的 DNS 请求将解析为虚拟机的 IP 地址。

例如,如果虚拟机的 IP 地址为“1.2.3.4”,并且您希望“my-domain.com.”解析为该 IP 地址,则必须创建“A 记录”。

创建 A 记录

gcloud dns record-sets create "my-domain.com." --type="A" --ttl="60" --rrdatas="1.2.3.4" --zone="my-zone"
  • 位置实参“my-domain.com.”。(也称为 dnsName)是我们想要为其定义 DNS 解析的名称。
  • -type:表示我们尝试创建的 DNS 记录类型。
  • -ttl:表示相应记录的存留时间。
  • –rrdatas:包含查询的实际答案。
  • -zone:必需,用于指定应在哪个 ManagedZone 中创建此记录。

如需详细了解 DNS 概念,请点击此处

现在您已创建 A 记录,接下来应该可以测试 DNS 解析了。

通过 SSH 连接到您的机器。在此示例中,我们使用“us-central1-a”中的虚拟机实例“dns-codelab”

gcloud compute ssh codelab --zone=us-central1-a

安装 dnsutils,以便您可以使用“dig”命令

sudo apt install dnsutils

查询您的网域

dig my-domain.com.

这应会生成类似于以下内容的输出

...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19979
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
...
;; QUESTION SECTION:
;my-domain.com.                        IN        A

;; ANSWER SECTION:
my-domain.com.                60        IN        A        1.2.3.4
...

创建、修补和获取 CNAME 记录

现在,您已将 my-domain.com 映射到 1.2.3.4,接下来可能需要确保 www.my-domain.com 也解析为 1.2.3.4。系统不会自动创建带有“www.”前缀的记录。

如果您查询 www.my-domain.com。

dig www.my-domain.com.

您将获得类似如下所示的输出

...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 61964
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
...

表示相应网域没有 DNS 记录

我们不应再创建一条 A 记录,而应创建一条 CNAME 记录,该记录是指向另一条记录的指针。这样一来,如果我们想使用其他 IP 地址,就不必同时更改这两条记录。

退出虚拟机实例

exit

创建 CNAME 记录

gcloud dns record-sets create "www.my-domain.com." --type="CNAME" --ttl="60" --rrdatas="my-domin.com." --zone="my-zone"

现在您已创建 CNAME 记录,应该可以测试 DNS 解析了。

再次通过 SSH 连接到您的机器

gcloud compute ssh codelab --zone=us-central1-a

查询您的网域

dig www.my-domain.com.

您应该会收到类似如下所示的输出结果

...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 61964
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
...

糟糕!我们似乎在创建 CNAME 记录时,在“–rrdatas”标志中输入了错误的内容。我们可以修补正确的更改,而不是删除并重新创建记录。

退出虚拟机实例

exit

修补 CNAME 记录

gcloud dns record-sets update "www.my-domain.com." --type="CNAME" --rrdatas="my-domain.com." --zone="my-zone"

请注意,由于我们不会更改“–ttl”标志,因此可以省略该标志,但必须包含所有其他标志,因为它们是 ResourceRecordSet 的全局唯一标识符的一部分。

我们还可以使用 gcloud 验证记录是否符合预期

gcloud dns record-sets describe "www.my-domain.com." --type="CNAME" --zone="my-zone"

这应会生成输出

NAME                    TYPE    TTL  DATA
www.my-domain.com.      CNAME   60  "my-domain.com."

验证 CNAME 记录是否能正确解析

gcloud compute ssh codelab --zone=us-central1-a
dig www.my-domain.com.

您应该会收到类似如下所示的输出结果

...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7471
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
...
;; QUESTION SECTION:
;www.my-domain.com.                IN        A

;; ANSWER SECTION:
www.my-domain.com.        60        IN        CNAME         my-domain.com..
...

删除以进行清理

在删除 ManagedZone 之前,必须先删除 ManagedZone 中的所有 ResourceRecordSet(NS 和 SOA 记录除外,这些记录是自动生成的,并且必须始终存在于 ManagedZone 中)。

退出虚拟机实例

exit

删除 CNAME 记录

gcloud dns record-sets delete "www.my-domain.com." --type="CNAME" --zone="my-zone"

删除 A 记录

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

删除 ManagedZone

gcloud dns managed-zones delete "my-zone"

5. 恭喜

恭喜!您已成功学会管理 ResourceRecordSet!

深入阅读

参考文档