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