关于此 Codelab
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"