เกี่ยวกับ Codelab นี้
1 บทนำ
อัปเดตล่าสุด 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 เรียบร้อยแล้ว!