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. 管理 ResourceRecordSet
完成本部分后,通过您的虚拟专用网为您的网域发出的 DNS 请求将解析为虚拟机的 IP 地址。
例如,如果您虚拟机的 IP 地址是“1.2.3.4”,而您想要输入“my-domain.com”。您必须创建一条“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 连接到您的机器。在此示例中,我们使用名为“dns-codelab”的虚拟机实例位于“us-central1-a”
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 记录
我们应该创建作为指向另一记录的指针的 CNAME 记录,而不是创建另一个 A 记录。这样,当我们想要使用不同的 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
...
糟糕!我们在“–rrdatas”处创建 CNAME 记录时似乎有拼写错误标志。我们可以在正确的更改中修补,而不是删除并重新创建记录。
退出虚拟机实例
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!