הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של
Apigee Edge
בדף הזה מוסבר איך לפתור בעיות ב-Apigee Operator for Kubernetes. יש כמה כלים שיכולים לעזור לכם לפתור בעיות שאתם נתקלים בהן. בדף הזה מוסבר איך לבדוק את הסטטוס של המשאבים המותאמים אישית, להשתמש בכלי Logs Explorer ולפתור בעיות בתנועה של זמן הריצה של Apigee.
בדיקת הסטטוס של משאב בהתאמה אישית
כל משאב בהתאמה אישית שמשמש ב-Apigee Operator ל-Kubernetes מכיל אובייקט סטטוס עם שני שדות:
- STATE: תיאור של מצב המשאב. הערכים כוללים
runningו-created. - ERRORMESSAGE: אם פעולת המשאב נכשלת, השדה של הודעת השגיאה מאוכלס בהודעה שמסבירה את השגיאה.
כשמחילים קובץ של משאב בהתאמה אישית yaml על האשכול, Kubernetes מבצע את השינויים המתאימים בתשתית הבסיסית. בדיקה של אובייקט הסטטוס של המשאב המותאם אישית יכולה לספק מידע על מצב המשאב ולחשוף שגיאות שנובעות מכשל בפעולות התשתית הבסיסית.
אפשר לבדוק את הסטטוס של המשאב המותאם אישית באמצעות הפקודה הבאה:
kubectl -n NAMESPACE get CUSTOM_RESOURCE_KIND CUSTOM_RESOURCE_NAME
כאשר:
-
NAMESPACE: מרחב השמות שבו נפרס המשאב המותאם אישית. -
CUSTOM_RESOURCE_KIND: סוג המשאב המותאם אישית. -
CUSTOM_RESOURCE_NAME: השם של המשאב המותאם אישית.
לדוגמה, הפקודה הבאה בודקת את הסטטוס של המשאב המותאם אישית APIMExtensionPolicy בשם apim-extension-policy במרחב השמות apim:
kubectl -n apim get APIMExtensionPolicy apim-extension-policy-1
הפלט אמור להיראות כך:
NAME STATE ERRORMESSAGE apim-extension-policy Create_Update_Failed Permission denied
צפייה ביומנים
בקטע הזה מוסבר איך להשתמש ביומנים כדי לפתור בעיות במשאב Google Kubernetes Engine (GKE) Gateway ובמשאב Apigee Operator for Kubernetes.
יומנים של GKE Gateway
כשמחילים את APIMExtensionPolicy, או את ApigeeBackendService ו-GCPTrafficExtension, שער GKE שיצרתם באשכול מוגדר עם תוסף תנועה.
התוסף משתמש בעיבוד חיצוני של Kubernetes (ext-proc) כדי לקרוא לזמן הריצה של Apigee ולעבד מדיניות.
היומנים שקשורים לתנועה של ext-proc יכולים להיות שימושיים לפתרון בעיות.
צפייה ביומנים של היתרונות המרכזיים של ext-proc
כדי לראות את היומנים של תנועת הגולשים בext-proc:
- מקבלים את המזהה של שירות הקצה העורפי שנוצר עבור זמן הריצה של Apigee:
kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.metadata.annotations.networking\.gke\.io/backend-services}"
כאשר
GATEWAY_NAMEהוא השם של שער GKE.שירות הקצה העורפי יכיל את
apigee-service-extension-backend-serviceבמזהה. - כדי להפעיל את הרישום ביומן, פועלים לפי השלבים שבקטע הפעלת רישום ביומן בשירות לקצה העורפי.
- כדי לראות את היומנים במסוף Google Cloud , נכנסים לדף Logs Explorer:
- במאמר
הודעות יומן עבור שירות לקצה העורפי מפורט המידע שזמין ברשומת היומן של callout, כולל מבנה המטען הייעודי (payload) של JSON עבור רשומת היומן של מאזן העומסים
service_extension_info. אפשר להשתמש בשדה Search ב-Logs Explorer כדי לסנן את המידע הרלוונטי.בדוגמה הבאה מוצגת רשומה ביומן שאפשר לראות כשמתבצעת קריאה ל-
ext-procשנכשלה:{ "insertId": "s14dmrf10g6hi", "jsonPayload": { "serviceExtensionInfo": [ { "extension": "ext11", "perProcessingRequestInfo": [ { "eventType": "REQUEST_HEADERS", "latency": "0.001130s" } ], "backendTargetType": "BACKEND_SERVICE", "grpcStatus": "ABORTED", "backendTargetName": "gkegw1-2y13-apigee-service-extension-backend-service-443-yhsnrauznpwh", "chain": "chain1", "resource": "projects/$PROJECT_ID/locations/us-west1/lbTrafficExtensions/apim-extension" } ], "backendTargetProjectNumber": "projects/763484362408", "@type": "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" }, "httpRequest": { ... }, "resource": { "type": "internal_http_lb_rule", "labels": { ... } }, "timestamp": "2024-04-01T20:15:15.182137Z", "severity": "INFO", "logName": "projects/$PROJECT_ID/logs/loadbalancing.googleapis.com%2Frequests", "receiveTimestamp": "2024-04-01T20:15:18.209706689Z" }שימו לב שבשדה
grpcStatusמוצג הערךABORTED.
יומני מפעילים של APIM
APIM Operator הוא אופרטור Kubernetes שמעבד אירועים של משאבים מותאמים אישית של APIM (כמו יצירה, קריאה, עדכון ומחיקה), ומתרגם את האירועים האלה להגדרה המתאימה של Apigee.
כדי לראות את היומנים של APIM Operator:
- כדי לראות את היומנים במסוף Google Cloud , נכנסים לדף Logs Explorer:
- בחלונית השאילתה, מזינים שאילתה שדומה לשאילתה הבאה:
resource.type="k8s_container" resource.labels.namespace_name="apim" labels.k8s-pod/app="apigee-apim-operator" severity>=DEFAULT
- לוחצים על Run query.
- רשומות היומן שסוננו מוצגות בחלונית Query results.
- חשוב לתעד בעיות שקשורות ליצירה, לעדכון או למחיקה של
APIMExtensionPolicyב Google Cloud שירותי רשת, או בעיות שקשורות למוצרי API במישורי הניהול של Apigee.דוגמה לשגיאה:
ApimExtensionPolicy creation status400 response body:{ "error": { "code": 400, "message": "The request was invalid: backend service https://www.googleapis.com/compute/v1/projects/... must use HTTP/2 as the protocol", "status": "INVALID_ARGUMENT", "details": [ { "@type": "type.googleapis.com/google.rpc.BadRequest", "fieldViolations": [ { "field": "lb_traffic_extension.extension_chains[0].extensions[0].service" } ] }, { "@type": "type.googleapis.com/google.rpc.RequestInfo", "requestId": "d4e6f00ab5d367ec" } ] } }
פתרון בעיות שקשורות לשגיאות גישה מסוג 403 ב-APIM Operator
אם אתם מגלים שגיאות בקוד הסטטוס 403 שמצביעות על בעיות בגישה, ודאו את הדברים הבאים:
- באשכול GKE מופעל איחוד זהויות של עומסי עבודה. איחוד שירותי אימות הזהות של עומסי עבודה מופעל כברירת מחדל עבור שנוצרו במצב טייס אוטומטי. אם יצרתם אשכול באמצעות מצב רגיל, במקרה של שימוש באשכול רגיל, צריך להפעיל איחוד שירותי אימות הזהות של עומסי עבודה כמו שמתואר במאמר הפעלת איחוד שירותי אימות הזהות של עומסי עבודה ל-GKE.
- חשבון השירות של Kubernetes (
apim-ksa) מתויג בצורה נכונה על ידי ההתקנה של Helm. כדי לוודא זאת, מריצים את הפקודה הבאה:kubectl describe serviceaccount apim-ksa -n NAMESPACE
כאשר NAMESPACE הוא מרחב השמות שבו ה-APIM Operator פרוס.
מוודאים שהערך
apigee-apim-gsa@$PROJECT.iam.gserviceaccount.comמופיע בשדה Annotations בפלט.לדוגמה:
kubectl describe serviceaccount apim-ksa -n apim
הפלט אמור להיראות כך: Name: apim-ksa Namespace: apim Labels: ... Annotations: iam.gke.io/gcp-service-account: apigee-apim-gsa@apigee-product-demo.iam.gserviceaccount.com ... Image pull secrets:
Mountable secrets: Tokens: Events: - לחשבון השירות
apigee-apim-gsaיש את התפקידים וההרשאות הנכונים ב-IAM. אפשר לאשר את זה באמצעות הפקודה הבאה:gcloud iam service-accounts get-iam-policy \ apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com
לחשבון השירות צריך להיות מוקצה התפקיד
roles/iam.workloadIdentityUser.לדוגמה, בפלט הבא מוצג התפקיד
roles/iam.workloadIdentityUser:bindings: - members: - serviceAccount:$PROJECT_ID.svc.id.goog[/apim-ksa] role: roles/iam.workloadIdentityUser etag: BwYUpeaM7XQ= version: 1
- לא קיימים תנאי IAM מיוחדים בתפקידים הנדרשים, שימנעו גישה למפעיל.
פתרון בעיות שקשורות לתנועת גולשים בזמן הריצה של Apigee
בקטע הזה מוסבר איך לפתור בעיות שקשורות לתנועה בזמן הריצה של Apigee. בקטעים הבאים מוסבר איך לפתור בעיות שקשורות לבקשות תקינות ולא תקינות.
בקשות תקפות נכשלות
אם אתם לא מצליחים לשלוח בקשות תקינות לזמן הריצה של Apigee, יכול להיות שיש בעיות מהסוגים הבאים:
- שער GKE לא יכול להגיע לזמן הריצה של Apigee.
- מפתח ה-API או פרטי הכניסה מסוג JWT לא תקינים.
- מוצר ה-API של Apigee לא מוגדר לטירגוט ולסביבה הנכונים.
- סביבת זמן הריצה של Apigee לא מודעת למוצר Apigee API.
שלבים לפתרון בעיות
כדי לפתור בעיות שקשורות לבקשות תקינות:
- מפעילים את היומנים של מאזן העומסים בשער GKE ובודקים את היומנים כדי לזהות את הסיבה לכשלים בהפניה לתוסף. פרטים נוספים זמינים ביומנים של GKE Gateway.
- מוודאים ששירות ה-backend שאליו יש הפניה משירות ה-ext-proc תקין.
- בודקים את ההגדרה של מוצר ה-API ב-Apigee:
- מוודאים שמוצר ה-API מופעל בסביבה הנכונה (לדוגמה,
testאוprod). - מוודאים שנתיב המשאב תואם לבקשה. נתיב כמו
/או/**יתאים לכל נתיב. אפשר גם להשתמש בתווים הכלליים*או**כדי למצוא התאמה. - מוודאים שיש לכם אפליקציה למפתחים שמוגדרת למוצר ה-API. כדי לאמת את מפתחות ה-API, צריך לקשר את מוצר ה-API לאפליקציה למפתחים.
- מוודאים שמוצר ה-API מופעל בסביבה הנכונה (לדוגמה,
- בודקים את הבקשה לשער:
- מוודאים שטוקן הצרכן מועבר בכותרת
x-api-key. - מוודאים שטוקן הצרכן תקין. צריך לאשר את פרטי הכניסה מאפליקציית הפיתוח עבור מוצר ה-API.
- מוודאים שטוקן הצרכן מועבר בכותרת
בקשות לא תקינות מצליחות
אם בקשות לא חוקיות לזמן הריצה של Apigee מצליחות, יכול להיות שיש בעיות מהסוגים הבאים:
-
FailOpenמוגדר כ-trueב-APIMExtensionPolicy. - לא מוגדר traffic extension למאזן העומסים של GKE Gateway.
שלבים לפתרון בעיות
כדי לפתור בעיות שקשורות לבקשות לא תקינות:
- מוודאים שקיימת תוסף שירות שמפנה לשירותי הקצה העורפי הנכונים ולכלל ההעברה של GKE Gateway.
כדי לראות את תוסף השירות, משתמשים בפקודה הבאה:
gcloud beta service-extensions lb-traffic-extensions describe NAME_OF_APIM_EXTENSION_POLICY --location=LOCATION --project=PROJECT
כאשר:
-
NAME_OF_APIM_EXTENSION_POLICY:APIMExtensionPolicyשם המשאב המותאם אישית. -
PROJECT: מזהה הפרויקט. -
LOCATION: המיקום של אשכול GKE שבו שער הגישה שלכם נפרס.
הפלט ייראה כך:
... extensionChains: - extensions: - authority: ext11.com failOpen: false # make sure this is false name: ext11 service: https://www.googleapis.com/compute/v1/projects/my-project/regions/us-west1/backendServices/gkegw1-2y13-apigee-service-extension-backend-service-443-yhsnrauznpwh # Confirm this is correct supportedEvents: - REQUEST_HEADERS - RESPONSE_HEADERS - REQUEST_BODY - RESPONSE_BODY - REQUEST_TRAILERS - RESPONSE_TRAILERS timeout: 0.100s matchCondition: celExpression: 'true' # Confirm this is set name: chain1 forwardingRules: - https://www.googleapis.com/compute/v1/projects/my-project/regions/us-west1/forwardingRules/gkegw1-2y13-default-internal-http-h6c1hhp1ce6q # Confirm this is the correct forwarding rule for your application load balancer loadBalancingScheme: INTERNAL_MANAGED name: projects/my-project/locations/us-west1/lbTrafficExtensions/apim-extension-policy-1ניתוח נתונים חסר
אם אין לכם אפשרות לראות את Apigee API Analytics עבור Apigee Operator for Kubernetes ב Google Cloud מסוף, שימו לב שיכול להיות עיכוב של כמה דקות בקליטת הנתונים ב-Apigee.
מקורות מידע נוספים
אפשר גם להיעזר במשאבים הבאים כדי לפתור בעיות שקשורות ל-Apigee Operator for Kubernetes ולתנועה בזמן הריצה של Apigee:
-