כרגע מוצג התיעוד של 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
.
- צריך לוודא שה-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.local
code>, שמייצג את השירותhelloworld
במרחב השמותdefault
. - האם נתיב המשאב תואם לבקשה שלך?
חשוב לזכור: נתיב כמו
/
או/**
יתאים לכל נתיב. אפשר גם להשתמש בתווים כלליים לחיפוש מסוג '*' או '**' לצורך התאמה. - יש לך אפליקציה למפתחים?
מוצר ה-API צריך להיות מקושר לאפליקציה למפתחים כדי לבדוק את המפתחות שלה.
בדיקת הבקשה
- האם אתה מעביר את מפתח הצרכן ב
x-api-key header
דוגמה:
curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
- האם השתמשת במפתח צרכן תקין?
יש לוודא שפרטי הכניסה מהאפליקציה שבה השתמשת אושרו למוצר ה-API שלך.
בדיקת היומנים של השירות המרוחק
- הפעל את השירות המרוחק באמצעות רישום ב
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