1. 簡介

上次更新時間:2021 年 1 月 6 日
什麼是 Cloud DNS?
請參閱我們的首頁。
建構項目
在本 Codelab 中,您將使用 gcloud 建立 Cloud DNS ManagedZone 和相關的 ResourceRecordSets,以管理某些 VM 執行個體的名稱解析。
課程內容
如何「建立」、「讀取」、「刪除」及「更新」個別 ResourceRecordSets。
軟硬體需求
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 包含 ResourceRecordSets。
記下要新增 DNS 記錄的網域名稱。在本例中,我們將使用「my-domain.com」,並假設您的 VM 執行個體位於預設網路上。
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 要求,就會解析為 VM 的 IP 位址。
舉例來說,如果 VM 的 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」的 VM 執行個體
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 記錄,因為 CNAME 記錄是指向其他記錄的指標。這樣一來,如果我們想使用不同的 IP 位址,就不必同時變更這兩項記錄。
結束 VM 執行個體
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 記錄時,似乎發生拼字錯誤。我們可以直接修正記錄,不必刪除並重新建立。
結束 VM 執行個體
exit
修補 CNAME 記錄
gcloud dns record-sets update "www.my-domain.com." --type="CNAME" --rrdatas="my-domain.com." --zone="my-zone"
請注意,由於我們不會變更「–ttl」標記,因此可以省略該標記,但所有其他標記都必須納入,因為這些標記是 ResourceRecordSet 的通用不重複 ID 的一部分。
我們也可以使用 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 中)。
結束 VM 執行個體
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. 恭喜
恭喜,您已成功學會管理 ResourceRecordSets!