สำรวจ GKE NodeLocal DNSCache

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. การตั้งค่าห้องทดลอง

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

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

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

จาก Google Cloud Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน

เปิดใช้งาน Cloud Shell

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

ภาพหน้าจอของเทอร์มินัล Google Cloud Shell ที่แสดงว่าสภาพแวดล้อมเชื่อมต่อแล้ว

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดใน Codelab นี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไร

3. ตั้งค่าสภาพแวดล้อม

เราจะสร้าง VPC ที่กำหนดเองพร้อมกฎไฟร์วอลล์ หากมี VPC และโปรเจ็กต์อยู่แล้ว คุณสามารถข้ามส่วนนี้ได้

เปิด Cloud Shell ที่ด้านบนของคอนโซลทางด้านขวา และกำหนดค่าดังนี้ b51b80043d3bac90.png

  1. เปิดใช้ API บางส่วนที่เราจะใช้ในแล็บนี้
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
  1. ตั้งค่าตัวแปรบางอย่าง ตัวแปรเหล่านี้คือรหัสโปรเจ็กต์และชื่อ 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
  1. ตอนนี้ให้สร้าง VPC ที่กำหนดเองชื่อ gke-cache-vpc
gcloud compute networks create $vpc_name --subnet-mode=custom --project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
  1. สร้างซับเน็ตใน 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
  1. เพิ่มกฎไฟร์วอลล์ไปยัง 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 ให้ใช้คำสั่งต่อไปนี้

  1. สร้าง 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 และยืนยัน

  1. สร้างคลัสเตอร์ชื่อ 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
  1. เมื่อสร้างคลัสเตอร์แล้ว ให้เชื่อมต่อโดยทำดังนี้
gcloud container clusters get-credentials $cluster_name --zone $zone
  1. ตอนนี้มาตรวจสอบว่าได้เปิดใช้ 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
  1. จากนั้นเรียกใช้คำสั่งต่อไปนี้ (คำสั่งนี้จะสร้างพ็อดที่มีสิทธิ์ในเครือข่ายโฮสต์เพื่อยืนยันว่ากฎ 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 ข้ามตารางการติดตามการเชื่อมต่อ

7135447929b7c48f.png

6. ปิดใช้ NodeLocal DNSCache และยืนยัน

ตอนนี้เราจะนำการเพิ่มประสิทธิภาพออกเพื่อดูว่าแอปทำงานอย่างไรหากไม่มีการเพิ่มประสิทธิภาพ

  1. ไปที่ 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 เนื่องจากระบบได้นำออกไปแล้ว

  1. เรียกใช้การทดสอบอีกครั้ง
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 อีกต่อไป ซึ่งหมายความว่าคุณจะไม่ได้รับประโยชน์จากแคชในเครื่องอีกต่อไป

4693ee556701e145.png

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 ดังนี้