אם אתם משתמשים ב-kube-dns לזיהוי שירותים, יכול להיות שתקבלו הודעות שגיאה בחיבור כמו dial tcp: i/o timeout או no such host. שגיאות כאלה מעידות בדרך כלל על בעיות ב-Pods של kube-dns במרחב השמות kube-system, כמו הגדרות שגויות, מגבלות משאבים או בעיות בקישוריות לרשת שמשפיעות על ה-Pods האלה.
בדף הזה מוסבר איך לאבחן ולפתור בעיות נפוצות שקשורות לפריסת kube-dns, כדי לוודא שפענוח ה-DNS של עומסי העבודה שלכם יהיה אמין.
המידע הזה חשוב למנהלים ולמפעילי פלטפורמות שאחראים לתחזוקת רכיבי ליבה של אשכולות כמו kube-dns, ולמפתחי אפליקציות שהאפליקציות שלהם תלויות במידע הזה כדי להתחבר לשירותים אחרים באשכול. מידע נוסף על התפקידים הנפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בתוכן של Google Cloud , זמין במאמר תפקידי משתמשים נפוצים ומשימות ב-GKE.
זיהוי המקור של בעיות DNS ב-kube-dns
בקטעים הבאים מוסבר איך לאבחן למה ל-kube-dns קשה לפתור שאילתות.
בדיקה אם Pods של kube-dns פועלים
Pods של Kube-dns הם קריטיים לתרגום שם בתוך האשכול. אם הם לא פועלים, סביר להניח שתיתקלו בבעיות בפענוח ה-DNS.
כדי לוודא שפודים של kube-dns פועלים בלי הפעלות מחדש מהזמן האחרון, צריך להציג את הסטטוס של הפודים האלה:
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:
Warning: OOMKilling Memory cgroup out of memoryההודעה הזו מציינת שתהליך הסתיים על ידי Kubernetes בגלל צריכת משאבים מוגזמת. מערכת Kubernetes מתזמנת את ה-Pods על סמך בקשות למשאבים, אבל מאפשרת ל-Pods לצרוך משאבים עד למגבלות המשאבים שלהם. אם המגבלות גבוהות מהבקשות או שאין מגבלות, השימוש במשאבים של ה-Pod יכול לחרוג מהמשאבים של המערכת.
כדי לפתור את השגיאה, אפשר למחוק את עומסי העבודה הבעייתיים או להגדיר מגבלות זיכרון או מעבד. למידע נוסף על הגדרת מגבלות, קראו את המאמר ניהול משאבים לפודים ולמאגרים במסמכי התיעוד של Kubernetes. מידע נוסף על אירועי OOM זמין במאמר בנושא פתרון בעיות שקשורות לאירועי OOM.
אם לא מופיעות הודעות שגיאה של OOM, מפעילים מחדש את kube-dns Deployment:
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. אם יש כמה Pods שבהם נתקלתם בבעיות, חזרו על השלבים שבקטע הזה לכל Pod.
אם הקובץ הבינארי של 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 הנכונים, יכול להיות שיש מדיניות רשת ב-Kubernetes שחוסמת את הבקשות.
בדיקה אם יש מדיניות רשת ב-Kubernetes
מדיניות רשת מגבילה עלולה לשבש לפעמים את תנועת ה-DNS. כדי לבדוק אם קיימת מדיניות רשת במרחב השמות kube-system, מריצים את הפקודה הבאה:
kubectl get networkpolicy -n kube-system
אם מצאתם מדיניות רשת, בדקו אותה וודאו שהיא מאפשרת את תקשורת ה-DNS הנדרשת. לדוגמה, אם יש לכם מדיניות רשת ב-Kubernetes שחוסמת את כל תעבורת הנתונים היוצאת (egress), המדיניות הזו תחסום גם בקשות DNS.
אם הפלט הוא No resources found in kube-system namespace, אין לכם מדיניות רשת ב-Kubernetes ואתם יכולים לשלול את האפשרות שזו הסיבה לבעיה. בדיקת היומנים יכולה לעזור לכם למצוא נקודות כשל נוספות.
הפעלת רישום זמני ביומן של שאילתות 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:
בודקים את מספר הפודים של kube-dns שפועלים באשכול ומשווים אותו למספר הכולל של צומתי GKE. אם אין מספיק משאבים, כדאי להרחיב אנכית (scale up) את הפודים של 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. משתמשים בפלט של השאילתה כדי לקבוע אם בוצעו שינויים. אם מופיעות שגיאות, מתקנים אותן ומחילים מחדש את כלל חומת האש.
חשוב לוודא שלא מבצעים שינויים בכללי חומת אש אוטומטיים.
אם לא בוצעו שינויים בכללי חומת האש, צריך לבדוק את הגרסה של מאגר הצמתים ולוודא שהיא תואמת למישור הבקרה ולמאגרי צמתים אחרים שפועלים. אם אחד ממאגרי הצמתים של האשכול ישן ביותר משתי גרסאות משניות ממישור הבקרה, יכול להיות שזו הסיבה לבעיות. מידע נוסף על חוסר התאימות הזה זמין במאמר בנושא גרסת הצומת לא תואמת לגרסת מישור הבקרה.
כדי לבדוק אם הבקשות נשלחות לכתובת ה-IP הנכונה של שירות kube-dns, צריך ללכוד את תעבורת הרשת בצומת הבעייתי ולסנן לפי יציאה 53 (תעבורת DNS). כדי לבדוק אם הבקשות מגיעות ל-Pods המיועדים ואם הן נפתרות בהצלחה, כדאי ללכוד את התנועה ב-Pods של kube-dns עצמם.
המאמרים הבאים
מידע כללי על אבחון בעיות DNS ב-Kubernetes זמין במאמר בנושא ניפוי באגים ברזולוציית DNS.
אם לא מצאתם פתרון לבעיה שלכם במסמכים, תוכלו להיעזר בקבלת תמיכה, כולל עצות בנושאים הבאים:
- פתיחת בקשת תמיכה באמצעות פנייה אל Cloud Customer Care.
- קבלת תמיכה מהקהילה על ידי פרסום שאלות ב-StackOverflow ושימוש בתג
google-kubernetes-engineכדי לחפש בעיות דומות. אתם יכולים גם להצטרף לערוץ Slack של#kubernetes-engineכדי לקבל תמיכה מהקהילה. - דיווח על בעיות או שליחת בקשות להוספת תכונות באמצעות הכלי הציבורי Issue Tracker.