פתרון בעיות ב-Apigee Operator ל-Kubernetes

הדף הזה רלוונטי ל-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:

  1. מקבלים את המזהה של שירות הקצה העורפי שנוצר עבור זמן הריצה של 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 במזהה.

  2. כדי להפעיל את הרישום ביומן, פועלים לפי השלבים שבקטע הפעלת רישום ביומן בשירות לקצה העורפי.
  3. כדי לראות את היומנים במסוף Google Cloud , נכנסים לדף Logs Explorer:

    Logs Explorer

  4. במאמר הודעות יומן עבור שירות לקצה העורפי מפורט המידע שזמין ברשומת היומן של 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:

  1. כדי לראות את היומנים במסוף Google Cloud , נכנסים לדף Logs Explorer:

    Logs Explorer

  2. בחלונית השאילתה, מזינים שאילתה שדומה לשאילתה הבאה:
    resource.type="k8s_container"
    resource.labels.namespace_name="apim"
    labels.k8s-pod/app="apigee-apim-operator" severity>=DEFAULT
    
  3. לוחצים על Run query.
  4. רשומות היומן שסוננו מוצגות בחלונית Query results.
  5. חשוב לתעד בעיות שקשורות ליצירה, לעדכון או למחיקה של 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 לאפליקציה למפתחים.
  • בודקים את הבקשה לשער:
    • מוודאים שטוקן הצרכן מועבר בכותרת 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: