1. ภาพรวม
แคช DNS ช่วยลดเวลาในการตอบสนองในการค้นหา DNS โดยการส่งคำขอ DNS ของพ็อดไปยังแคชในเครื่องบนโหนดเดียวกันก่อน ซึ่งจะทำให้เวลาในการค้นหา DNS สอดคล้องกันมากขึ้น และลดจำนวนคำขอ DNS ไปยัง kube-dns หรือ Cloud DNS ได้
ในแล็บนี้ คุณจะได้ทดสอบวิธีที่ NodeLocal DNSCache จัดการการรับส่งข้อมูล DNS ในคลัสเตอร์ GKE คุณจะตรวจสอบคลัสเตอร์ GKE มาตรฐานที่ใช้เวอร์ชัน 1.34.1-gke.3720000 ขึ้นไป เพื่อยืนยันว่าได้เปิดใช้โดยค่าเริ่มต้น จากนั้นปิดใช้เพื่อดูว่าการกำหนดค่าเปลี่ยนแปลงอย่างไรเมื่อคุณปิดฟีเจอร์
วัตถุประสงค์
ในแล็บนี้ คุณจะได้เรียนรู้วิธีทำงานต่อไปนี้
- สร้าง VPC, เครือข่ายย่อย และกฎไฟร์วอลล์ที่กำหนดเอง
- ทำให้ใช้งานได้คลัสเตอร์ GKE Standard มาตรฐานที่มีช่องการเผยแพร่แบบรวดเร็ว
- เรียกใช้การทดสอบเพื่อยืนยันว่าได้เปิดใช้แคช DNS ของ LocalNode แล้ว
- ปิดใช้แคชและยืนยันสถานะโดยไม่มีแคช
2. การตั้งค่าห้องทดลอง
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น
PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
จาก Google Cloud Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อเสร็จแล้ว คุณควรเห็นข้อความคล้ายกับตัวอย่างต่อไปนี้

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดใน Codelab นี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไร
3. ตั้งค่าสภาพแวดล้อม
เราจะสร้าง VPC ที่กำหนดเองพร้อมกฎไฟร์วอลล์ หากมี VPC และโปรเจ็กต์อยู่แล้ว คุณสามารถข้ามส่วนนี้ได้
เปิด Cloud Shell ที่ด้านบนของคอนโซลทางด้านขวา และกำหนดค่าดังนี้ 
- เปิดใช้ API บางส่วนที่เราจะใช้ในแล็บนี้
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
- ตั้งค่าตัวแปรบางอย่าง ตัวแปรเหล่านี้คือรหัสโปรเจ็กต์และชื่อ VPC (คุณจะสร้าง VPC ในขั้นตอนที่ 3)
export projectid=$(gcloud config get-value project)
export vpc_name=gke-cache-vpc
export subnet_name=mainsubnet
export region=us-east1
export zone=us-east1-b
export cluster_name=cache-gke-cluster
export channel=rapid
export machine_type=e2-standard-4
echo $projectid
echo $vpc_name
- ตอนนี้ให้สร้าง VPC ที่กำหนดเองชื่อ
gke-cache-vpc
gcloud compute networks create $vpc_name --subnet-mode=custom --project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
- สร้างซับเน็ตใน VPC ใหม่
gcloud compute networks subnets create $subnet_name \
--network=$vpc_name \
--range=10.0.88.0/24 \
--region=$region \
--enable-private-ip-google-access \
--project=$projectid
- เพิ่มกฎไฟร์วอลล์ไปยัง VPC
gcloud compute firewall-rules create $vpc_name-allow-internal \
--network=$vpc_name --allow=tcp,udp,icmp --source-ranges=10.0.88.0/24
gcloud compute firewall-rules create $vpc_name-allow-ssh \
--network=$vpc_name --allow=tcp:22 --source-ranges=35.235.240.0/20
4. สร้างเกตเวย์ NAT สำหรับการสื่อสารทางอินเทอร์เน็ต
เราต้องให้สิทธิ์การเข้าถึงอินเทอร์เน็ตภายนอกขาออก ดังนั้นมาสร้างเกตเวย์ Cloud NAT แล้วแนบกัน
ใน Cloud Shell ให้ใช้คำสั่งต่อไปนี้
- สร้าง Cloud NAT และเกตเวย์ NAT
gcloud compute routers create gke-nat-router --network=$vpc_name --region=$region
gcloud compute routers nats create gke-nat-gw \
--router=gke-nat-router --region=$region \
--auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges
5. ติดตั้งใช้งานคลัสเตอร์ GKE และยืนยัน
- สร้างคลัสเตอร์ชื่อ
cache-gke-clusterใน Google Cloud Shell คลัสเตอร์ GKE มาตรฐานที่ใช้เวอร์ชัน1.34.1-gke.3720000ขึ้นไปจะเปิดใช้ NodeLocal DNSCache โดยค่าเริ่มต้น (ระบบควรใช้เวลา 4-10 นาทีในการจัดสรรคลัสเตอร์)
gcloud container clusters create $cluster_name \
--zone=$zone --network=$vpc_name --subnetwork=$subnet_name \
--release-channel=$channel --machine-type=$machine_type \
--enable-ip-alias
- เมื่อสร้างคลัสเตอร์แล้ว ให้เชื่อมต่อโดยทำดังนี้
gcloud container clusters get-credentials $cluster_name --zone $zone
- ตอนนี้มาตรวจสอบว่าได้เปิดใช้ NodeLocal DNSCache แล้ว
คำสั่งเหล่านี้จะยืนยันว่าเวอร์ชันเป็น 1.34.1-gke.3720000 ขึ้นไป และยืนยันว่าเอเจนต์ในเครื่องกำลังทำงานและบริการ
kubectl version | grep "Server Version"
kubectl get pods -n kube-system -o wide | grep node-local-dns -w
kubectl get svc,endpoints -n kube-system -l k8s-app=kube-dns
- จากนั้นเรียกใช้คำสั่งต่อไปนี้ (คำสั่งนี้จะสร้างพ็อดที่มีสิทธิ์ในเครือข่ายโฮสต์เพื่อยืนยันว่ากฎ iptables ของโหนดกำลังสกัดกั้นและกำหนดเส้นทางการรับส่งข้อมูล DNS ไปยังแคชในเครื่อง)
export KUBEDNS_IP=$(kubectl get svc kube-dns -n kube-system -o jsonpath='{.spec.clusterIP}')
kubectl run node-inspector --quiet --rm -it --image=alpine --privileged --restart=Never \
--overrides='{"spec": {"hostNetwork": true}}' -- \
sh -c "apk add --no-cache iptables && iptables-save | grep -E '169.254.20.10|$KUBEDNS_IP'"
สิ่งที่ต้องมองหา: มองหา -j NOTRACK. ซึ่งจะยืนยันว่าการรับส่งข้อมูล DNS ข้ามตารางการติดตามการเชื่อมต่อ

6. ปิดใช้ NodeLocal DNSCache และยืนยัน
ตอนนี้เราจะนำการเพิ่มประสิทธิภาพออกเพื่อดูว่าแอปทำงานอย่างไรหากไม่มีการเพิ่มประสิทธิภาพ
- ไปที่ Cloud Shell แล้วเรียกใช้คำสั่งต่อไปนี้ หมายเหตุ: การดำเนินการนี้จะทริกเกอร์การสร้างโหนดใหม่ ซึ่งโดยปกติจะใช้เวลา 3-5 นาทีต่อ Node Pool เนื่องจาก GKE จะหมุนเวียนอินสแตนซ์
gcloud container clusters update $cluster_name --zone=$zone --update-addons=NodeLocalDNS=DISABLED --quiet
kubectl get pods -n kube-system -o wide | grep node-local-dns -w
คุณไม่ควรเห็นพ็อดเหล่านี้ในชุด Daemon เนื่องจากระบบได้นำออกไปแล้ว
- เรียกใช้การทดสอบอีกครั้ง
kubectl run node-inspector --quiet --rm -it --image=alpine --privileged --restart=Never \
--overrides='{"spec": {"hostNetwork": true}}' -- \
sh -c "apk add --no-cache iptables && iptables-save | grep -E '169.254.20.10|$KUBEDNS_IP'"
หลังจากปิดใช้ส่วนเสริมแล้ว เอาต์พุตจะไม่มีกฎ -j NOTRACK หรือการกล่าวถึงที่อยู่ IP 169.254.20.10 อีกต่อไป ซึ่งหมายความว่าคุณจะไม่ได้รับประโยชน์จากแคชในเครื่องอีกต่อไป

7. ล้างข้อมูล
# 1. Delete the GKE Cluster
# This will remove the node and all system pods (including kube-dns)
gcloud container clusters delete $cluster_name --zone=$zone --quiet
# 2. Delete the Cloud NAT and Router
# It is best practice to remove these before the VPC
gcloud compute routers nats delete gke-nat-gw --router=gke-nat-router --region=$region --quiet
gcloud compute routers delete gke-nat-router --region=$region --quiet
# 3. Delete the Firewall Rules
gcloud compute firewall-rules delete $vpc_name-allow-internal $vpc_name-allow-ssh --quiet
# 4. Delete the Subnet and VPC
gcloud compute networks subnets delete $subnet_name --region=$region --quiet
gcloud compute networks delete $vpc_name --quiet
8. ขั้นตอนถัดไป / ดูข้อมูลเพิ่มเติม
คุณอ่านข้อมูลเพิ่มเติมเกี่ยวกับเอกสารประกอบและกรณีการใช้งานเครือข่าย GKE ได้
Codelab: เข้าถึงแชท Gemini 3 Pro โดยใช้ Python SDK ผ่านปลายทาง Private Service Connect
Codelab: การสร้าง AI Agent ด้วย ADK:รากฐาน
เข้าร่วมแล็บถัดไป
ทำภารกิจต่อด้วย Google Cloud และดู Lab อื่นๆ ของ Google Cloud Skills Boost ดังนี้