אם אתם משתמשים ב-kube-dns כדי לגלות שירותים, יכול להיות שתיתקלו בשגיאות חיבור כמו dial tcp: i/o timeout או no such host. שגיאות כאלה מעידות בדרך כלל על בעיות ב-Pods של kube-dns במרחב השמות kube-system, כמו הגדרות שגויות, מגבלות משאבים או בעיות בקישוריות לרשת שמשפיעות על ה-Pods האלה.
בדף הזה מוסבר איך לאבחן ולפתור בעיות נפוצות שקשורות לפריסה של kube-dns, כדי להבטיח פענוח DNS מהימן לעומסי העבודה.
המידע הזה חשוב לאדמינים ולמפעילים של הפלטפורמה, שאחראים על תחזוקה של רכיבי ליבה של אשכולות כמו kube-dns, ולמפתחי אפליקציות, שהאפליקציות שלהם תלויות ב-kube-dns כדי להתחבר לשירותים אחרים באשכול. מידע נוסף על התפקידים הנפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בתוכן של Google Cloud , זמין במאמר תפקידי משתמשים נפוצים ומשימות ב-GKE.
זיהוי המקור של בעיות ב-DNS ב-kube-dns
בקטעים הבאים מוסבר איך לאבחן למה ל-kube-dns קשה לפתור שאילתות.
בדיקה אם פודים של kube-dns פועלים
פודים של Kube-dns הם קריטיים לפתרון שמות בתוך האשכול. אם הם לא פועלים, סביר להניח שתיתקלו בבעיות בפענוח DNS.
כדי לוודא שרכיבי ה-Pod של kube-dns פועלים בלי הפעלות מחדש מהזמן האחרון, צריך להציג את הסטטוס של רכיבי ה-Pod האלה:
kubectl get pods -l k8s-app=kube-dns -n kube-system
הפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE
kube-dns-POD_ID_1 5/5 Running 0 16d
kube-dns-POD_ID_2 0/5 Terminating 0 16d
בפלט הזה, POD_ID_1 ו-POD_ID_2
מייצגים מזהים ייחודיים שמצורפים אוטומטית ל-Pods של kube-dns.
אם הפלט מראה שלאף אחד מהפודים של kube-dns אין סטטוס של
Running, צריך לבצע את השלבים הבאים:
אפשר להשתמש ביומני הביקורת Admin Activity כדי לבדוק אם בוצעו שינויים לאחרונה, כמו שדרוגים של גרסאות של אשכולות או של מאגרי צמתים, או שינויים ב-ConfigMap של kube-dns. מידע נוסף על יומני ביקורת זמין במאמר בנושא יומני ביקורת של GKE. אם מוצאים שינויים, מבטלים אותם וצופים שוב בסטטוס של ה-Pods.
אם לא מצאתם שינויים רלוונטיים שבוצעו לאחרונה, בדקו אם אתם נתקלים בשגיאת OOM בצומת שבו פועל ה-Pod של kube-dns. אם אתם רואים הודעת שגיאה דומה להודעה הבאה בהודעות היומן של Cloud Logging, המשמעות היא שמתרחשת שגיאת OOM ב-Pods האלה:
Warning: OOMKilling Memory cgroup out of memoryההודעה הזו מציינת שתהליך הסתיים על ידי Kubernetes בגלל צריכת משאבים מוגזמת. מערכת Kubernetes מתזמנת את ה-Pods על סמך בקשות למשאבים, אבל מאפשרת ל-Pods לצרוך משאבים עד למגבלות המשאבים שלהם. אם המגבלות גבוהות מהבקשות או שאין מגבלות, השימוש במשאבים של ה-Pod יכול לחרוג מהמשאבים של המערכת.
כדי לפתור את השגיאה, אפשר למחוק את עומסי העבודה הבעייתיים או להגדיר מגבלות על הזיכרון או על המעבד. מידע נוסף על הגדרת מגבלות זמין במאמר ניהול משאבים עבור פודים וקונטיינרים במאמרי העזרה של Kubernetes. מידע נוסף על אירועי OOM זמין במאמר בנושא פתרון בעיות שקשורות לאירועי OOM.
אם לא מופיעות הודעות שגיאה של OOM, מפעילים מחדש את הפריסה של kube-dns:
kubectl rollout restart deployment/kube-dns --namespace=kube-systemאחרי שמפעילים מחדש את הפריסה, בודקים אם הפודים של kube-dns פועלים.
אם השלבים האלה לא פותרים את הבעיה, או אם כל ה-Pods של kube-dns הם עם סטטוס Running, אבל עדיין יש בעיות ב-DNS, צריך לבדוק שהקובץ /etc/resolv.conf מוגדר בצורה נכונה.
צריך לוודא ש-/etc/resolv.conf מוגדר בצורה נכונה
בודקים את הקובץ /etc/resolv.conf של ה-Pods שבהם יש בעיות ב-DNS ומוודאים שהרשומות שמופיעות בו נכונות:
צפייה בקובץ
/etc/resolv.confשל ה-Pod:kubectl exec -it POD_NAME -- cat /etc/resolv.confמחליפים את POD_NAME בשם של ה-Pod שבו יש בעיות ב-DNS. אם יש כמה תרמילים שבהם יש בעיות, צריך לחזור על השלבים שבקטע הזה לכל תרמיל.
אם קובץ ה-binary של ה-Pod לא תומך בפקודה
kubectl exec, יכול להיות שהפקודה הזו תיכשל. אם זה קורה, צריך ליצור Pod פשוט לשימוש כסביבת בדיקה. התהליך הזה מאפשר להריץ Pod לבדיקה באותו מרחב שמות כמו ה-Pod הבעייתי.מוודאים שכתובת ה-IP של שרת השמות בקובץ
/etc/resolv.confנכונה:- לפודים שמשתמשים ברשת מארחת צריך להזין את הערכים בקובץ
/etc/resolv.confשל הצומת. כתובת ה-IP של שרת השמות צריכה להיות169.254.169.254. ב-Pods שלא משתמשים ברשת מארחת, כתובת ה-IP של שירות kube-dns צריכה להיות זהה לכתובת ה-IP של שרת השמות. כדי להשוות את כתובות ה-IP, מבצעים את השלבים הבאים:
מקבלים את כתובת ה-IP של שירות kube-dns:
kubectl get svc kube-dns -n kube-systemהפלט אמור להיראות כך:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-dns ClusterIP 192.0.2.10 <none> 53/UDP,53/TCP 64dחשוב לרשום את הערך בעמודה Cluster IP (כתובת ה-IP של האשכול). בדוגמה הזו, זהו
192.0.2.10.משווים את כתובת ה-IP של שירות kube-dns לכתובת ה-IP מקובץ
/etc/resolv.conf:# cat /etc/resolv.conf search default.svc.cluster.local svc.cluster.local cluster.local c.PROJECT_NAME google.internal nameserver 192.0.2.10 options ndots:5בדוגמה הזו, שני הערכים זהים, ולכן כתובת IP שגויה של שרת שמות היא לא הגורם לבעיה.
עם זאת, אם כתובות ה-IP לא תואמות, המשמעות היא ששדה
dnsConfigמוגדר במניפסט של ה-Pod של האפליקציה.אם הערך בשדה
dnsConfig.nameserversנכון, צריך לבדוק את שרת ה-DNS ולוודא שהוא פועל בצורה תקינה.אם לא רוצים להשתמש בשרת השמות המותאם אישית, מסירים את השדה ומבצעים הפעלה מחדש של ה-Pod:
kubectl rollout restart deployment POD_NAMEמחליפים את
POD_NAMEבשם ה-Pod.
- לפודים שמשתמשים ברשת מארחת צריך להזין את הערכים בקובץ
בודקים את הערכים של
searchושלndotsב-/etc/resolv.conf. צריך לוודא שאין שגיאות כתיב, שההגדרות לא פעילות ושהבקשה שנכשלה מפנה לשירות קיים במרחב השמות הנכון.
ביצוע חיפוש DNS
אחרי שמוודאים שההגדרה של /etc/resolv.conf נכונה ורשומת ה-DNS נכונה, משתמשים בכלי שורת הפקודה dig כדי לבצע חיפושי DNS מה-Pod שמדווח על שגיאות DNS:
אפשר לשלוח שאילתה ישירות ל-Pod על ידי פתיחת מעטפת בתוכו:
kubectl exec -it POD_NAME -n NAMESPACE_NAME -- SHELL_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
POD_NAME: השם של ה-Pod שמדווח על שגיאות DNS. -
NAMESPACE_NAME: מרחב השמות שאליו שייך ה-Pod. -
SHELL_NAME: השם של המעטפת שרוצים לפתוח. לדוגמה,shאו/bin/bash.
יכול להיות שהפקודה הזו תיכשל אם ה-Pod לא מאפשר את הפקודה
kubectl execאו אם אין ב-Pod את הקובץ הבינארי dig. במקרה כזה, צריך ליצור Pod לבדיקה עם תמונה שמותקן בה dig:kubectl run "test-$RANDOM" ti --restart=Never --image=thockin/dnsutils - bash-
בודקים אם ה-Pod יכול לפענח בצורה נכונה את שירות ה-DNS הפנימי של האשכול:
dig kubernetesמכיוון שהקובץ
/etc/resolv.confמצביע על כתובת ה-IP של שירות kube-dns, כשמריצים את הפקודה הזו שרת ה-DNS הוא שירות kube-dns.אמורה להתקבל תגובה מוצלחת של DNS עם כתובת ה-IP של שירות ה-API של Kubernetes (לרוב משהו כמו
10.96.0.1). אם מופיעה השגיאהSERVFAILאו שלא מתקבלת תגובה, בדרך כלל זה מצביע על כך ש-Pod של kube-dns לא מצליח לפתור את שמות השירות הפנימיים.בודקים אם שירות kube-dns יכול לפענח שם דומיין חיצוני:
dig example.comאם נתקלתם בבעיות בתגובה של Pod מסוים של kube-dns לשאילתות DNS, בדקו אם ה-Pod הזה יכול לתרגם שם של דומיין חיצוני:
dig example.com @KUBE_DNS_POD_IPמחליפים את
KUBE_DNS_POD_IPבכתובת ה-IP של kube-dns Pod. אם אתם לא יודעים מה הערך של כתובת ה-IP הזו, מריצים את הפקודה הבאה:kubectl get pods -n kube-system -l k8s-app=kube-dns -o wideכתובת ה-IP מופיעה בעמודה
IP.אם הפקודה מסתיימת בלי שגיאות, יופיעו
status: NOERRORופרטים של רשומת ה-A, כמו בדוגמה הבאה:; <<>> DiG 9.16.27 <<>> example.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31256 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;example.com. IN A ;; ANSWER SECTION: example.com. 30 IN A 93.184.215.14 ;; Query time: 6 msec ;; SERVER: 10.76.0.10#53(10.76.0.10) ;; WHEN: Tue Oct 15 16:45:26 UTC 2024 ;; MSG SIZE rcvd: 56יוצאים מהמעטפת:
exit
אם אחת מהפקודות האלה נכשלת, מבצעים הפעלה מחדש מדורגת של kube-dns Deployment:
kubectl rollout restart deployment/kube-dns --namespace=kube-system
אחרי שמסיימים את ההפעלה מחדש, מנסים שוב את פקודות ה-dig ובודקים אם הן מצליחות עכשיו. אם הן עדיין נכשלות, צריך להמשיך ולתעד את החבילות.
תיעוד חבילות
מבצעים לכידת מנות כדי לוודא שפודים של kube-dns מקבלים את שאילתות ה-DNS ומשיבים עליהן בצורה מתאימה:
באמצעות SSH, מתחברים לצומת שבו פועל ה-Pod של kube-dns. לדוגמה:
נכנסים לדף VM Instances במסוף Google Cloud .
מאתרים את הצומת שרוצים להתחבר אליו. אם אתם לא יודעים את השם של הצומת ב-Pod של kube-dns, מריצים את הפקודה הבאה:
kubectl get pods -n kube-system -l k8s-app=kube-dns -o wideשם הצומת מופיע בעמודה Node (צומת).
בעמודה Connect, לוחצים על SSH.
ב-Terminal, מפעילים את toolbox, כלי לניפוי באגים שמותקן מראש:
toolboxבהנחיית הבסיס, מתקינים את חבילת
tcpdump:apt update -y && apt install -y tcpdumpבאמצעות
tcpdump, מבצעים תיעוד חבילות של תעבורת ה-DNS:tcpdump -i eth0 port 53" -w FILE_LOCATIONמחליפים את
FILE_LOCATIONבנתיב למיקום שבו רוצים לשמור את הצילום.בודקים את לכידת החבילות. בודקים אם יש חבילות עם כתובות IP של יעד שתואמות לכתובת ה-IP של שירות kube-dns. כך אפשר לוודא שבקשות ה-DNS מגיעות ליעד הנכון לצורך רזולוציה. אם לא רואים שתנועת ה-DNS מגיעה ל-Pods הנכונים, יכול להיות שיש מדיניות רשת שחוסמת את הבקשות.
בדיקה אם יש מדיניות רשת
מדיניות רשת מגבילה עלולה לשבש לפעמים את תנועת ה-DNS. כדי לבדוק אם קיימת מדיניות רשת במרחב השמות kube-system, מריצים את הפקודה הבאה:
kubectl get networkpolicy -n kube-system
אם אתם מוצאים מדיניות רשת, כדאי לבדוק אותה ולוודא שהיא מאפשרת תקשורת DNS נדרשת. לדוגמה, אם יש לכם מדיניות רשת שחוסמת את כל תעבורת הנתונים היוצאת, המדיניות הזו תחסום גם בקשות DNS.
אם הפלט הוא No resources found in kube-system namespace, סימן שלא מוגדרת מדיניות רשת ואפשר לשלול את האפשרות הזו כגורם לבעיה. בדיקת היומנים יכולה לעזור לכם למצוא נקודות כשל נוספות.
הפעלת רישום זמני ביומן של שאילתות DNS
כדי לעזור לכם לזהות בעיות כמו תשובות שגויות של DNS, אתם יכולים להפעיל באופן זמני רישום ביומן של שאילתות DNS לצורך ניפוי באגים. כדי להפעיל שאילתות, יוצרים קבוצת Pod על סמך קבוצת Pod קיימת של kube-dns. כל שינוי בפריסת kube-dns יבוטל אוטומטית.
הפעלת רישום זמני של שאילתות DNS היא תהליך שדורש הרבה משאבים, ולכן מומלץ למחוק את ה-Pod שיוצרים ברגע שאוספים דוגמה מתאימה של יומנים.
כדי להפעיל רישום זמני ביומן של שאילתות DNS, צריך לבצע את השלבים הבאים:
מאחזרים Pod של kube-dns ומאחסנים אותו במשתנה בשם
POD:POD=$(kubectl -n kube-system get pods --selector=k8s-app=kube-dns -o jsonpath="{.items[0].metadata.name}")יוצרים Pod בשם
kube-dns-debug. ה-Pod הזה הוא עותק של ה-Pod שמאוחסן במשתנהPOD, אבל עם הפעלת רישום ביומן של dnsmasq. הפקודה הזו לא משנה את ה-Pod המקורי של kube-dns:kubectl apply -f <(kubectl get pod -n kube-system ${POD} -o json | jq -e ' ( (.spec.containers[] | select(.name == "dnsmasq") | .args) += ["--log-queries"] ) | (.metadata.name = "kube-dns-debug") | (del(.metadata.labels."pod-template-hash")) ')בודקים את היומנים:
kubectl logs -f --tail 100 -c dnsmasq -n kube-system kube-dns-debugאפשר לראות את השאילתות גם ב-Cloud Logging.
אחרי שמסיימים לצפות ביומני שאילתות DNS, מוחקים את
kube-dns-debugה-Pod:kubectl -n kube-system delete pod kube-dns-debug
בדיקת ה-Pod של kube-dns
אפשר לבדוק איך פודי kube-dns מקבלים ופותרים שאילתות DNS באמצעות Cloud Logging.
כדי לראות את רשומות היומן שקשורות ל-Pod של kube-dns, פועלים לפי השלבים הבאים:
נכנסים לדף Logs Explorer במסוף Google Cloud .
בחלונית השאילתה, מזינים את המסנן הבא כדי לראות אירועים שקשורים למאגר kube-dns:
resource.type="k8s_container" resource.labels.namespace_name="kube-system" resource.labels.pod_name:"kube-dns" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.location="CLUSTER_LOCATION"מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול שאליו שייך ה-Pod של kube-dns. -
CLUSTER_LOCATION: המיקום של האשכול.
-
לוחצים על Run query.
בדקו את התוצאה. בדוגמה הבאה מוצג פלט עם שגיאה אפשרית:
{ "timestamp": "2024-10-10T15:32:16.789Z", "severity": "ERROR", "resource": { "type": "k8s_container", "labels": { "namespace_name": "kube-system", "pod_name": "kube-dns", "cluster_name": "CLUSTER_NAME", "location": "CLUSTER_LOCATION" } }, "message": "Failed to resolve 'example.com': Timeout." },בדוגמה הזו, kube-dns לא הצליח לפענח את
example.comבפרק זמן סביר. יכולות להיות כמה סיבות לשגיאה מהסוג הזה. לדוגמה, יכול להיות שהשרת במעלה הזרם מוגדר בצורה שגויה ב-ConfigMap של kube-dns, או שיש תנועת רשת גבוהה.
אם לא הפעלתם את Cloud Logging, תוכלו לצפות ביומני Kubernetes:
Pod=$(kubectl get Pods -n kube-system -l k8s-app=kube-dns -o name | head -n1)
kubectl logs -n kube-system $Pod -c dnsmasq
kubectl logs -n kube-system $Pod -c kubedns
kubectl logs -n kube-system $Pod -c sidecar
בדיקת שינויים מהתקופה האחרונה ב-ConfigMap של kube-dns
אם נתקלתם לפתע בכשלים בפענוח ה-DNS באשכול, יכול להיות שהסיבה לכך היא שינוי שגוי בהגדרה שבוצע ב-ConfigMap של kube-dns. בפרט, שינויים בהגדרות של דומייני ה-stub וההגדרות של השרתים במעלה הזרם עלולים לגרום לבעיות.
כדי לבדוק אם יש עדכונים בהגדרות של דומיין stub, מבצעים את השלבים הבאים:
נכנסים לדף Logs Explorer במסוף Google Cloud .
בחלונית השאילתה, מזינים את השאילתה הבאה:
resource.labels.cluster_name="clouddns" resource.type="k8s_container" resource.labels.namespace_name="kube-system" labels.k8s-pod/k8s-app="kube-dns" jsonPayload.message=~"Updated stubDomains to"לוחצים על Run query.
בדקו את התוצאה. אם בוצעו עדכונים, הפלט ייראה כך:
Updated stubDomains to map[example.com: [8.8.8.8 8.8.4.4 1.1.3.3 1.0.8.111]]אם מופיע עדכון, מרחיבים את התוצאה כדי לקרוא מידע נוסף על השינויים. מוודאים שכל דומיין stub ושרת ה-DNS המתאים שלו במעלה הזרם מוגדרים בצורה נכונה. רשומות שגויות כאן עלולות לגרום לכשלים בפתרון בעיות בדומיינים האלה.
כדי לבדוק אם בוצעו שינויים בשרת במעלה הזרם:
נכנסים לדף Logs Explorer במסוף Google Cloud .
בחלונית השאילתה, מזינים את השאילתה הבאה:
resource.labels.cluster_name="clouddns" resource.type="k8s_container" resource.labels.namespace_name="kube-system" labels.k8s-pod/k8s-app="kube-dns" jsonPayload.message=~"Updated upstreamNameservers to"לוחצים על Run query.
בדקו את התוצאה. אם בוצעו שינויים, הפלט ייראה כך:
Updated upstreamNameservers to [8.8.8.8]מרחיבים את התוצאה כדי לקרוא מידע נוסף על השינויים. מוודאים שהרשימה של שרתי ה-DNS שלמעלה מדויקת ושהשרתים האלה נגישים מהאשכול. אם השרתים האלה לא זמינים או שההגדרה שלהם שגויה, יכול להיות שפענוח ה-DNS הכללי ייכשל.
אם בדקתם שינויים בדומיינים של ה-stub ובשרתים במעלה הזרם, אבל לא מצאתם תוצאות, צריך לבדוק את כל השינויים באמצעות המסנן הבא:
resource.type="k8s_cluster"
protoPayload.resourceName:"namespaces/kube-system/configmaps/kube-dns"
protoPayload.methodName=~"io.k8s.core.v1.configmaps."
בודקים את השינויים שמופיעים ברשימה כדי לראות אם הם גרמו לשגיאה.
פנייה ל-Cloud Customer Care
אם ניסיתם את הפתרונות שמופיעים בקטעים הקודמים, אבל עדיין לא הצלחתם לאבחן את הגורם לבעיה, פנו ל-Cloud Customer Care.
פתרון בעיות נפוצות
אם נתקלתם בשגיאה או בבעיה ספציפית, תוכלו להיעזר בעצות שבקטעים הבאים.
בעיה: תם הזמן הקצוב לתפוגה של DNS לסירוגין
אם אתם מבחינים בפסק זמן לפתרון DNS שמתרחש לסירוגין כשיש עלייה בתנועת ה-DNS או כשהשעות העסקיות מתחילות, נסו את הפתרונות הבאים כדי לשפר את ביצועי ה-DNS:
בודקים את מספר ה-Pods של kube-dns שפועלים באשכול ומשווים אותו למספר הכולל של צמתי GKE. אם אין מספיק משאבים, כדאי להגדיל את הקיבולת של פודים מסוג kube-dns.
כדי לשפר את הזמן הממוצע של חיפוש DNS, מפעילים את NodeLocal DNS Cache.
פענוח DNS לשמות חיצוניים עלול ליצור עומס יתר על ה-Pod של kube-dns. כדי להקטין את מספר השאילתות, משנים את ההגדרה
ndotsבקובץ/etc/resolv.conf. ndotsמייצג את מספר הנקודות שצריכות להופיע בשם דומיין כדי לפתור שאילתה לפני השאילתה האבסולוטית הראשונית.הדוגמה הבאה היא קובץ
/etc/resolv.confשל Pod של אפליקציה:search default.svc.cluster.local svc.cluster.local cluster.local c.PROJECT_ID.internal google.internal nameserver 10.52.16.10 options ndots:5בדוגמה הזו, kube-dns מחפש חמש נקודות בדומיין שנשלחה לגביו שאילתה. אם ה-Pod מבצע קריאה לפתרון DNS עבור
example.com, היומנים ייראו כמו בדוגמה הבאה:"A IN example.com.default.svc.cluster.local." NXDOMAIN "A IN example.com.svc.cluster.local." NXDOMAIN "A IN example.com.cluster.local." NXDOMAIN "A IN example.com.google.internal." NXDOMAIN "A IN example.com.c.PROJECT_ID.internal." NXDOMAIN "A IN example.com." NOERRORכדי לפתור את הבעיה, אפשר לשנות את הערך של ndots ל-
1כדי לחפש רק נקודה אחת, או להוסיף נקודה (.) בסוף הדומיין שאתם שולחים לגביו שאילתה או משתמשים בו. לדוגמה:dig example.com.
בעיה: שאילתות DNS נכשלות לסירוגין מחלק מהצמתים
אם אתם מבחינים בשאילתות DNS שנכשלות לסירוגין מכמה צמתים, יכול להיות שתראו את התסמינים הבאים:
- כשמריצים פקודות dig לכתובת ה-IP של שירות kube-dns או לכתובת ה-IP של ה-Pod, שאילתות ה-DNS נכשלות לסירוגין עם פסק זמן.
- הפעלת פקודות dig מ-Pod באותו צומת כמו ה-Pod של kube-dns נכשלת.
כדי לפתור את הבעיה, מבצעים את השלבים הבאים:
- מבצעים בדיקת קישוריות. מגדירים את ה-Pod או הצומת הבעייתיים כמקור, ואת כתובת ה-IP של ה-Pod של kube-dns כיעד. כך תוכלו לבדוק אם הוגדרו כללי חומת האש הנדרשים כדי לאפשר את התנועה הזו.
אם הבדיקה לא מצליחה והתנועה נחסמת על ידי כלל חומת אש, אפשר להשתמש ב-Cloud Logging כדי לראות את כל השינויים הידניים שבוצעו בכללי חומת האש. מחפשים שינויים שחוסמים סוג מסוים של תנועה:
נכנסים לדף Logs Explorer במסוף Google Cloud .
בחלונית השאילתה, מזינים את השאילתה הבאה:
logName="projects/project-name/logs/cloudaudit.googleapis.com/activity" resource.type="gce_firewall_rule"לוחצים על Run query. משתמשים בפלט של השאילתה כדי לקבוע אם בוצעו שינויים. אם נתקלתם בשגיאות, תקנו אותן והפעילו מחדש את כלל חומת האש.
חשוב לוודא שלא מבצעים שינויים בכללי חומת אש אוטומטיים.
אם לא בוצעו שינויים בכללי חומת האש, צריך לבדוק את הגרסה של מאגר הצמתים ולוודא שהיא תואמת למישור הבקרה ולמאגרי צמתים אחרים שפועלים. אם אחד ממאגרי הצמתים של האשכול ישן יותר מגרסה משנית אחת של מישור הבקרה, יכול להיות שזו הסיבה לבעיות. מידע נוסף על חוסר התאימות הזה זמין במאמר בנושא גרסת Node לא תואמת לגרסת מישור הבקרה.
כדי לבדוק אם הבקשות נשלחות לכתובת ה-IP הנכונה של שירות kube-dns, צריך ללכוד את תעבורת הרשת בצומת הבעייתי ולסנן לפי יציאה 53 (תעבורת DNS). כדי לבדוק אם הבקשות מגיעות ל-Pods המיועדים ואם הן נפתרות בהצלחה, צריך ללכוד את התנועה ב-Pods של kube-dns עצמם.
המאמרים הבאים
מידע כללי על אבחון בעיות DNS ב-Kubernetes זמין במאמר בנושא ניפוי באגים של רזולוציית DNS.
אם לא מצאתם פתרון לבעיה שלכם במסמכים, תוכלו לקבל עזרה נוספת במאמר בנושא קבלת תמיכה, כולל עצות בנושאים הבאים:
- פתיחת בקשת תמיכה באמצעות פנייה אל Cloud Customer Care.
- קבלת תמיכה מהקהילה על ידי פרסום שאלות ב-StackOverflow ושימוש בתג
google-kubernetes-engineכדי לחפש בעיות דומות. אפשר גם להצטרף לערוץ Slack#kubernetes-engineכדי לקבל תמיכה נוספת מהקהילה. - פתיחת דיווחים על בעיות או בקשות להוספת תכונות באמצעות הכלי הציבורי למעקב אחר בעיות.