מוצג המסמך של 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 בענן הציבורי והפרטי |
לפני שמתחילים
- יש לוודא שקיבלת את הודעת התשובה
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
מפעילים יומני ניפוי באגים:
עליך לוודא שהפעלת יומני ניפוי באגים במתאם Apigee ל-Envoy כדי לתעד פרטים נוספים על השגיאה. אם לא, צריך להפסיק את Apigee Adapter ל-Envoy ולהפעיל אותו שוב, וכך להפעיל יומני ניפוי באגים באמצעות הפקודה הבאה:
apigee-remote-service-envoy -c config.yaml -l debug
הסיבה: מוצר ה-API לא מופעל
השגיאה הזו תתרחש אם מוצר ה-API הספציפי שמשמש את Envoy Proxy לא מופעל סביבה ספציפית שבה הקריאות ל-API מופעלות.
אבחון
כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:
- מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 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 זמין כאן רישום ביומן.
- אם ההודעה הזו מופיעה בזמן שאתם מאשרים את בקשת ה-API, סביר להניח שהיא מציינת שמוצר ה-API הספציפי אינו מופעל בסביבה ספציפית שבה ביצוע הקריאות ל-API.
- כדי לוודא זאת:
- מתחברים לממשק המשתמש של Edge.
- בדף פרסום > מוצרי API, לחצו על מוצר ה-API הספציפי משמש להגדרת מתאם Apigee ל-Envoy.
- מוודאים שהסביבה הספציפית שבה שולחים את בקשות ה-API במוצר ה-API.
- אם הסביבה הספציפית לא מופעלת במוצר ה-API, זו הסיבה לבעיה הזו.
- אם הסביבה הספציפית כבר מופעלת, עוברים אל הסיבה: חסר נתיב URI של שירות יעד במוצר API.
רזולוציה
אם הסביבה הספציפית לא מופעלת במוצר ה-API, מבצעים את השלבים הבאים כדי כדי לפתור את הבעיה:
- מתחברים לממשק המשתמש של Edge.
- בדף פרסום > הדף 'מוצרי API', לוחצים על מוצר ה-API הספציפי שבו השתמשתם להגדרת מתאם Apigee ל-Envoy.
- במוצרי API > דף שם המוצר, לוחצים על עריכה.
- כדי להפעיל את הסביבה הספציפית שבה רוצים לשלוח בקשות API, בוחרים באפשרות בתיבת הסימון של הסביבה הרלוונטית.
- לוחצים על שמירה.
הסיבה: חסר נתיב URI של שירות יעד במוצר ה-API
שגיאה זו מתרחשת אם נתיב ה-URI של היעד לא צוין במוצר ה-API הספציפי שבו נעשה שימוש על ידי שרת ה-proxy של Envoy.
אבחון
כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:
- מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 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
לא נמצא במוצר ה-APIENVOY-PRODUCT-1
. - אם ההודעה
no path: REQUEST_URI_PATH
מופיעה זה הגורם לבעיה עבור יומני Apigee Adapter ליומני ניפוי באגים של Envoy. אם לא, עוברים אל הסיבה: חסר שם מארח במוצר ה-API.
רזולוציה
אם לא מוסיפים את ה-URI הספציפי של הבקשה למוצר ה-API של היעד הספציפי, מבצעים את השלבים הבאים כדי לפתור את הבעיה:
- מתחברים לממשק המשתמש של Edge.
- בדף פרסום > מוצרי API, לחצו על מוצר ה-API הספציפי משמש להגדרת מתאם Apigee ל-Envoy.
- במוצרי API > דף שם המוצר, לוחצים על עריכה.
- בחלונית API resources מוסיפים את ה-URI של בקשת ה-API למוצר ה-API.
- עוקבים אחרי מתאם Apigee ליומני Envoy וממתינים עד שמתאם Apigee ל-Envoy מאחזר את מוצר ה-API המעודכן. אחר כך, שולחים בקשת API נוספת כדי לאמת את התיקון.
הסיבה: חסר שם מארח במוצר ה-API
השגיאה הזו תתרחש אם השילוב של שם המארח ביעד והיציאה לא יתווסף מוצר ה-API שמשמש את Envoy Proxy.
אבחון
כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:
- מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 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
לא נמצא במוצר ה-APIENVOY-PRODUCT-1
.- אם יומני Apigee Adapter ליומני Envoy מכילים רשומה עם ההודעה
no targets: HOSTNAME:PORT
במהלך אישור הבקשה, הערך הזה הוא הגורם לבעיה. אם לא, עוברים אל הסיבה: חסר מפתח API בכותרת הבקשה.
רזולוציה
אם השילוב של שם המארח ביעד והיציאה לא נוסף למוצר ה-API, מבצעים את את השלבים הבאים כדי לפתור את הבעיה:
- מתחברים לממשק המשתמש של Edge.
- בדף פרסום > מוצרי API, לחצו על מוצר ה-API הספציפי משמש להגדרת מתאם Apigee ל-Envoy.
- במוצרי API > דף שם המוצר, לוחצים על עריכה.
בחלונית יעדי שירות מרוחקים של 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": [] }
- בסיום המשימה שלמעלה, צריך לעקוב אחרי מתאם Apigee ליומני Envoy ולהמתין עד מתאם Apigee ל-Envoy מאחזר את מוצר ה-API המעודכן. אחר כך שולחים עוד ממשק API בקשה לאימות התיקון.
הסיבה: מפתח API חסר בכותרת הבקשה
השגיאה הזו תתרחש אם מפתח ה-API לא יועבר כחלק מכותרות הבקשה.
אבחון
כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:
- מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 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 לא הועבר כחלק כותרת הבקשה. - אם יומני Apigee Adapter ליומני Envoy מכילים רשומה ביומן עם ההודעה
[missing authentication]
בקטעAuthenticate error
, סימן שמדובר את הגורם לבעיה. אם לא, עוברים אל הסיבה: מפתח API לא תקין.
רזולוציה
אם השגיאה [missing authentication]
הוצגה
כדי לפתור את הבעיה, צריך לבצע את השלבים הבאים ב-Apigee Adapter ליומני Envoy:
- צריך לבדוק אם הלקוח שלח את מפתח ה-API באמצעות כותרת ה-HTTP
x-api-key
ב- בקשת ה-API. אם לא, מבקשים מהלקוח לשלוח את מפתח ה-API בכותרת ה-HTTPx-api-key
- צריך לבדוק את קובץ התצורה של 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
- אם שיניתם את שם הכותרת של מפתח ה-API שמוגדר כברירת מחדל, צריך לבקש מהלקוח להשתמש שם הכותרת של מפתח ה-API, שולחים בקשה נוספת ל-API ומוודאים שהבעיה פותרת את הבעיה.
הסיבה: מפתח API לא תקין
השגיאה הזו תתרחש אם יועבר מפתח API לא תקין כחלק מכותרת הבקשה.
אבחון
כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:
- מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 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 לא היה חוקי.
- אם Apigee Adapter ליומני Envoy מכילה רשומת יומן עם
[permission denied]
בקטעAuthenticate error
, אז היא מציינת מפתח ה-API שמועבר כחלק מהבקשה לא תקין וגורם לבעיה. אם לא, עוברים אל הסיבה: Apigee Adapter ל-Envoy לא ניתן לתקשר עם שרת proxy של API לשירות מרוחק.
רזולוציה
אם ההודעה [permission denied]
מופיעה בקטע Authenticate
error
ביומני Apigee Adapter ליומני Envoy, צריך לבצע את השלבים הבאים
כדי לפתור את הבעיה:
- בודקים את מפתח ה-API שנשלח בבקשת ה-API מול הערך של מפתח ה-API שמופיע ב שמקושרת למוצר ה-API.
- אם מפתח ה-API שבו הלקוח משתמש לא חוקי, צריך לבקש מהלקוח לשלוח מפתח API תקין.
- אם מפתח ה-API שהלקוח משתמש בו חוקי, ואם אתה עדיין רואה קוד HTTP
שגיאה אחת (
403
). עליך לפנות אל התמיכה של Apigee Edge כדי לבדוק את הבעיה לעומק.
הסיבה: מתאם Apigee ל-Envoy לא יכול לתקשר עם שרת proxy של API לשירות מרוחק
השגיאה הזו תתבצע אם מתאם Apigee ל-Envoy לא מצליח לתקשר עם השלט הרחוק ה-Proxy ל-API של השירות אם מארח השירות המרוחק שהוגדר אינו חוקי.
אבחון
כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:
- מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 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
. - אם יומני Apigee Adapter ליומני Envoy מכילים רשומה ביומן עם ההודעה
no such host
, זו הסיבה לבעיה. אם לא, עוברים אל הסיבה: שרת ה-proxy ל-Envoy לא מצליח לתקשר עם מתאם Apigee ל-Envoy.
רזולוציה
אם השגיאות שלמעלה מוצגות במתאם Apigee ליומני Envoy, צריך לבצע את הפעולות הבאות כדי לפתור את הבעיה:
צריך לבדוק את קובץ התצורה של 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
- מוודאים ששרת ה-proxy ל-API
remote-service
פרוס ב-Edge הרלוונטי הסביבה. אם לא, פורסים את שרת ה-proxy ל-APIremote-service
ב-Edge הרלוונטי ולנסות שוב. - אימות קישוריות הרשת בין מתאם Apigee ל-Envoy
נקודת קצה (endpoint) של שרת proxy ל-API
remote-service
. אם יש קישוריות רשת נמצאו בעיות, צור קשר עם צוות הרשתות שלך ונסה לפתור אותן.
הסיבה: שרת ה-proxy ל-Envoy לא מצליח לתקשר עם מתאם Apigee ל-Envoy
אבחון
כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:
מוודאים שהפעלתם יומני ניפוי באגים ב-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
- בודקים את מתאם 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
. - יכולות להיות כמה סיבות לכך
connection failure
. נבחן כל אחד מהתרחישים.
תרחיש מס' 1: תהליך המתאם לא פועל
אם תהליך מתאם Apigee ל-Envoy לא פועל, השגיאה הזו יכולה להתרחש.
- מוודאים שתהליך Apigee Adapter ל-Envoy פועל על ידי ביצוע הפעולות הבאות
הפקודה. אם תהליך Apigee Adapter ל-Envoy פועל, תתקבל התוצאה הבאה
צריך לרשום אותו.
ps -ef | grep apigee-remote-service-envoy
- אם הוא לא פועל, זו הסיבה לבעיה.
רזולוציה
- אם תהליך Apigee Adapter ל-Envoy לא פועל, מתחילים את מתאם Apigee ל-Envoy.
- צריך לשלוח בקשת 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, ייתכן שזו הסיבה לבעיה.
רזולוציה
- צריך להפסיק את מתאם Apigee ל-Envoy ולהפעיל אותו שוב.
- צריך לשלוח בקשת API נוספת ולוודא שהבעיה נפתרה.
תרחיש מס' 3: קישוריות רשת בין Envoy ו-Apigee Adapter ל-Envoy
- אימות קישוריות הרשת בין 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 '^]'.
- אם מופיעה שגיאה
Connection timed out
ב-telnet, סימן יש בעיית קישוריות רשת בין Envoy לבין Apigee Adapter for Envoy.
רזולוציה
אם תיתקלו בבעיות קישוריות רשת בין Envoy ל-Apigee Adapter for Envoy, תוכלו לפנות לצוות הרשתות שלכם ולנסות לפתור את הבעיה.
אם הבעיה עדיין נמשכת, עוברים אל חובה לאסוף את פרטי האבחון.
חובה לאסוף פרטי אבחון
אם הבעיה נמשכת לאחר ביצוע ההוראות שלמעלה, יש לאסוף את האבחון הבא ולאחר מכן יוצרים קשר עם התמיכה של Apigee Edge:
-
מוצר Apigee שנעשה בו שימוש:
דוגמה: Apigee Edge Cloud, Apigee OPDK, Apigee hybrid, Apigee X
- הארגון והסביבה ב-Apigee
קריאה של הגדרת מוצר API באמצעות Edge API:
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
חומר עזר: ממשקי API של Apigee Edge
מתחילים סשן מעקב ב-proxy ל-API
remote-service
באמצעות ממשק המשתמש ב-Apigee Edge. משחזרים את הבעיה ומשתפים את קובץ ה-XML של סשן Trace.חומר עזר: שימוש בכלי המעקב | Apigee Edge
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
- בקשת API שנשלחה לשרת ה-proxy של Envoy באמצעות פקודת
curl
(הפלט המלא של הפקודהcurl
):curl -v ENVOY_PROXY_ENDPOINT
- בקשת API שנשלחה לשירות היעד באמצעות פקודת
curl
(הפקודה המלאה הפלט של הפקודהcurl
):curl -v TARGET_SERVICE_ENDPOINT