API ของ Cloud DNS ResourceRecordSets

1. บทนำ

64e18005b6cdcd83.png

อัปเดตครั้งล่าสุด: 06-01-2021

Cloud DNS คืออะไร

ดูหน้าแรก

สิ่งที่คุณจะสร้าง

ใน Codelab นี้ คุณจะสร้าง ManagedZone ของ Cloud DNS และ ResourceRecordSets ที่เกี่ยวข้องโดยใช้ gcloud เพื่อจัดการการเปลี่ยนชื่อเป็น IP ของอินสแตนซ์ 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

การดำเนินการนี้อาจใช้เวลา 2-3 นาทีจึงจะมีผล

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. จัดการ ResourceRecordSets

เมื่อสิ้นสุดส่วนนี้ คำขอ DNS ผ่านเครือข่ายส่วนตัวเสมือนสำหรับโดเมนจะได้รับการแก้ไขเป็นที่อยู่ IP ของ VM

เช่น หากที่อยู่ IP ของ VM คือ "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: ระบุ Time to Live สำหรับระเบียนนี้
  • –rrdatas: มีคำตอบจริงสำหรับคำค้นหา
  • –zone: ต้องระบุเพื่อกำหนด ManagedZone ที่ควรสร้างระเบียนนี้

อ่านเพิ่มเติมเกี่ยวกับแนวคิด DNS ที่นี่

ตอนนี้คุณได้สร้างระเบียน A แล้ว คุณควรจะทดสอบการแปลง DNS ได้

SSH ไปยังเครื่อง ในตัวอย่างนี้ เราใช้อินสแตนซ์ VM ที่มีชื่อ "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 อีกรายการ ซึ่งจะช่วยให้เราไม่ต้องเปลี่ยนทั้ง 2 ระเบียนในกรณีที่เราต้องการใช้ที่อยู่ 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
...

ขออภัย ดูเหมือนว่าเราจะพิมพ์ผิดตอนสร้างระเบียน CNAME ที่แฟล็ก "–rrdatas" เราสามารถแก้ไขการเปลี่ยนแปลงที่ถูกต้องแทนการลบและสร้างระเบียนใหม่

ออกจากอินสแตนซ์ 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 ได้ คุณต้องลบ ResourceRecordSets ทั้งหมดภายใน ManagedZone ก่อน (ยกเว้นระเบียน 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 เรียบร้อยแล้ว

อ่านเพิ่มเติม

เอกสารอ้างอิง