שרת proxy של Envoy נכשל עם שגיאת HTTP 403 אסור במתאם Apigee עבור Envoy

מוצג המסמך של Apigee Edge.
עוברים אל מסמכי תיעוד של Apigee X.
מידע

תיאור הבעיה

שרת ה-proxy של Envoy נכשל עם שגיאת HTTP 403 Forbidden כשמפעילים אותו דרך Apigee Adapter ל-Envoy.

הודעת שגיאה

הודעת השגיאה הבאה מוצגת:

HTTP/1.1 403 Forbidden
content-length: 19
content-type: text/plain
date: Tue, 03 Nov 2020 00:20:10 GMT
server: istio-envoy

גורמים אפשריים

שרת ה-proxy של Envoy יעלה שגיאת HTTP 403 אם אחד מהתנאים הבאים קורה:

סיבה תיאור הוראות לפתרון בעיות עבור
מוצר ה-API לא מופעל מוצר ה-API לא מופעל עבור הסביבה הספציפית. משתמשי Edge בענן הציבורי והפרטי
חסר נתיב ה-URI של שירות היעד במוצר ה-API נתיב ה-URI של שירות היעד חסר או לא נוסף למוצר ה-API באמצעות API המשאבים. משתמשי Edge בענן הציבורי והפרטי
חסר שם מארח במוצר ה-API שם המארח שצוין בבקשת ה-API של הלקוח חסר במוצר ה-API ב-Apigee יעדים של שירות מרחוק. משתמשי Edge בענן הציבורי והפרטי
מפתח API חסר בכותרת הבקשה מפתח ה-API לא מועבר בכותרת ה-HTTP x-api-key. משתמשי Edge בענן הציבורי והפרטי
מפתח API לא תקין מפתח ה-API שהועבר כחלק מהבקשה לא תקין. משתמשי Edge בענן הציבורי והפרטי
מתאם Apigee ל-Envoy לא יכול תקשורת עם שרת proxy ל-API בשירות מרוחק מתאם Apigee ל-Envoy לא יכול לתקשר עם שרת ה-proxy של ה-API לשירות מרחוק. משתמשי Edge בענן הציבורי והפרטי
לשרת proxy של Envoy אין אפשרות לתקשר עם מתאם Apigee ל-Envoy שרת proxy של Envoy לא יכול לתקשר עם מתאם Apigee ל-Envoy משתמשי Edge בענן הציבורי והפרטי

לפני שמתחילים

  1. יש לוודא שקיבלת את הודעת התשובה 403 Forbidden מ- שרת proxy של Envoy. מוצרים לדוגמה:
    curl -i -H "x-api-key: $API_KEY" http://httpbin:8080/echo
    
    HTTP/1.1 403 Forbidden
    content-length: 19
    content-type: text/plain
    date: Tue, 12 Jan 2021 08:18:08 GMT
    server: envoy
    RBAC: access denied
    
  2. מפעילים יומני ניפוי באגים:

    עליך לוודא שהפעלת יומני ניפוי באגים במתאם Apigee ל-Envoy כדי לתעד פרטים נוספים על השגיאה. אם לא, צריך להפסיק את Apigee Adapter ל-Envoy ולהפעיל אותו שוב, וכך להפעיל יומני ניפוי באגים באמצעות הפקודה הבאה:

    apigee-remote-service-envoy -c config.yaml -l debug
    

הסיבה: מוצר ה-API לא מופעל

השגיאה הזו תתרחש אם מוצר ה-API הספציפי שמשמש את Envoy Proxy לא מופעל סביבה ספציפית שבה הקריאות ל-API מופעלות.

אבחון

כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:

  1. מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 2 שלמעלה.
  2. צריך לבדוק במתאם Apigee ליומני Envoy ולוודא שההודעה הבאה מוצגת בקטע Authorizing request:
    product: API_PRODUCT_NAME not found
    

    פלט של יומן ניפוי באגים לדוגמה:

    2021-01-12T08:18:08.124Z        DEBUG   auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil)
    2021-01-12T08:18:08.124Z        DEBUG   auth/verify_api_key.go:106      fetchToken fetching: 7mQIG...
    2021-01-12T08:18:08.589Z        DEBUG   auth/auth.go:125        using api key from request
    2021-01-12T08:18:08.589Z        DEBUG   auth/auth.go:157        Authenticate success: &auth.Context{Context:(*server.Handle
    r)(0xc0001a0600), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"},
    Expires:time.Time{wall:0x0, ext:63746037188, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[]
    string{""}, APIKey:"7mQIG..."}
    2021-01-12T08:18:08.589Z        DEBUG   product/manager.go:89
    Authorizing request:
      products: [ENVOY-PRODUCT-1]
      scopes: []
      operation: GET /echo
      target: httpbin:8080
      - product: ENVOY-PRODUCT-1
        not found
    

    הדוגמה שלמעלה מראה שמוצר ה-API ENVOY-PRODUCT-1 לא נמצא ב מתאם Apigee ל-Envoy.

    מידע נוסף על Apigee Adapter לרישום ביומן Envoy זמין כאן רישום ביומן.

  3. אם ההודעה הזו מופיעה בזמן שאתם מאשרים את בקשת ה-API, סביר להניח שהיא מציינת שמוצר ה-API הספציפי אינו מופעל בסביבה ספציפית שבה ביצוע הקריאות ל-API.
  4. כדי לוודא זאת:
    1. מתחברים לממשק המשתמש של Edge.
    2. בדף פרסום > מוצרי API, לחצו על מוצר ה-API הספציפי משמש להגדרת מתאם Apigee ל-Envoy.
    3. מוודאים שהסביבה הספציפית שבה שולחים את בקשות ה-API במוצר ה-API.
    4. אם הסביבה הספציפית לא מופעלת במוצר ה-API, זו הסיבה לבעיה הזו.
  5. אם הסביבה הספציפית כבר מופעלת, עוברים אל הסיבה: חסר נתיב URI של שירות יעד במוצר API.

רזולוציה

אם הסביבה הספציפית לא מופעלת במוצר ה-API, מבצעים את השלבים הבאים כדי כדי לפתור את הבעיה:

  1. מתחברים לממשק המשתמש של Edge.
  2. בדף פרסום > הדף 'מוצרי API', לוחצים על מוצר ה-API הספציפי שבו השתמשתם להגדרת מתאם Apigee ל-Envoy.
  3. במוצרי API > דף שם המוצר, לוחצים על עריכה.
  4. כדי להפעיל את הסביבה הספציפית שבה רוצים לשלוח בקשות API, בוחרים באפשרות בתיבת הסימון של הסביבה הרלוונטית.
  5. לוחצים על שמירה.

הסיבה: חסר נתיב URI של שירות יעד במוצר ה-API

שגיאה זו מתרחשת אם נתיב ה-URI של היעד לא צוין במוצר ה-API הספציפי שבו נעשה שימוש על ידי שרת ה-proxy של Envoy.

אבחון

כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:

  1. מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 2 שלמעלה.
  2. צריך לבדוק במתאם Apigee ליומני Envoy ולוודא שההודעה הבאה מוצג עבור מוצר ה-API הספציפי המשויך ליעד ספציפי בקטע Authorizing request:

    no path: REQUEST_URI_PATH
    

    פלט של יומן ניפוי באגים לדוגמה:

    2021-01-12T08:09:02.604Z        DEBUG   auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil)
    2021-01-12T08:09:02.605Z        DEBUG   auth/auth.go:125        using api key from request
    2021-01-12T08:09:02.605Z        DEBUG   auth/auth.go:157        Authenticate success: &auth.Context{Context:(*server.Handle
    r)(0xc0001a4180), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"},
    Expires:time.Time{wall:0x0, ext:63746036507, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[]
    string{""}, APIKey:"7mQIG..."}
    2021-01-12T08:09:02.605Z        DEBUG   product/manager.go:89
    Authorizing request:
      products: [ENVOY-PRODUCT-1]
      scopes: []
      operation: GET /echo1
      target: httpbin:8080
      - product: ENVOY-PRODUCT-1
        no path: /echo1
    2021-01-12T08:09:02.605Z        DEBUG   server/authorization.go:228     sending ok (actual: PERMISSION_DENIED)

    בפלט לדוגמה מוצגת ההודעה:

    no path: /echo1
    

    הערך הזה מציין שהנתיב /echo1 לא נמצא במוצר ה-API ENVOY-PRODUCT-1.

  3. אם ההודעה no path: REQUEST_URI_PATH מופיעה זה הגורם לבעיה עבור יומני Apigee Adapter ליומני ניפוי באגים של Envoy. אם לא, עוברים אל הסיבה: חסר שם מארח במוצר ה-API.

רזולוציה

אם לא מוסיפים את ה-URI הספציפי של הבקשה למוצר ה-API של היעד הספציפי, מבצעים את השלבים הבאים כדי לפתור את הבעיה:

  1. מתחברים לממשק המשתמש של Edge.
  2. בדף פרסום > מוצרי API, לחצו על מוצר ה-API הספציפי משמש להגדרת מתאם Apigee ל-Envoy.
  3. במוצרי API > דף שם המוצר, לוחצים על עריכה.
  4. בחלונית API resources מוסיפים את ה-URI של בקשת ה-API למוצר ה-API.
  5. עוקבים אחרי מתאם Apigee ליומני Envoy וממתינים עד שמתאם Apigee ל-Envoy מאחזר את מוצר ה-API המעודכן. אחר כך, שולחים בקשת API נוספת כדי לאמת את התיקון.

הסיבה: חסר שם מארח במוצר ה-API

השגיאה הזו תתרחש אם השילוב של שם המארח ביעד והיציאה לא יתווסף מוצר ה-API שמשמש את Envoy Proxy.

אבחון

כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:

  1. מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 2 שלמעלה.
  2. צריך לבדוק במתאם Apigee ליומני Envoy ולוודא שההודעה הבאה מוצג עבור מוצר ה-API הספציפי המשויך ליעד ספציפי בקטע Authorizing request:

    no targets: HOSTNAME:PORT
    

    פלט של יומן ניפוי באגים לדוגמה:

    2021-01-12T08:12:06.019Z        DEBUG   auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil)
    2021-01-12T08:12:06.019Z        DEBUG   auth/auth.go:125        using api key from request
    2021-01-12T08:12:06.019Z        DEBUG   auth/auth.go:157        Authenticate success: &auth.Context{Context:(*server.Handle
    r)(0xc0001a4180), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"},
    Expires:time.Time{wall:0x0, ext:63746036507, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[]
    string{""}, APIKey:"7mQIG..."}
    2021-01-12T08:12:06.019Z        DEBUG   product/manager.go:89
    Authorizing request:
      products: [ENVOY-PRODUCT-1]
      scopes: []
      operation: GET /echo
      target: httpbin1:8080
      - product: ENVOY-PRODUCT-1
        no targets: httpbin1:8080
    2021-01-12T08:12:06.020Z        DEBUG   server/authorization.go:228     sending ok (actual: PERMISSION_DENIED)

    הדוגמה שלמעלה מראה שהשילוב של שם המארח והיציאה httpbin1:8080 לא נמצא במוצר ה-API ENVOY-PRODUCT-1.

  3. אם יומני Apigee Adapter ליומני Envoy מכילים רשומה עם ההודעה no targets: HOSTNAME:PORT במהלך אישור הבקשה, הערך הזה הוא הגורם לבעיה. אם לא, עוברים אל הסיבה: חסר מפתח API בכותרת הבקשה.

רזולוציה

אם השילוב של שם המארח ביעד והיציאה לא נוסף למוצר ה-API, מבצעים את את השלבים הבאים כדי לפתור את הבעיה:

  1. מתחברים לממשק המשתמש של Edge.
  2. בדף פרסום > מוצרי API, לחצו על מוצר ה-API הספציפי משמש להגדרת מתאם Apigee ל-Envoy.
  3. במוצרי API > דף שם המוצר, לוחצים על עריכה.
  4. בחלונית יעדי שירות מרוחקים של Apigee, מוסיפים את שם המארח של היעד ו ולאחר מכן ללחוץ על שמירה.

    אם הקטע יעדי שירות מרוחקים של Apigee לא מופיע בממשק המשתמש, מוסיפים מאפיין מותאם אישית למוצר ה-API עם המאפיין של בשם apigee-remote-service-targets ומוסיפים את הערך של PORT:HOSTNAME באמצעות Edge API. לדוגמה:

    curl https://api.enterprise.apigee.com/v1/organizations/$ORG/apiproducts/$ENVOY_PRODUCT \
        -X GET \
        -H "Authorization: Bearer $ACCESS_TOKEN" \
        -H "Content-Type:application/json" \
        -d \
    {
        "apiResources": [
            "/echo",
            "/verifyApiKey"
        ],
        "approvalType": "auto",
        "attributes": [
            {
                "name": "access",
                "value": "public"
            },
            {
                "name": "apigee-remote-service-targets",
                "value": "localhost:8080"
            }
        ],
        "createdAt": 1610435989556,
        "createdBy": "---masked---",
        "description": "",
        "displayName": "ENVOY-PRODUCT-1",
        "environments": [
            "test"
        ],
        "lastModifiedAt": 1612234134060,
        "lastModifiedBy": "---masked---",
        "name": "ENVOY-PRODUCT-1",
        "proxies": [
            "remote-service"
        ],
        "scopes": []
    }
    
  5. בסיום המשימה שלמעלה, צריך לעקוב אחרי מתאם Apigee ליומני Envoy ולהמתין עד מתאם Apigee ל-Envoy מאחזר את מוצר ה-API המעודכן. אחר כך שולחים עוד ממשק API בקשה לאימות התיקון.

הסיבה: מפתח API חסר בכותרת הבקשה

השגיאה הזו תתרחש אם מפתח ה-API לא יועבר כחלק מכותרות הבקשה.

אבחון

כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:

  1. מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 2 שלמעלה.
  2. בודקים את מתאם Apigee ליומני Envoy ומוודאים שאתם רואים את הודעה אחת ([missing authentication]) מתחת לAuthenticate error .

    פלט של יומן ניפוי באגים לדוגמה:

    2021-01-12T08:20:31.461Z        DEBUG   auth/auth.go:98 Authenticate: key: , claims: map[string]interface {}(nil)
    2021-01-12T08:20:31.461Z        DEBUG   auth/auth.go:159
    Authenticate error: &auth.Context{Context:(*server.Handler)
    (0xc0001a0600), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0,
    loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [missing authentication]
    2021-01-12T08:20:31.461Z        DEBUG   server/authorization.go:205     sending denied: UNAUTHENTICATED
    2021-01-12T08:20:32.448Z        DEBUG   server/header_context.go:68     No context header x-apigee-api, using target header
    : :authority

    בפלט לדוגמה שלמעלה מוצגת ההודעה [missing authentication]. הודעה זו מציינת שמפתח ה-API לא הועבר כחלק כותרת הבקשה.

  3. אם יומני Apigee Adapter ליומני Envoy מכילים רשומה ביומן עם ההודעה [missing authentication] בקטע Authenticate error , סימן שמדובר את הגורם לבעיה. אם לא, עוברים אל הסיבה: מפתח API לא תקין.

רזולוציה

אם השגיאה [missing authentication] הוצגה כדי לפתור את הבעיה, צריך לבצע את השלבים הבאים ב-Apigee Adapter ליומני Envoy:

  1. צריך לבדוק אם הלקוח שלח את מפתח ה-API באמצעות כותרת ה-HTTP x-api-key ב- בקשת ה-API. אם לא, מבקשים מהלקוח לשלוח את מפתח ה-API בכותרת ה-HTTP x-api-key
  2. צריך לבדוק את קובץ התצורה של Envoy במתאם Apigee ולוודא שמפתח ה-API שמוגדר כברירת מחדל הוא שם הכותרת x-api-key השתנה, לדוגמה:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        global:
          tls:
            ...
        tenant:
          ...
        auth:
          target_header: api-key
    

    בדוגמה שלמעלה, שם הכותרת של מפתח ה-API שמוגדר כברירת מחדל השתנה ל- api-key במקרה כזה, צריך להעביר את מפתח ה-API כחלק מהכותרת api-key

  3. אם שיניתם את שם הכותרת של מפתח ה-API שמוגדר כברירת מחדל, צריך לבקש מהלקוח להשתמש שם הכותרת של מפתח ה-API, שולחים בקשה נוספת ל-API ומוודאים שהבעיה פותרת את הבעיה.

הסיבה: מפתח API לא תקין

השגיאה הזו תתרחש אם יועבר מפתח API לא תקין כחלק מכותרת הבקשה.

אבחון

כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:

  1. מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 2 שלמעלה.
  2. צריך לבדוק במתאם Apigee ליומני Envoy ולוודא שההודעה מופיעה [permission denied] בקטע Authenticate error. היא מוצגת בדרך כלל אחרי שמפתח ה-API מאוחזר על ידי המתאם, שמציין כי ההודעה fetchToken fetching: API_KEY.

    פלט של יומן ניפוי באגים לדוגמה:

    2021-01-12T05:01:07.198Z        DEBUG   auth/auth.go:98 Authenticate: key: 123, claims: map[string]interface {}(nil)
    2021-01-12T05:01:07.198Z        DEBUG   auth/verify_api_key.go:106      fetchToken fetching: API_KEY
    2021-01-12T05:01:09.102Z        DEBUG   server/header_context.go:68     No context header x-apigee-api, using target header: :authority
    2021-01-12T05:01:09.831Z        DEBUG   auth/auth.go:159        Authenticate error: &auth.Context{Context:(*server.Handler)(0xc0001640c0), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [permission denied]
    2021-01-12T05:01:09.832Z        DEBUG   server/authorization.go:228     sending ok (actual: PERMISSION_DENIED)
    

    בדוגמה הזו, מפתח ה-API שנשלח בבקשת ה-API לא היה חוקי.

  3. אם Apigee Adapter ליומני Envoy מכילה רשומת יומן עם [permission denied] בקטע Authenticate error , אז היא מציינת מפתח ה-API שמועבר כחלק מהבקשה לא תקין וגורם לבעיה. אם לא, עוברים אל הסיבה: Apigee Adapter ל-Envoy לא ניתן לתקשר עם שרת proxy של API לשירות מרוחק.

רזולוציה

אם ההודעה [permission denied] מופיעה בקטע Authenticate error ביומני Apigee Adapter ליומני Envoy, צריך לבצע את השלבים הבאים כדי לפתור את הבעיה:

  1. בודקים את מפתח ה-API שנשלח בבקשת ה-API מול הערך של מפתח ה-API שמופיע ב שמקושרת למוצר ה-API.
  2. אם מפתח ה-API שבו הלקוח משתמש לא חוקי, צריך לבקש מהלקוח לשלוח מפתח API תקין.
  3. אם מפתח ה-API שהלקוח משתמש בו חוקי, ואם אתה עדיין רואה קוד HTTP שגיאה אחת (403). עליך לפנות אל התמיכה של Apigee Edge כדי לבדוק את הבעיה לעומק.

הסיבה: מתאם Apigee ל-Envoy לא יכול לתקשר עם שרת proxy של API לשירות מרוחק

השגיאה הזו תתבצע אם מתאם Apigee ל-Envoy לא מצליח לתקשר עם השלט הרחוק ה-Proxy ל-API של השירות אם מארח השירות המרוחק שהוגדר אינו חוקי.

אבחון

כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:

  1. מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 2 שלמעלה.
  2. בודקים את מתאם Apigee ליומני Envoy ומוודאים שמופיעה ההודעה הבאה:

    Error retrieving products: REQUEST_URI: no such host
    

    פלט של יומן ניפוי באגים לדוגמה:

    2021-01-12T08:29:06.499Z        DEBUG   product/manager.go:188  retrieving products from: https://foo/remote-service/products
    2021-01-12T08:29:06.505Z        ERROR   product/manager.go:164  Error retrieving products: GET "https://foo/remote-service/pro
    ducts": dial tcp: lookup foo on 169.254.169.254:53: no such host
    github.com/apigee/apigee-remote-service-golib/product.(*manager).start.func1
            /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/product/manager.go:164
    github.com/apigee/apigee-remote-service-golib/util.(*Looper).Run
            /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/util/looper.go:87
    github.com/apigee/apigee-remote-service-golib/util.(*Looper).Start.func1
            /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/util/looper.go:59
    

    בדוגמה הזו, Apigee Adapter ל-Envoy לא הצליחה לתקשר עם שרת ה-proxy ל-API של השירות מרחוק כי שם המארח צוין ב-proxy ל-API של השרת המרוחק כתובת ה-URL לא תקפה כפי שמצוין בשגיאה no such host .

  3. אם יומני Apigee Adapter ליומני Envoy מכילים רשומה ביומן עם ההודעה no such host, זו הסיבה לבעיה. אם לא, עוברים אל הסיבה: שרת ה-proxy ל-Envoy לא מצליח לתקשר עם מתאם Apigee ל-Envoy.

רזולוציה

אם השגיאות שלמעלה מוצגות במתאם Apigee ליומני Envoy, צריך לבצע את הפעולות הבאות כדי לפתור את הבעיה:

  1. צריך לבדוק את קובץ התצורה של Envoy במתאם Apigee ולוודא שהשדה כתובת ה-URL של שרת ה-proxy ל-API לשירות מרוחק תקינה.

    אם לא, צריך להפסיק את Apigee Adapter ל-Envoy, לתקן את כתובת ה-URL של שרת ה-proxy ל-API של השירות מרחוק ב את קובץ התצורה, להפעיל את Apigee Adapter ל-Envoy ולשלוח בקשת API נוספת לאמת את התיקון.

    הגדרות אישיות לדוגמה:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        tenant:
          internal_api: https://istioservices.apigee.net/edgemicro
          remote_service_api: https://ORG-ENV.apigee.net/remote-service
          org_name: ORG
          env_name: ENV
          key: KEY
          secret: SECRET
          
  2. מוודאים ששרת ה-proxy ל-API remote-service פרוס ב-Edge הרלוונטי הסביבה. אם לא, פורסים את שרת ה-proxy ל-API remote-service ב-Edge הרלוונטי ולנסות שוב.
  3. אימות קישוריות הרשת בין מתאם Apigee ל-Envoy נקודת קצה (endpoint) של שרת proxy ל-API remote-service. אם יש קישוריות רשת נמצאו בעיות, צור קשר עם צוות הרשתות שלך ונסה לפתור אותן.

הסיבה: שרת ה-proxy ל-Envoy לא מצליח לתקשר עם מתאם Apigee ל-Envoy

אבחון

כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:

  1. מוודאים שהפעלתם יומני ניפוי באגים ב-Envoy. אם לא, עוצרים את Envoy ומפעילים אותו שוב, שמפעילים יומני ניפוי באגים. לאחר מכן צריך לשלוח בקשת API נוספת.

    פריסות עצמאיות:

    envoy -c envoy-config.yaml -l debug
    

    פריסות שמבוססות על Kubernetes/Istio:

    kubectl -n=istio-system get pods
    kubectl -n=istio-system exec -it INGRESS_GATEWAY_NAME bash -- curl -X POST localhost:15000/logging?connection=debug
    
  2. בודקים את מתאם Apigee ליומני Envoy ומוודאים שיש רשומה ביומן עם ההודעה:
    connecting to APIGEE_ENVOY_ADAPTER_HOST:5000
    

    ואחריו:

    upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
    

    פלט של יומן ניפוי באגים לדוגמה:

    [2021-03-23 05:44:41.867][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:769] [C4] connecting to 127.0.0.1:5000
    [2021-03-23 05:44:41.867][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:785] [C4] connection in progress
    [2021-03-23 05:44:41.868][1303661][debug][http2] [external/envoy/source/common/http/http2/codec_impl.cc:1173] [C4] updating connection-level initial window size to 268435456
    [2021-03-23 05:44:41.869][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:634] [C4] delayed connection error: 111
    [2021-03-23 05:44:41.869][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:203] [C4] closing socket: 0
    [2021-03-23 05:44:41.869][1303661][debug][client] [external/envoy/source/common/http/codec_client.cc:96] [C4] disconnect. resetting 0 pending requests
    [2021-03-23 05:44:41.869][1303661][debug][pool] [external/envoy/source/common/conn_pool/conn_pool_base.cc:314] [C4] client disconnected, failure reason:
    [2021-03-23 05:44:41.869][1303661][debug][router] [external/envoy/source/common/router/router.cc:1031] [C0][S6149963213555558594] upstream reset: reset reason: connection failure, transport failure reason:
    [2021-03-23 05:44:41.869][1303661][debug][http] [external/envoy/source/common/http/async_client_impl.cc:100] async http request response headers (end_stream=true):
    ':status', '200'
    'content-type', 'application/grpc'
    'grpc-status', '14'
    'grpc-message', 'upstream connect error or disconnect/reset before headers. reset reason: connection failure'

    הדוגמה שלמעלה מראה ש-Envoy לא הצליח לתקשר עם מתאם Apigee ל-Envoy מהסיבה connection failure.

  3. יכולות להיות כמה סיבות לכך connection failure. נבחן כל אחד מהתרחישים.

תרחיש מס' 1: תהליך המתאם לא פועל

אם תהליך מתאם Apigee ל-Envoy לא פועל, השגיאה הזו יכולה להתרחש.

  1. מוודאים שתהליך Apigee Adapter ל-Envoy פועל על ידי ביצוע הפעולות הבאות הפקודה. אם תהליך Apigee Adapter ל-Envoy פועל, תתקבל התוצאה הבאה צריך לרשום אותו.
    ps -ef | grep apigee-remote-service-envoy
    
  2. אם הוא לא פועל, זו הסיבה לבעיה.

רזולוציה

  1. אם תהליך Apigee Adapter ל-Envoy לא פועל, מתחילים את מתאם Apigee ל-Envoy.
  2. צריך לשלוח בקשת API נוספת ולוודא שהבעיה נפתרה.

תרחיש מס' 2: תהליך המתאם לא מאזין ביציאה הספציפית

אם בתהליך של Apigee Adapter ל-Envoy לא מאזין ביציאה הספציפית, השגיאה הזאת יכולה להופיע.

אם התהליך של Apigee Adapter ל-Envoy פועל, צריך לוודא שיש שקע האזנה ב- יציאה 5000: APIGEE_ENVOY_ADAPTER_HOST:5000. אפשר להריץ את הפקודה netstat כדי לאמת זאת:

sudo netstat -lnp | grep 5000

פלט לדוגמה:

sudo netstat -lnp | grep 5000

tcp6       0      0 :::5000                 :::*                    LISTEN      1596530/./apigee-re

אם אין האזנה ב-socket ביציאה 5000, ייתכן שזו הסיבה לבעיה.

רזולוציה

  1. צריך להפסיק את מתאם Apigee ל-Envoy ולהפעיל אותו שוב.
  2. צריך לשלוח בקשת API נוספת ולוודא שהבעיה נפתרה.

תרחיש מס' 3: קישוריות רשת בין Envoy ו-Apigee Adapter ל-Envoy

  1. אימות קישוריות הרשת בין Envoy ו-Apigee Adapter עבור Envoy:
    ssh $ENVOY_HOST
    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000

    אם telnet יוכל לבצע חיבור TCP למתאם Apigee ל-Envoy יוצג פלט שדומה לזה:

    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
    
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    
  2. אם מופיעה שגיאה Connection timed out ב-telnet, סימן יש בעיית קישוריות רשת בין Envoy לבין Apigee Adapter for Envoy.

רזולוציה

אם תיתקלו בבעיות קישוריות רשת בין Envoy ל-Apigee Adapter for Envoy, תוכלו לפנות לצוות הרשתות שלכם ולנסות לפתור את הבעיה.

אם הבעיה עדיין נמשכת, עוברים אל חובה לאסוף את פרטי האבחון.

חובה לאסוף פרטי אבחון

אם הבעיה נמשכת לאחר ביצוע ההוראות שלמעלה, יש לאסוף את האבחון הבא ולאחר מכן יוצרים קשר עם התמיכה של Apigee Edge:

  1. מוצר Apigee שנעשה בו שימוש:

    דוגמה: Apigee Edge Cloud, Apigee OPDK, Apigee hybrid, Apigee X

  2. הארגון והסביבה ב-Apigee
  3. קריאה של הגדרת מוצר API באמצעות Edge API:

    curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT

    חומר עזר: ממשקי API של Apigee Edge

  4. מתחילים סשן מעקב ב-proxy ל-API remote-service באמצעות ממשק המשתמש ב-Apigee Edge. משחזרים את הבעיה ומשתפים את קובץ ה-XML של סשן Trace.

    חומר עזר: שימוש בכלי המעקב | Apigee Edge

  5. Apigee Adapter ליומני Envoy (יומנים מלאים שקשורים לתקופה הנתונה)

    פריסות עצמאיות:

    # by default Apigee Envoy write logs to stdout and stderr, check your deployment configuration and collect logs accordingly
    

    פריסות שמבוססות על Kubernetes/Istio:

    kubectl -n=apigee get pods
    kubectl -n=apigee logs APIGEE_REMOTE_SERVICE_ENVOY_POD_NAME > apigee-remote-service-envoy.log
  6. בקשת API שנשלחה לשרת ה-proxy של Envoy באמצעות פקודת curl (הפלט המלא של הפקודה curl):
    curl -v ENVOY_PROXY_ENDPOINT
  7. בקשת API שנשלחה לשירות היעד באמצעות פקודת curl (הפקודה המלאה הפלט של הפקודה curl):
    curl -v TARGET_SERVICE_ENDPOINT