程式碼研究室簡介
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"