API ของ Cloud DNS ResourceRecordSets

1. บทนำ

64e18005b6cdcd83.png

อัปเดตล่าสุด 06-01-2021

Cloud DNS คืออะไร

ดูหน้าแรกของเรา

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

ใน Codelab นี้ คุณจะสร้าง Cloud DNS ManagedZone และ ResourceRecordSets ที่เกี่ยวข้องโดยใช้ gcloud เพื่อจัดการการแปลงชื่อให้กับอินสแตนซ์ 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 ประกอบด้วย 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 ผ่านเครือข่ายส่วนตัวเสมือนสำหรับโดเมนของคุณจะถูกแปลงให้เป็นที่อยู่ 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: หมายถึงเวลาที่จะคงอยู่สำหรับระเบียนนี้
  • –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 อีกระเบียนหนึ่ง วิธีนี้จะช่วยป้องกันไม่ให้เราเปลี่ยนแปลงระเบียนทั้งสองในกรณีที่เราต้องการใช้ที่อยู่ 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. ขอแสดงความยินดี

ขอแสดงความยินดี คุณเรียนรู้วิธีจัดการ ResourceRecordSets เรียบร้อยแล้ว!

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

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