1. 簡介
上次更新時間:2021 年 1 月 6 日
什麼是 Cloud DNS?
請查看我們的首頁。
建構項目
在本程式碼研究室中,您將使用 gcloud 建立 Cloud DNS ManagedZone 和相關 ResourceRecordSet,管理部分 VM 執行個體的名稱解析作業。
課程內容
如何建立、讀取、刪除及更新個別 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」並假設 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. 管理 ResourceRecordSet
本節結束時,透過虛擬私人網路對網域提出的 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」。,a.k.a. dnsName,是我們要定義 DNS 解析的名稱。
- –type:代表我們要建立的 DNS 記錄類型。
- –ttl:表示這筆記錄存留時間。
- –rrdatas:保留查詢的實際答案。
- –zone:此為必要欄位,用於指定應在哪個 ManagedZone 建立這個記錄。
如要進一步瞭解 DNS 概念,請按這裡。
現在您已建立 A 記錄,應該可以測試 DNS 解析。
透過 SSH 連至機器。在這個範例中,我們使用名稱為「dns-codelab」的 VM 執行個體位於「us-central1-a」
gcloud compute ssh codelab --zone=us-central1-a
安裝 dnsutils 以便使用「dig」Command 鍵
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 位址,所以不必變更這兩筆記錄。
先退出 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 的通用唯一識別碼中,所以必須加入此標記。
我們也可以使用 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. 恭喜
恭喜,您已成功學會管理 ResourceRecordSet!