1. 简介

上次更新日期: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!