מידע נוסף על NodeLocal DNSCache ב-GKE

1. סקירה כללית

מטמון DNS משפר את זמן האחזור של חיפוש DNS, על ידי שליחת בקשות DNS של Pod למטמון המקומי באותו צומת קודם. כך זמני חיפוש ה-DNS יהיו עקביים יותר, ואפשר לצמצם את מספר שאילתות ה-DNS אל kube-dns או אל Cloud DNS.

בשיעור ה-Lab הזה תבדקו איך NodeLocal DNSCache מטפל בתעבורת נתונים של DNS באשכול GKE. תאמתו אשכול GKE Standard שפועלת בו גרסה 1.34.1-gke.3720000 ואילך, כדי לוודא שהיא מופעלת כברירת מחדל. אחר כך משביתים את התכונה כדי לראות איך ההגדרה משתנה כשמשביתים אותה.

יעדים

בשיעור ה-Lab הזה תלמדו איך לבצע את המשימה הבאה:

  • יצירת VPC, רשת משנה וכללי חומת אש בהתאמה אישית
  • פריסת אשכול GKE Standard רגיל עם ערוץ הפצה מהיר
  • הפעלת בדיקה כדי לוודא שמטמון ה-DNS של LocalNode מופעל
  • השבתת המטמון ואימות המצב ללא המטמון

2. הגדרת מעבדה

הגדרת סביבה בקצב אישי

  1. נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
  • מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות כתובת משלכם ולבדוק אם היא זמינה. אי אפשר לשנות את הערך הזה אחרי השלב הזה, והוא יישאר כזה למשך הפרויקט.
  • לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. השלמת ה-codelab הזה לא תעלה לכם הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים נוספים אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

מפעילים את Cloud Shell

אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

ב-מסוף Google Cloud, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

הפעלת Cloud Shell

יחלפו כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו. בסיום התהליך, אמור להופיע משהו כזה:

צילום מסך של טרמינל Google Cloud Shell שבו מוצג שהסביבה מחוברת

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-codelab הזה בדפדפן. לא צריך להתקין שום דבר.

3. הגדרת הסביבה

ניצור VPC בהתאמה אישית עם כללים של חומת אש. אם כבר יש לכם VPC ופרויקט, אתם יכולים לדלג על החלק הזה.

פותחים את Cloud Shell בפינה השמאלית העליונה של המסוף. מגדירים את ההגדרות הבאות: b51b80043d3bac90.png

  1. הפעלה של חלק מה-API שנשתמש בהם בשיעור ה-Lab הזה
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. ב-Google Cloud Shell, יוצרים את האשכול שנקרא cache-gke-cluster. באשכולות GKE Standard שפועלת בהם גרסה 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. לאחר מכן מריצים את הפקודה הבאה (הפקודה הזו יוצרת Pod בעלת הרשאות ברשת המארח כדי לוודא שכללי ה-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 דקות לכל מאגר צמתים, כי 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 set כי הם הוסרו.

  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 דרך נקודת קצה (endpoint) של Private Service Connect

Codelab: Building AI Agents with ADK:The Foundation

אל שיעור ה-Lab הבא

אתם יכולים להמשיך את יחידת ה-Quest ב-Google Cloud או לנסות את שיעורי ה-Lab הבאים של Google Cloud Skills Boost: