פתרון בעיות

כרגע מוצג התיעוד של 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

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

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

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

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

חשוב לוודא שאפשר לגשת לעומס העבודה מהתוסף:

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

הקצה העורפי

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

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 אין גישה לשירות המרוחק
  • ההעלאה של השירות המרוחק נכשלה

מפתח API חסר או פגום לא נדחה

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

שרת proxy ישיר

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

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

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

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

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

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

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

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

סיבות אפשריות

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

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

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

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

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

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

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

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

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

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

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

בדיקת הבקשה

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

    דוגמה:

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

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

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

  1. הפעל את השירות המרוחק באמצעות רישום בdebug level. למידע נוסף, אפשר לקרוא את הגדרת רמות של יומן שירות מרוחק.

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

    apigee-remote-service-envoy -l debug
  2. ניסיון לגשת ליעד ולבדוק את היומנים

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

    Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: []
    Selected: [helloworld]
    Eliminated: [helloworld2 doesn't match path: /hello]
    
  3. הגדרת רמות של יומן שירות מרוחק

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

    • debug – מצב הרישום המפורט ביותר ביומן.
    • info – ברירת המחדל.
    • warn
    • error – מצב הרישום המפורט ביותר ביומן.

    לדוגמה, כדי להתחיל את השירות ברמת debug:

    apigee-remote-service-envoy -l debug