כרגע מוצג התיעוד של 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 Adapter ל-Envoy לא יכול לתקשר עם שרת proxy של API לשירות מרוחק | Apigee Adapter ל-Envoy לא יכול לתקשר עם שרת ה-API של השירות המרוחק. | משתמשי Edge הציבוריים והפרטיים |
לשרת proxy ל-Envoy אין אפשרות לתקשר עם Apigee Adapter ל-Envoy | שרת ה-proxy של Envoy לא יכול לתקשר עם Apigee Adapter ל-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 Adapter ל-Envoy כדי לתעד פרטים נוספים על השגיאה. אם לא, מפסיקים את השימוש ב-Apigee Adapter ל-Envoy ומפעילים אותו שוב, ואז מפעילים יומני ניפוי באגים באמצעות הפקודה הבאה:
apigee-remote-service-envoy -c config.yaml -l debug
הסיבה: מוצר ה-API לא מופעל
השגיאה הזו תופיע אם מוצר ה-API הספציפי שבו משתמש שרת ה-Proxy של Envoy לא מופעל בסביבה הספציפית שבה מופעלות קריאות ל-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 זמין במאמר Logging.
- אם ההודעה הזו מופיעה בזמן מתן הרשאה לבקשת ה-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 הספציפי שבו משתמש שרת ה-proxy של Envoy.
אבחון
כדי לאבחן את הבעיה:
- מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 2 למעלה.
-
צריך לבדוק את Apigee Adapter ליומני 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 למוצר.
- בודקים את המתאם של Apigee ליומני Envoy וממתינים עד ש-Apigee Adapter ל-Envoy יאחזר את מוצר ה-API המעודכן. אחר כך, צריך לשלוח בקשת API נוספת כדי לאמת את התיקון.
הסיבה: שם מארח חסר במוצר ה-API
השגיאה תופיע אם לא מוסיפים את השילוב של שם המארח של היעד והיציאה למוצר ה-API הספציפי שבו משתמש ה-Envoy Proxy.
אבחון
כדי לאבחן את הבעיה:
- מפעילים יומני ניפוי באגים כמו שמוסבר בשלב 2 למעלה.
צריך לבדוק את Apigee Adapter ליומני 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, מוסיפים את שם המארח של היעד ואת היציאה שלו, ולוחצים על Save.
אם הקטע יעדי שירות מרוחקים של Apigee לא מופיע בממשק המשתמש, מוסיפים מאפיין מותאם אישית למוצר ה-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 ולוודא שהשם של הכותרת
x-api-key
שמשמש כברירת המחדל של מפתח ה-API השתנה. לדוגמה: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 ליומני Envoy, צריך לבצע את הפעולות הבאות כדי לפתור את הבעיה:
- צריך לבדוק בין מפתח ה-API שנשלח בבקשת ה-API לבין הערך של מפתח ה-API שנמצא באפליקציה שמקושרת למוצר ה-API.
- אם מפתח ה-API שבו הלקוח משתמש אינו חוקי, מבקשים מהלקוח לשלוח את מפתח ה-API החוקי.
- אם מפתח ה-API שבו הלקוח משתמש תקין ואם עדיין מופיעה שגיאת HTTP
403
, כדאי ליצור קשר עם התמיכה של Apigee Edge כדי לבדוק את הבעיה.
הסיבה: Apigee Adapter ל-Envoy לא יכול לתקשר עם שרת proxy של API לשירות מרוחק
השגיאה הזו תופיע אם Apigee Adapter ל-Envoy לא יכול לתקשר עם שרת ה-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 ל-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 שצוינה לשרת ה-API של השירות מרחוק תקינה.
אם לא, עליכם להפסיק את השימוש ב-Apigee Adapter ל-Envoy, לתקן את כתובת ה-URL של שרת ה-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
- צריך לוודא ששרת ה-API של
remote-service
נפרס בסביבת Edge הרלוונטית. אם לא, צריך לפרוס את שרת ה-Proxy שלremote-service
API בסביבת Edge הרלוונטית ולנסות שוב. - בודקים את הקישוריות לרשת בין Apigee Adapter ל-Envoy לבין נקודת הקצה של ה-API מסוג
remote-service
של שרת ה-API. אם יש בעיות בקישוריות הרשת, פנו לצוות הרישות ונסו לפתור אותן.
הסיבה: שרת ה-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 לא פועל, צריך להפעיל את 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
אם אין האזנה ל-socket ביציאה 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
מתחילים סשן מעקב בשרת proxy ל-API של
remote-service
באמצעות ממשק המשתמש של 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 שנשלחה לשרת ה-proxy של Envoy באמצעות פקודת
curl
(הפלט המלא של הפקודהcurl
):curl -v ENVOY_PROXY_ENDPOINT
- בקשת API שנשלחה לשירות היעד באמצעות פקודת
curl
(הפלט המלא של הפקודהcurl
):curl -v TARGET_SERVICE_ENDPOINT