פתרון בעיות

מוצג המסמך של Apigee Edge.
עוברים אל מסמכי תיעוד של Apigee X.
מידע

שגיאת Istio 404 (לא נמצא)

ניפוי באגים מסוג 404 (לא נמצא) ב-Istio יכול להיות מתסכל. אני מקווה שהמידע הזה ייתן לכם מקום להתחיל לעקוב אחריו.

התנגשות בשער עם תווים כלליים לחיפוש

יכולה להיות רק הגדרת שער אחת שמשתמשת בתו כללי לחיפוש "*" המארחים. אם כל דבר אחר שכולל שער כללי לחיפוש, קריאות לקוח ייכשלו בסטטוס 404.

דוגמה:

$ istioctl get gateways
GATEWAY NAME         HOSTS     NAMESPACE   AGE
bookinfo-gateway     *         default     20s
httpbin-gateway      *         default     3s

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

מעקב אחר מקומות שבהם המסלול נכשל

Istio הוא כמו בצל (או אולי מפלצת), ויש בו שכבות. דרך שיטתית לניפוי באגים שגיאה מסוג 404 היא לפעול החוצה מהיעד.

עומס העבודה בקצה העורפי

מוודאים שיש גישה לעומס העבודה מה-Sidecar:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl localhost:80/headers

סמל הקצה העורפי

מגדירים את הכתובת למקרי חירום ומקבלים את כתובת ה-IP של רצף עומסי העבודה.

SERVICE=httpbin.default.svc.cluster.local:80
  POD_IP=$(kubectl get pod $WORKLOAD_POD -o jsonpath='{.status.podIP}')

גישה לעומס העבודה דרך הרכב:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl -v http://$SERVICE/headers --resolve "$SERVICE:$POD_IP"

לחלופין, אם Istio mTLS מופעל:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl -v https://$SERVICE/headers --resolve "$SERVICE:$POD_IP" --key /etc/certs/key.pem --cert /etc/certs/cert-chain.pem --cacert /etc/certs/root-cert.pem --insecure

השער (או מכונית צדדית)

גישה לשירות מהשער:

kubectl -n istio-system exec $GATEWAY_POD -- curl -v http://$SERVICE/header

לחלופין, אם Istio mTLS מופעל:

kubectl -n istio-system exec $GATEWAY_POD -- curl -v https://$SERVICE/headers --key /etc/certs/key.pem --cert /etc/certs/cert-chain.pem --cacert /etc/certs/root-cert.pem --insecure

חסרים ניתוח נתונים

אם לא מוצגים ניתוח נתונים בממשק המשתמש של Analytics, כדאי לבדוק את הסיבות האפשריות הבאות:

  • קליטת הנתונים ב-Apigee עשויה להתעכב מספר דקות
  • יומן הגישה של Envoy gRPC לא הוגדר בצורה נכונה
  • ל-Envoy אין אפשרות להתחבר לשירות Remote.
  • ההעלאה של השירות המרוחק נכשלה

מפתח API חסר או שגוי שאינו נדחה

אם האימות של מפתח API לא פועל בצורה תקינה, יכולות להיות לכך כמה סיבות:

שרת proxy ישיר

בדיקת ההגדרות האישיות של ext-authz.

Sidecar
  • צריך לוודא שה-listener מוגדר ליירוט.
  • בדיקת ההגדרות האישיות של ext-authz.

בקשות לא חוקיות נבדקות ומאושרות

  • שירות מרוחק הוגדר לכישלון בפתיחה
  • Envoy לא מוגדר לבדיקות RBAC

כדי להבין איך לטפל בבעיות האלה, תוכלו להיעזר במסמכי התיעוד הבאים של Envoy. נושא: External Authorization, ולמידע על הנכס failure_mode_allow. הנכס הזה אפשר לשנות את אופן הפעולה של המסנן ביחס לשגיאות.

JWT חסר או פגום לא נדחה

הסיבה הסבירה היא שמסנן ה-Envoy JWT לא מוגדר.

מפתח API תקין נכשל

סיבות סבירות

  • ל-Envoy אין אפשרות ליצור קשר עם השירות המרוחק
  • פרטי הכניסה שלך לא תקינים
  • מוצר Apigee API לא מוגדר לטירגוט ול-env

שלבים לפתרון בעיות

בדיקת מוצר ה-API ב-Apigee

  • האם הוא מופעל בסביבה שלכם (בדיקה לעומת מוצר)?

    המוצר חייב להיות קשור לאותה סביבה כמו השירות המרוחק.

  • האם הוא קשור ליעד שאליו אתם ניגשים?

    בודקים את הקטע Apigee Remote Service targets (יעדי שירות מרוחקים של Apigee). חשוב לזכור, שם השירות חייב להיות שם מארח שמוגדר במלואו. אם מדובר בשירות Istio, השם יהיה משהו כזה helloworld.default.svc.cluster.localcode> - שמייצג את השירות של helloworld במרחב השמות default.

  • האם נתיב המשאב תואם לבקשה שלכם?

    חשוב לזכור שנתיב כמו / או /** יתאים לכל נתיב. אפשר גם להשתמש ב-'*' או '**' תווים כלליים לחיפוש להתאמה.

  • יש לך אפליקציה למפתחים?

    כדי לבדוק את המפתחות, מוצר ה-API צריך להיות מקושר לאפליקציה למפתחים.

בדיקת הבקשה

  • האם בחרת להעביר את מפתח הצרכן בx-api-key header

    דוגמה:

    curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
  • האם השתמשת במפתח צרכן תקין?

    צריך לוודא שפרטי הכניסה מהאפליקציה שבה אתם משתמשים אושרו עבור מוצר ה-API שלכם.

בדיקת היומנים של השירות המרוחק

  • מפעילים את השירות Remote באמצעות רישום ביומן בכתובת debug level

    שימוש באפשרות -l debug בשורת הפקודה.

  • מנסים לגשת ליעד ולבדוק את היומנים

    מחפשים ביומנים שורה שנראית בערך כך:

    Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: []
    Selected: [helloworld]
    Eliminated: [helloworld2 doesn't match path: /hello]