מוצג המסמך של 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
.
- צריך לוודא שה-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.local
code> - שמייצג את השירות שלhelloworld
במרחב השמותdefault
. - האם נתיב המשאב תואם לבקשה שלכם?
חשוב לזכור שנתיב כמו
/
או/**
יתאים לכל נתיב. אפשר גם להשתמש ב-'*' או '**' תווים כלליים לחיפוש להתאמה. - יש לך אפליקציה למפתחים?
כדי לבדוק את המפתחות, מוצר ה-API צריך להיות מקושר לאפליקציה למפתחים.
בדיקת הבקשה
- האם בחרת להעביר את מפתח הצרכן ב
x-api-key header
דוגמה:
curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
- האם השתמשת במפתח צרכן תקין?
צריך לוודא שפרטי הכניסה מהאפליקציה שבה אתם משתמשים אושרו עבור מוצר ה-API שלכם.
בדיקת היומנים של השירות המרוחק
- מפעילים את השירות Remote באמצעות רישום ביומן בכתובת
debug level
. למידע על הגדרת רמות ביומן השירות מרחוק.שימוש באפשרות
-l debug
בשורת הפקודה. לדוגמה:apigee-remote-service-envoy -l debug
- מנסים לגשת ליעד ולבדוק את היומנים
מחפשים ביומנים שורה שנראית בערך כך:
Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: [] Selected: [helloworld] Eliminated: [helloworld2 doesn't match path: /hello]
debug
– מצב הרישום ביומן המפורט ביותר.info
– ברירת המחדל.warn
error
– מצב רישום מפורט ביומן לפחות.
הגדרת רמות ביומן השירות מרחוק
באמצעות דגל שורת הפקודה, ניתן להפעיל את השירות המרוחק באחד מניפוי הבאגים הבאים
מצבים, לפי דרגת המלל, שבהם debug
הוא הגבוה ביותר ו-error
הוא הנמוך ביותר:
לדוגמה, כדי להפעיל את השירות ברמת debug
:
apigee-remote-service-envoy -l debug