פתרון בעיות

הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.

לעיון במסמכי התיעוד של Apigee Edge

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

ניפוי שגיאות של שגיאה 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}')

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

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

השער (או קובץ sidecar של חזית האתר)

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

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
  • חשוב לוודא שהמאזין מוגדר ליירוט.
  • בודקים את ההגדרות של ext-authz.

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

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

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

חסר JWT או שהוא לא תקין, והוא לא נדחה

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

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

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

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

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

בדיקת מוצר ה-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 שלכם.

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

  • מפעילים את השירות מרחוק עם רישום ביומן ב-debug level

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

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

    בודקים ביומנים אם יש שורה שנראית בערך כך:

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