شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
علامت
هنگام فراخوانی از طریق آداپتور Apigee برای Envoy، پروکسی Envoy با خطای HTTP 403 Forbidden
خراب می شود.
پیغام خطا
پیغام خطای زیر نمایش داده می شود:
HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Tue, 03 Nov 2020 00:20:10 GMT server: istio-envoy
علل احتمالی
اگر یکی از شرایط زیر رخ دهد، پروکسی Envoy یک خطای HTTP 403
ایجاد می کند:
علت | توضیحات | دستورالعمل های عیب یابی قابل اجرا برای |
---|---|---|
محصول API فعال نیست | محصول API برای محیط خاصی فعال نیست. | کاربران Edge Public و Private Cloud |
مسیر URI سرویس هدف در محصول API وجود ندارد | مسیر URI سرویس هدف وجود ندارد یا به محصول API تحت منابع API اضافه نشده است. | کاربران Edge Public و Private Cloud |
نام میزبان در محصول API وجود ندارد | نام میزبان داده شده در درخواست API مشتری در محصول API در اهداف خدمات راه دور Apigee وجود ندارد. | کاربران Edge Public و Private Cloud |
کلید API در سرصفحه درخواست وجود ندارد | کلید API در هدر HTTP x-api-key ارسال نمی شود. | کاربران Edge Public و Private Cloud |
کلید API نامعتبر است | کلید API ارسال شده به عنوان بخشی از درخواست نامعتبر است. | کاربران Edge Public و Private Cloud |
Apigee Adapter for Envoy قادر به برقراری ارتباط با پراکسی API سرویس از راه دور نیست. | آداپتور Apigee برای Envoy قادر به برقراری ارتباط با پراکسی API سرویس راه دور نیست. | کاربران Edge Public و Private Cloud |
پروکسی Envoy قادر به برقراری ارتباط با آداپتور Apigee برای Envoy نیست | پروکسی Envoy قادر به برقراری ارتباط با آداپتور Apigee برای Envoy نیست | کاربران Edge Public و Private Cloud |
قبل از شروع
- بررسی کنید که پیام پاسخ
403 Forbidden
را از پروکسی 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 for Envoy فعال کردهاید تا جزئیات بیشتری در مورد خطا ثبت شود. اگر نه، Apigee Adapter for 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
نمونه خروجی Log Debug:
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 for Envoy یافت نشد.برای اطلاعات بیشتر در مورد Apigee Adapter for Envoy logging، به Logging مراجعه کنید.
- اگر هنگام تأیید درخواست API، این پیام را مشاهده کردید، به احتمال زیاد نشان میدهد که محصول API خاص برای محیط خاصی که در آن تماسهای API را برقرار میکنید فعال نیست.
- برای تایید این موضوع مراحل زیر را انجام دهید:
- وارد رابط کاربری Edge شوید.
- در صفحه انتشار > محصولات API ، روی محصول API خاصی که برای پیکربندی Apigee Adapter برای Envoy استفاده کردید، کلیک کنید.
- بررسی کنید که محیط خاصی که در آن درخواست های API را انجام می دهید، در محصول API فعال باشد.
- اگر محیط خاصی در محصول API فعال نباشد، دلیل این مشکل همین است.
- اگر محیط خاصی از قبل فعال شده است، سپس به مسیر URI سرویس هدف از دست رفته در محصول API بروید.
قطعنامه
اگر محیط خاصی در محصول API فعال نیست، مراحل زیر را برای حل مشکل انجام دهید:
- وارد رابط کاربری Edge شوید.
- در صفحه انتشار > محصولات API ، روی محصول API خاصی که برای پیکربندی Apigee Adapter برای Envoy استفاده کردید، کلیک کنید.
- در صفحه محصولات API > نام محصول ، روی ویرایش کلیک کنید.
- با انتخاب کادر انتخاب محیط مربوطه، محیط خاصی را که میخواهید در آن درخواستهای API انجام دهید، فعال کنید.
- روی ذخیره کلیک کنید.
علت: مسیر URI سرویس هدف در محصول API وجود ندارد
اگر مسیر URI هدف در محصول API خاص مورد استفاده توسط Envoy Proxy مشخص نشده باشد، این خطا رخ می دهد.
تشخیص
برای تشخیص مشکل مراحل زیر را انجام دهید:
- همانطور که در مرحله 2 در بالا توضیح داده شد، گزارش های اشکال زدایی را فعال کنید.
آداپتور Apigee برای گزارشهای Envoy را بررسی کنید و بررسی کنید که پیام زیر برای محصول API خاص مرتبط با یک هدف خاص در بخش
Authorizing request
نمایش داده میشود:no path: REQUEST_URI_PATH
نمونه خروجی Log Debug:
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 for Envoy مشاهده کردید، دلیل این مشکل همین است. اگر نه، به علت: نام میزبان گم شده در محصول API بروید.
قطعنامه
اگر URI درخواست خاصی برای هدف خاص به محصول API اضافه نشده است، مراحل زیر را برای حل مشکل انجام دهید:
- وارد رابط کاربری Edge شوید.
- در صفحه انتشار > محصولات API ، روی محصول API خاصی که برای پیکربندی Apigee Adapter برای Envoy استفاده کردید، کلیک کنید.
- در صفحه محصولات API > نام محصول ، روی ویرایش کلیک کنید.
- در قسمت منابع API ، URI درخواست API را به محصول API اضافه کنید.
- گزارشهای Apigee Adapter for Envoy را زیر نظر داشته باشید و منتظر بمانید تا Apigee Adapter for Envoy محصول بهروزرسانیشده API را واکشی کند. پس از آن، یک درخواست API دیگر برای تأیید رفع مشکل ارسال کنید.
علت: نام میزبان در محصول API وجود ندارد
اگر ترکیب نام میزبان و پورت هدف به محصول API خاصی که توسط Envoy Proxy استفاده میشود، اضافه نشود، این خطا رخ میدهد.
تشخیص
برای تشخیص مشکل مراحل زیر را انجام دهید:
- همانطور که در مرحله 2 در بالا توضیح داده شد، گزارش های اشکال زدایی را فعال کنید.
آداپتور Apigee برای گزارشهای Envoy را بررسی کنید و بررسی کنید که پیام زیر برای محصول API خاص مرتبط با یک هدف خاص در بخش
Authorizing request
نمایش داده میشود:no targets: HOSTNAME:PORT
نمونه خروجی Log Debug:
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 for Envoy حاوی ورودی با پیام
no targets: HOSTNAME : PORT
در حین تأیید درخواست، دلیل این مشکل است. اگر نه، به Cause: Missing API key در سرصفحه درخواست بروید.
قطعنامه
اگر ترکیب نام میزبان و پورت هدف به محصول API اضافه نشده است، مراحل زیر را برای حل مشکل انجام دهید:
- وارد رابط کاربری Edge شوید.
- در صفحه انتشار > محصولات API ، روی محصول API خاصی که برای پیکربندی Apigee Adapter برای Envoy استفاده کردید، کلیک کنید.
- در صفحه محصولات API > نام محصول ، روی ویرایش کلیک کنید.
در بخش اهداف سرویس راه دور Apigee ، نام میزبان و پورت مورد نظر را اضافه کنید و روی ذخیره کلیک کنید.
اگر بخش اهداف سرویس از راه دور Apigee را در رابط کاربری نمیبینید، یک ویژگی سفارشی با نام
apigee-remote-service-targets
به محصول API اضافه کنید و با استفاده از Edge API مقدار HOSTNAME : PORT اضافه کنید. به عنوان مثال: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 for Envoy را بررسی کنید و منتظر بمانید تا Apigee Adapter for Envoy محصول API به روز شده را واکشی کند. پس از آن، یک درخواست API دیگر برای تأیید رفع مشکل ارسال کنید.
علت: از دست رفتن کلید API در هدر درخواست
اگر کلید API به عنوان بخشی از هدر درخواست ارسال نشود، این خطا رخ می دهد.
تشخیص
برای تشخیص مشکل مراحل زیر را انجام دهید:
- همانطور که در مرحله 2 در بالا توضیح داده شد، گزارش های اشکال زدایی را فعال کنید.
- آداپتور Apigee برای گزارشهای Envoy را بررسی کنید و بررسی کنید که پیام
[missing authentication]
را در بخشAuthenticate error
میبینید.نمونه خروجی Log Debug:
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 for Envoy حاوی یک ورودی گزارش با پیام
[missing authentication]
در زیر بخشAuthenticate error
باشد، این دلیل مشکل است. اگر نه، به Cause: Invalid API key بروید.
قطعنامه
اگر خطای [missing authentication]
در گزارشهای Apigee Adapter for Envoy نمایش داده شد، مراحل زیر را برای حل مشکل انجام دهید:
- بررسی کنید که آیا کلاینت کلید API را با استفاده از هدر HTTP
x-api-key
در درخواست API ارسال کرده است. اگر نه، از مشتری درخواست کنید که کلید API را در هدر HTTPx-api-key
ارسال کند. - فایل پیکربندی Apigee Adapter for 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 برای گزارشهای Envoy را بررسی کنید و بررسی کنید که پیام
[permission denied]
را در بخشAuthenticate error
مشاهده میکنید. این معمولاً پس از واکشی کلید API توسط آداپتور نمایش داده می شود که با پیامfetchToken fetching: API_KEY
.نمونه خروجی Log Debug:
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 for Envoy دارای یک ورودی گزارش با
[permission denied]
در قسمتAuthenticate error
باشد، نشان میدهد که کلید API ارسال شده به عنوان بخشی از درخواست نامعتبر است و دلیل مشکل است. اگر نه، به Cause بروید: Apigee Adapter for Envoy قادر به برقراری ارتباط با پراکسی API از راه دور نیست .
قطعنامه
اگر پیام [permission denied]
در بخش Authenticate error
در گزارشهای Apigee Adapter for Envoy مشاهده شد، مراحل زیر را برای حل مشکل انجام دهید:
- کلید API ارسال شده در درخواست API را با مقدار کلید API موجود در برنامه متصل به محصول API بررسی کنید.
- اگر کلید API استفاده شده توسط مشتری معتبر نیست، از مشتری درخواست کنید تا کلید API معتبر ارسال کند.
- اگر کلید API استفاده شده توسط مشتری معتبر است و اگر همچنان خطای HTTP
403
را مشاهده میکنید، لطفاً برای بررسی بیشتر با پشتیبانی Apigee Edge تماس بگیرید.
علت: آداپتور Apigee برای Envoy قادر به برقراری ارتباط با پراکسی API سرویس از راه دور نیست.
اگر Apigee Adapter for Envoy نتواند با پراکسی API سرویس راه دور ارتباط برقرار کند، اگر میزبان سرویس راه دور پیکربندی شده نامعتبر باشد، این خطا رخ خواهد داد.
تشخیص
برای تشخیص مشکل مراحل زیر را انجام دهید:
- همانطور که در مرحله 2 در بالا توضیح داده شد، گزارش های اشکال زدایی را فعال کنید.
آداپتور Apigee برای گزارشهای Envoy را بررسی کنید و بررسی کنید که پیام زیر را مشاهده میکنید:
Error retrieving products: REQUEST_URI: no such host
نمونه خروجی Log Debug:
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 پروکسی سرور راه دور معتبر نیست، همانطور که با خطای
no such host
نشان داده شده است.- اگر لاگهای Apigee Adapter for Envoy حاوی یک ورودی گزارش با پیام
no such host
است، دلیل این مشکل همین است. اگر نه، به Cause بروید: پروکسی Envoy قادر به برقراری ارتباط با Apigee Adapter برای Envoy نیست .
قطعنامه
اگر خطاهای بالا در لاگ های Apigee Adapter for Envoy نمایش داده می شوند، مراحل زیر را برای حل مشکل انجام دهید:
فایل پیکربندی Apigee Adapter for Envoy را بررسی کنید و تأیید کنید که URL پروکسی API سرویس راه دور ارائه شده معتبر است.
اگر نه، Apigee Adapter for 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 مربوطه مستقر شده باشد. اگر نه، پراکسیremote-service
API را در محیط Edge مربوطه مستقر کرده و دوباره آن را امتحان کنید. - اتصال شبکه بین آداپتور Apigee for Envoy و نقطه پایانی پراکسی API
remote-service
را تأیید کنید. اگر مشکلی در اتصال شبکه یافت شد، با تیم شبکه خود تماس بگیرید و سعی کنید مشکل را حل کنید.
علت: پروکسی 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 برای گزارشهای Envoy را بررسی کنید و بررسی کنید که یک ورودی گزارش با این پیام وجود دارد:
connecting to APIGEE_ENVOY_ADAPTER_HOST:5000
که پس از آن:
upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
نمونه خروجی Log Debug:
[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 به دلیل
connection failure
قادر به برقراری ارتباط با Apigee Adapter برای Envoy نبود. -
connection failure
می تواند به دلایل مختلفی باشد. بیایید به هر یک از سناریوها نگاه کنیم.
سناریوی شماره 1: فرآیند آداپتور در حال اجرا نیست
اگر فرآیند Apigee Adapter for Envoy در حال اجرا نباشد، ممکن است این خطا رخ دهد.
- با اجرای دستور زیر اطمینان حاصل کنید که فرآیند Apigee Adapter for Envoy در حال اجرا است. اگر فرآیند Apigee Adapter for Envoy در حال اجرا است، نتیجه دستور زیر باید آن را فهرست کند.
ps -ef | grep apigee-remote-service-envoy
- اگر اجرا نمی شود، دلیل این مشکل است.
قطعنامه
- اگر فرآیند Apigee Adapter for Envoy در حال اجرا نیست، Apigee Adapter for Envoy را اجرا کنید.
- درخواست API دیگری انجام دهید و بررسی کنید که آیا مشکل برطرف شده است.
سناریوی شماره 2: فرآیند آداپتور در پورت خاص گوش نمی دهد
اگر فرآیند Apigee Adapter for Envoy به پورت خاصی گوش نمی دهد، ممکن است این خطا رخ دهد.
اگر فرآیند Apigee Adapter for 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 را برای Envoy متوقف کنید و دوباره آن را شروع کنید.
- درخواست API دیگری انجام دهید و بررسی کنید که آیا مشکل برطرف شده است.
سناریوی شماره 3: اتصال شبکه بین Envoy و Apigee Adapter for Envoy
- بررسی اتصال شبکه بین Envoy و Apigee Adapter for Envoy:
ssh $ENVOY_HOST telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
اگر telnet بتواند یک اتصال TCP به Apigee Adapter for Envoy ایجاد کند، خروجی مشابه زیر نمایش داده می شود:
telnet $APIGEE_ENVOY_ADAPTER_HOST 5000 Trying ::1... Connected to localhost. Escape character is '^]'.
- اگر خطای
Connection timed out
، نشان می دهد که مشکل اتصال شبکه بین 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
مرجع: Apigee Edge APIs
با استفاده از رابط کاربری Apigee Edge یک جلسه ردیابی را در پراکسی API
remote-service
شروع کنید. این مشکل را دوباره تولید کنید و فایل XML Trace session را به اشتراک بگذارید.آداپتور Apigee برای گزارشهای 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 با استفاده از دستور
curl
(خروجی کامل دستورcurl
) به پروکسی Envoy ارسال میشود:curl -v ENVOY_PROXY_ENDPOINT
- یک درخواست API با استفاده از دستور
curl
(خروجی کامل دستورcurl
) به سرویس هدف ارسال می شود:curl -v TARGET_SERVICE_ENDPOINT