API ของ Cloud DNS ResourceRecordSets

API ของ Cloud DNS ResourceRecordSets

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ มี.ค. 24, 2021
account_circleเขียนโดย Luca Loncar

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 เรียบร้อยแล้ว!

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

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