אתם צופים במסמכי התיעוד של 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 Public Cloud וב-Edge Private Cloud |
| חסר נתיב URI של שירות היעד במוצר ה-API | נתיב ה-URI של שירות היעד חסר או לא נוסף למוצר ה-API בקטע API resources (משאבי API). | משתמשים ב-Edge Public Cloud וב-Edge Private Cloud |
| חסר שם מארח במוצר ה-API | שם המארח שצוין בבקשת ה-API של הלקוח חסר במוצר ה-API בקטע Apigee remote service targets. | משתמשים ב-Edge Public Cloud וב-Edge Private Cloud |
| מפתח API חסר בכותרת הבקשה | מפתח ה-API לא מועבר בכותרת ה-HTTP x-api-key. |
משתמשים ב-Edge Public Cloud וב-Edge Private Cloud |
| מפתח API לא תקין | מפתח ה-API שהועבר כחלק מהבקשה לא תקין. | משתמשים ב-Edge Public Cloud וב-Edge Private Cloud |
| ל-Apigee Adapter ל-Envoy אין אפשרות לתקשר עם proxy ל-API של שירות מרוחק | ל-Apigee Adapter ל-Envoy אין אפשרות לתקשר עם proxy ל-API של שירות מרוחק. | משתמשים ב-Edge Public Cloud וב-Edge Private Cloud |
| שרת ה-proxy של Envoy לא מצליח לתקשר עם Apigee Adapter ל-Envoy | שרת ה-proxy של Envoy לא מצליח לתקשר עם Apigee Adapter ל-Envoy | משתמשים ב-Edge Public Cloud וב-Edge Private Cloud |
לפני שמתחילים
- מוודאים שמקבלים את הודעת התגובה
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 Adapter ל-Envoy כדי לתעד פרטים נוספים על השגיאה. אם לא, מפסיקים את Apigee Adapter ל-Envoy ומפעילים אותו מחדש, ומפעילים יומני ניפוי באגים באמצעות הפקודה הבאה:
apigee-remote-service-envoy -c config.yaml -l debug
הגורם: מוצר ה-API לא מופעל
השגיאה הזו תתרחש אם מוצר ה-API הספציפי שבו נעשה שימוש ב-Envoy Proxy לא מופעל בסביבה הספציפית שבה מופעלות הקריאות ל-API.
אבחון
כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:
- מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 2 למעלה.
- בודקים את היומנים של Apigee Adapter ל-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 Adapter ל-Envoy.מידע נוסף על רישום ביומן של Apigee Adapter ל-Envoy זמין במאמר בנושא רישום ביומן.
- אם ההודעה הזו מופיעה בזמן אישור הבקשה ל-API, סביר להניח שמוצר ה-API הספציפי לא מופעל בסביבה ספציפית שבה מתבצעות הקריאות ל-API.
- כדי לאמת את זה, פועלים לפי השלבים הבאים:
- מתחברים אל ממשק המשתמש של Edge.
- בדף Publish > API products (פרסום > מוצרי API), לוחצים על מוצר ה-API הספציפי שבו השתמשתם כדי להגדיר את Apigee Adapter ל-Envoy.
- מוודאים שהסביבה הספציפית שבה אתם שולחים את בקשות ה-API מופעלת במוצר ה-API.
- אם הסביבה הספציפית לא מופעלת במוצר ה-API, זו הסיבה לבעיה.
- אם הסביבה הספציפית כבר מופעלת, עוברים אל הגורם: חסר נתיב של מזהה URI של שירות היעד במוצר ה-API.
רזולוציה
אם הסביבה הספציפית לא מופעלת במוצר ה-API, צריך לבצע את השלבים הבאים כדי לפתור את הבעיה:
- מתחברים אל ממשק המשתמש של Edge.
- בדף Publish > API products (פרסום > מוצרי API), לוחצים על מוצר ה-API הספציפי שבו השתמשתם כדי להגדיר את Apigee Adapter ל-Envoy.
- בדף מוצרי API > שם המוצר, לוחצים על עריכה.
- מסמנים את תיבת הסימון של הסביבה הרלוונטית כדי להפעיל את הסביבה הספציפית שבה רוצים לשלוח בקשות API.
- לוחצים על שמירה.
הסיבה: נתיב URI של שירות היעד חסר במוצר ה-API
השגיאה הזו תתרחש אם נתיב ה-URI של היעד לא צוין במוצר ה-API הספציפי שבו נעשה שימוש ב-Envoy Proxy.
אבחון
כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:
- מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 2 למעלה.
-
בודקים את היומנים של Apigee Adapter for 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.
- בדף Publish > API products (פרסום > מוצרי API), לוחצים על מוצר ה-API הספציפי שבו השתמשתם כדי להגדיר את Apigee Adapter ל-Envoy.
- בדף מוצרי API > שם המוצר, לוחצים על עריכה.
- בחלונית API resources, מוסיפים את מזהה ה-URI של בקשת ה-API למוצר ה-API.
- עוקבים אחרי היומנים של Apigee Adapter ל-Envoy וממתינים עד ש-Apigee Adapter ל-Envoy יאחזר את מוצר ה-API המעודכן. לאחר מכן, שולחים בקשת API נוספת כדי לאמת את התיקון.
הגורם: חסר שם מארח במוצר ה-API
השגיאה הזו תופיע אם לא מוסיפים את השילוב של שם המארח ויציאת היעד למוצר ה-API הספציפי שבו נעשה שימוש ב-Envoy Proxy.
אבחון
כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:
- מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 2 למעלה.
בודקים את היומנים של Apigee Adapter for 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.
- בדף Publish > API products (פרסום > מוצרי API), לוחצים על מוצר ה-API הספציפי שבו השתמשתם כדי להגדיר את Apigee Adapter ל-Envoy.
- בדף מוצרי API > שם המוצר, לוחצים על עריכה.
בחלונית Apigee remote service targets (יעדים של שירותים מרוחקים ב-Apigee), מוסיפים את שם המארח ואת היציאה של היעד ולוחצים על Save (שמירה).
אם הקטע Apigee remote service targets לא מופיע בממשק המשתמש, צריך להוסיף מאפיין מותאם אישית למוצר ה-API עם השם
apigee-remote-service-targetsולהוסיף את הערך HOSTNAME:PORT באמצעות 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 Adapter ל-Envoy ומחכים עד ש-Apigee Adapter ל-Envoy יאחזר את מוצר ה-API המעודכן. לאחר מכן, שולחים בקשת API נוספת כדי לאמת את התיקון.
הסיבה: מפתח API חסר בכותרת הבקשה
השגיאה הזו מתרחשת אם מפתח ה-API לא מועבר כחלק מכותרות הבקשה.
אבחון
כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:
- מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 2 למעלה.
- בודקים את היומנים של Apigee Adapter ל-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. - בודקים את קובץ ההגדרות של Apigee Adapter ל-Envoy ומוודאים ששם הכותרת של מפתח ה-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 Adapter ל-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 for Envoy, צריך לבצע את השלבים הבאים כדי לפתור את הבעיה:
- בודקים את מפתח ה-API שנשלח בבקשת ה-API מול הערך של מפתח ה-API שנמצא באפליקציה שמחוברת למוצר ה-API.
- אם מפתח ה-API שבו הלקוח משתמש לא תקין, צריך לבקש מהלקוח לשלוח את מפתח ה-API התקין.
- אם מפתח ה-API שבו הלקוח משתמש תקין, אבל עדיין מוצגת שגיאת HTTP
403, צריך לפנות אל התמיכה של Apigee Edge כדי לבדוק את הבעיה לעומק.
הסיבה: Apigee Adapter ל-Envoy לא מצליח לתקשר עם proxy ל-API של שירות מרוחק
השגיאה הזו תתרחש אם Apigee Adapter ל-Envoy לא יוכל לתקשר עם ה-proxy ל-API של השירות המרוחק, אם המארח של השירות המרוחק שהוגדר לא תקין.
אבחון
כדי לאבחן את הבעיה, מבצעים את השלבים הבאים:
- מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 2 למעלה.
-
בודקים את היומנים של Apigee Adapter ל-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 for Envoy לא הצליח לתקשר עם שרת ה-API הפרוקסי המרוחק כי שם המארח שצוין בכתובת ה-URL של שרת ה-API הפרוקסי המרוחק לא תקין, כפי שמצוין בשגיאה
no such host. - אם ביומני הרישום של Apigee Adapter ל-Envoy מופיעה רשומה עם ההודעה
no such host, זו הסיבה לבעיה. אם לא, עוברים אל הסיבה: שרת ה-Proxy של Envoy לא מצליח לתקשר עם Apigee Adapter ל-Envoy.
רזולוציה
אם השגיאות שלמעלה מוצגות ביומנים של Apigee Adapter ל-Envoy, צריך לבצע את השלבים הבאים כדי לפתור את הבעיה:
בודקים את קובץ ההגדרות של Apigee Adapter ל-Envoy ומוודאים שכתובת ה-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- מוודאים ש-
remote-serviceproxy ל-API נפרס בסביבת Edge הרלוונטית. אם לא, פורסים אתremote-serviceproxy ל-API בסביבת Edge הרלוונטית ומנסים שוב. - צריך לאמת את הקישוריות לרשת בין Apigee Adapter ל-Envoy לבין נקודת הקצה של proxy ל-API של
remote-service. אם נמצאו בעיות בחיבור לרשת, צריך לפנות לצוות הרשת ולנסות לפתור את הבעיה.
הסיבה: שרת ה-Proxy של Envoy לא מצליח לתקשר עם Apigee Adapter ל-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 Adapter ל-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 Adapter ל-Envoy בגלל הסיבה
connection failure. - יכולות להיות כמה סיבות ל
connection failure. עכשיו נבחן כל אחד מהתרחישים.
תרחיש מספר 1: תהליך המתאם לא פועל
השגיאה הזו יכולה להתרחש אם התהליך של Apigee Adapter ל-Envoy לא פועל.
- מריצים את הפקודה הבאה כדי לוודא שתהליך Apigee Adapter ל-Envoy פועל: אם התהליך של Apigee Adapter ל-Envoy פועל, הוא יופיע בתוצאה של הפקודה הבאה:
ps -ef | grep apigee-remote-service-envoy
- אם הוא לא פועל, זו הסיבה לבעיה.
רזולוציה
- אם התהליך של Apigee Adapter ל-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
אם אין שקע שמקשיב ליציאה 5000, יכול להיות שזו הסיבה לבעיה הזו.
רזולוציה
- עוצרים את Apigee Adapter ל-Envoy ומפעילים אותו מחדש.
- שולחים בקשת API נוספת ובודקים אם הבעיה נפתרה.
תרחיש מספר 3: קישוריות רשת בין Envoy לבין Apigee Adapter ל-Envoy
- מאמתים את החיבור לרשת בין Envoy לבין Apigee Adapter ל-Envoy:
ssh $ENVOY_HOST telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
אם telnet יכול ליצור חיבור TCP ל-Apigee Adapter ל-Envoy יוצג פלט שדומה לזה שמופיע בהמשך:
telnet $APIGEE_ENVOY_ADAPTER_HOST 5000 Trying ::1... Connected to localhost. Escape character is '^]'.
- אם השגיאה
Connection timed outמופיעה ב-telnet, סימן שיש בעיה בקישוריות לרשת בין Envoy לבין Apigee Adapter ל-Envoy.
רזולוציה
אם אתם רואים בעיות בחיבור לרשת בין Envoy לבין Apigee Adapter ל-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
מתחילים סשן של מעקב ב-
remote-serviceproxy ל-API באמצעות ממשק המשתמש של Apigee Edge. משחזרים את הבעיה ומשתפים את קובץ ה-XML של סשן המעקב.יומנים של 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 שנשלחה ל-Envoy proxy באמצעות פקודה
curl(הפלט המלא של הפקודהcurl):curl -v ENVOY_PROXY_ENDPOINT
- בקשת API שנשלחה לשירות היעד באמצעות פקודה
curl(הפלט המלא של הפקודהcurl):curl -v TARGET_SERVICE_ENDPOINT