הדף הזה רלוונטי ל-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"
או אם מופעל mTLS של Istio:
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
או אם מופעל mTLS של Istio:
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.
- חשוב לוודא שהמאזין מוגדר ליירוט.
- בודקים את ההגדרות של
ext-authz.
בקשות לא חוקיות נבדקות ומאושרות
- שירות מרוחק שהוגדר לפתיחה במקרה של כשל
- Envoy לא מוגדר לבדיקות RBAC
כדי לקבל מידע על פתרון הבעיות האלה, אפשר לעיין בנושא External Authorization במסמכי התיעוד של Envoy, ולקרוא על המאפיין failure_mode_allow. המאפיין הזה מאפשר לשנות את אופן הפעולה של המסנן במקרה של שגיאות.
חסר JWT או שהוא לא תקין, והוא לא נדחה
הסיבה הסבירה היא שהפילטר Envoy JWT לא מוגדר.
מפתח API תקין נכשל
סיבות אפשריות
- Envoy לא יכול לגשת לשירות המרוחק
- פרטי הכניסה לא תקינים
- מוצר API של Apigee לא מוגדר לטירגוט ולסביבה
שלבים לפתרון בעיות
בדיקת מוצר ה-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 שלכם.
בדיקת היומנים של השירות מרחוק
- הפעלת השירות מרחוק עם רישום ביומן ב-
debug levelמשתמשים באפשרות
-l debugבשורת הפקודה. - ניסיון לגשת ליעד ובדיקת היומנים
בודקים ביומנים אם יש שורה שנראית בערך כך:
Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: [] Selected: [helloworld] Eliminated: [helloworld2 doesn't match path: /hello]