شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
علامت
پروکسی Envoy هنگام فراخوانی از طریق Apigee Adapter برای 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 |
| مسیر URI سرویس هدف در محصول API وجود ندارد | مسیر URI سرویس هدف وجود ندارد یا در بخش منابع API به محصول API اضافه نشده است. | کاربران فضای ابری عمومی و خصوصی Edge |
| نام میزبان در محصول API وجود ندارد | نام میزبان داده شده در درخواست API کلاینت، در محصول API تحت اهداف سرویس راه دور Apigee وجود ندارد. | کاربران فضای ابری عمومی و خصوصی Edge |
| کلید API در هدر درخواست وجود ندارد | کلید API در هدر HTTP مربوط به x-api-key ارسال نشده است. | کاربران فضای ابری عمومی و خصوصی Edge |
| کلید API نامعتبر است | کلید API ارسال شده به عنوان بخشی از درخواست نامعتبر است. | کاربران فضای ابری عمومی و خصوصی Edge |
| آداپتور Apigee برای Envoy قادر به برقراری ارتباط با پروکسی API سرویس از راه دور نیست | آداپتور Apigee برای Envoy قادر به برقراری ارتباط با پروکسی API سرویس از راه دور نیست. | کاربران فضای ابری عمومی و خصوصی Edge |
| پروکسی Envoy قادر به برقراری ارتباط با آداپتور Apigee برای Envoy نیست | پروکسی Envoy قادر به برقراری ارتباط با آداپتور Apigee برای Envoy نیست | کاربران فضای ابری عمومی و خصوصی Edge |
قبل از اینکه شروع کنی
- تأیید کنید که پیام پاسخ
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
فعال کردن گزارشهای اشکالزدایی:
مطمئن شوید که گزارشهای اشکالزدایی (debug logs) را در Apigee Adapter for Envoy فعال کردهاید تا جزئیات بیشتری در مورد خطا ثبت شود. در غیر این صورت، Apigee Adapter for Envoy را متوقف کرده و دوباره آن را اجرا کنید و گزارشهای اشکالزدایی را با استفاده از دستور زیر فعال کنید:
apigee-remote-service-envoy -c config.yaml -l debug
علت: محصول API فعال نیست
این خطا زمانی رخ میدهد که محصول API خاص مورد استفاده توسط Envoy Proxy در محیط خاصی که فراخوانیهای API در آن فراخوانی میشوند، فعال نباشد.
تشخیص
برای تشخیص مشکل، مراحل زیر را انجام دهید:
- همانطور که در مرحله 2 بالا توضیح داده شد، گزارشهای اشکالزدایی را فعال کنید.
- لاگهای Apigee Adapter for 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 برای ثبت وقایع Envoy، به ثبت وقایع مراجعه کنید.
- اگر هنگام تأیید درخواست API این پیام را مشاهده کردید، به احتمال زیاد نشان میدهد که محصول API خاص برای محیطی که در آن فراخوانیهای API را انجام میدهید، فعال نیست.
- برای تأیید این موضوع مراحل زیر را انجام دهید:
- وارد رابط کاربری Edge شوید.
- در صفحه Publish > API products ، روی محصول API خاصی که برای پیکربندی Apigee Adapter برای Envoy استفاده کردهاید، کلیک کنید.
- تأیید کنید که محیط خاصی که در آن درخواستهای API را انجام میدهید، در محصول API فعال شده باشد.
- اگر محیط خاص در محصول API فعال نشده باشد، دلیل این مشکل همین است.
- اگر محیط خاص از قبل فعال شده است، در API Product به قسمت Cause: Missing target service URI path بروید.
وضوح تصویر
اگر محیط خاص در محصول API فعال نشده است، مراحل زیر را برای حل مشکل انجام دهید:
- وارد رابط کاربری Edge شوید.
- در صفحه Publish > API products ، روی محصول 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 for Envoy مشاهده کردید، پس علت این مشکل همین است. در غیر این صورت، به قسمت Cause: Missing hostname در محصول API بروید.
وضوح تصویر
اگر URI درخواست خاص برای هدف خاص به محصول API اضافه نشد، مراحل زیر را برای حل مشکل انجام دهید:
- وارد رابط کاربری Edge شوید.
- در صفحه Publish > API products ، روی محصول API خاصی که برای پیکربندی Apigee Adapter برای Envoy استفاده کردهاید، کلیک کنید.
- در صفحه محصولات API > نام محصول ، روی ویرایش کلیک کنید.
- در پنل منابع API ، آدرس درخواست API را به محصول API اضافه کنید.
- لاگهای Apigee Adapter for Envoy را زیر نظر بگیرید و منتظر بمانید تا Apigee Adapter for 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 for Envoy هنگام تأیید درخواست حاوی ورودی با پیام
no targets: HOSTNAME : PORT، علت مشکل همین است. در غیر این صورت، در هدر درخواست به قسمت Cause: Missing API key بروید.
وضوح تصویر
اگر ترکیب نام میزبان و پورت هدف به محصول API اضافه نشد، مراحل زیر را برای حل مشکل انجام دهید:
- وارد رابط کاربری Edge شوید.
- در صفحه Publish > API products ، روی محصول API خاصی که برای پیکربندی Apigee Adapter برای Envoy استفاده کردهاید، کلیک کنید.
- در صفحه محصولات API > نام محصول ، روی ویرایش کلیک کنید.
در پنجرهی اهداف سرویس از راه دور Apigee ، نام میزبان و پورت هدف را اضافه کنید و روی ذخیره کلیک کنید.
اگر بخش 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 for Envoy را رصد کنید و منتظر بمانید تا Apigee Adapter for Envoy محصول API بهروزرسانیشده را دریافت کند. پس از آن، یک درخواست API دیگر برای تأیید رفع مشکل ارسال کنید.
علت: فقدان کلید API در هدر درخواست
اگر کلید API به عنوان بخشی از هدرهای درخواست ارسال نشود، این خطا رخ خواهد داد.
تشخیص
برای تشخیص مشکل، مراحل زیر را انجام دهید:
- همانطور که در مرحله 2 بالا توضیح داده شد، گزارشهای اشکالزدایی را فعال کنید.
- لاگهای Apigee Adapter for 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 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 Key به
api-keyتغییر یافته است. در این حالت، باید API Key را به عنوان بخشی از هدرapi-keyارسال کنید. - اگر نام هدر کلید API پیشفرض تغییر کرده است، از کلاینت بخواهید از نام هدر کلید API بهروزرسانیشده استفاده کند و درخواست API دیگری ارسال کنید و بررسی کنید که آیا مشکل حل میشود یا خیر.
علت: کلید API نامعتبر
این خطا در صورتی رخ میدهد که کلید API نامعتبر به عنوان بخشی از هدر درخواست ارسال شود.
تشخیص
برای تشخیص مشکل، مراحل زیر را انجام دهید:
- همانطور که در مرحله 2 بالا توضیح داده شد، گزارشهای اشکالزدایی را فعال کنید.
- لاگهای Apigee Adapter for Envoy را بررسی کنید و مطمئن شوید که پیام
[permission denied]را در بخشAuthenticate errorمشاهده میکنید. این پیام معمولاً پس از دریافت کلید API توسط Adapter نمایش داده میشود که با پیام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 for Envoy حاوی ورودی گزارش با عبارت
[permission denied]در بخشAuthenticate errorباشد، نشان میدهد که کلید API ارسال شده به عنوان بخشی از درخواست نامعتبر است و علت مشکل است. در غیر این صورت، به قسمت «علت: 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 برای Envoy نتواند با سرویس از راه دور API Proxy ارتباط برقرار کند، در صورتی که میزبان سرویس از راه دور پیکربندی شده نامعتبر باشد.
تشخیص
برای تشخیص مشکل، مراحل زیر را انجام دهید:
- همانطور که در مرحله 2 بالا توضیح داده شد، گزارشهای اشکالزدایی را فعال کنید.
لاگهای Apigee Adapter for 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 برای Envoy قادر به برقراری ارتباط با پروکسی API سرویس از راه دور نبود زیرا نام میزبان ارائه شده در URL پروکسی API سرور راه دور معتبر نیست، همانطور که با خطای
no such hostنشان داده شده است.- اگر لاگهای Apigee Adapter for Envoy حاوی ورودی لاگی با پیام
no such hostباشند، پس علت مشکل همین است. در غیر این صورت، به قسمت «علت: پروکسی Envoy قادر به برقراری ارتباط با Apigee Adapter for Envoy نیست» بروید.
وضوح تصویر
اگر خطاهای فوق در لاگهای Apigee Adapter for Envoy نمایش داده میشوند، مراحل زیر را برای حل مشکل انجام دهید:
فایل پیکربندی Apigee Adapter for Envoy را بررسی کنید و تأیید کنید که URL پروکسی API سرویس از راه دور داده شده معتبر است.
اگر اینطور نیست، Apigee Adapter for Envoy را متوقف کنید، آدرس اینترنتی پروکسی API سرویس از راه دور را در فایل پیکربندی اصلاح کنید، Apigee Adapter for 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 مربوطه مستقر شده است. در غیر این صورت، پروکسی APIremote-serviceرا در محیط Edge مربوطه مستقر کرده و دوباره امتحان کنید. - اتصال شبکه بین آداپتور Apigee برای Envoy و نقطه پایانی پروکسی API
remote-serviceرا تأیید کنید. در صورت مشاهده هرگونه مشکل در اتصال شبکه، با تیم شبکه خود تماس بگیرید و سعی کنید مشکل را حل کنید.
علت: پروکسی 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 به دلیل
connection failureقادر به برقراری ارتباط با Apigee Adapter برای Envoy نبوده است. -
connection failureمیتواند دلایل مختلفی داشته باشد. بیایید به هر یک از سناریوها نگاهی بیندازیم.
سناریوی شماره ۱: فرآیند آداپتور اجرا نمیشود
اگر فرآیند Apigee Adapter for Envoy در حال اجرا نباشد، ممکن است این خطا رخ دهد.
- با اجرای دستور زیر، تأیید کنید که فرآیند Apigee Adapter for Envoy در حال اجرا است. اگر فرآیند Apigee Adapter for Envoy در حال اجرا باشد، نتیجه دستور زیر باید آن را فهرست کند.
ps -ef | grep apigee-remote-service-envoy
- اگر اجرا نشد، مشکل از همین جاست.
وضوح تصویر
- اگر فرآیند Apigee Adapter for Envoy در حال اجرا نیست، آن را اجرا کنید.
- درخواست API دیگری ارسال کنید و بررسی کنید که آیا مشکل برطرف شده است یا خیر.
سناریوی شماره ۲: فرآیند آداپتور به پورت خاص گوش نمیدهد
اگر فرآیند Apigee Adapter for Envoy به پورت خاص گوش ندهد، ممکن است این خطا رخ دهد.
اگر فرآیند Apigee Adapter for Envoy در حال اجرا است، تأیید کنید که یک سوکت روی پورت ۵۰۰۰ در حال گوش دادن است: APIGEE_ENVOY_ADAPTER_HOST :5000 . میتوانید دستور netstat را برای تأیید این موضوع اجرا کنید:
sudo netstat -lnp | grep 5000
خروجی نمونه:
sudo netstat -lnp | grep 5000 tcp6 0 0 :::5000 :::* LISTEN 1596530/./apigee-re
اگر هیچ سوکتی روی پورت ۵۰۰۰ در حال گوش دادن نباشد، میتواند دلیل این مشکل باشد.
وضوح تصویر
- آداپتور Apigee مخصوص Envoy را متوقف کرده و دوباره روشن کنید.
- درخواست API دیگری ارسال کنید و بررسی کنید که آیا مشکل برطرف شده است یا خیر.
سناریوی شماره ۳: اتصال شبکه بین Envoy و آداپتور Apigee برای Envoy
- اتصال شبکه بین Envoy و آداپتور Apigee را برای 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» را مشاهده کردید، این نشان میدهد که مشکلی در اتصال شبکه بین Envoy و Apigee Adapter برای Envoy وجود دارد.
وضوح تصویر
اگر هرگونه مشکل اتصال شبکه بین Envoy و Apigee Adapter for Envoy مشاهده کردید، لطفاً با تیم شبکه خود تماس بگیرید و سعی کنید مشکل را حل کنید.
اگر مشکل همچنان ادامه داشت، به «باید اطلاعات تشخیصی جمعآوری شود» بروید.
باید اطلاعات تشخیصی جمعآوری کند
اگر مشکل پس از دنبال کردن دستورالعملهای بالا همچنان ادامه داشت، اطلاعات تشخیصی زیر را جمعآوری کرده و سپس با پشتیبانی Apigee Edge تماس بگیرید:
محصول مورد استفاده Apigee:
مثال: Apigee Edge Cloud، Apigee OPDK، Apigee hybrid، Apigee X
- سازمان و محیط آپیجی
تعریف محصول API که با استفاده از Edge API خوانده میشود:
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
مرجع: API های Apigee Edge
با استفاده از رابط کاربری Apigee Edge، یک جلسه ردیابی در پروکسی API
remote-serviceشروع کنید. این مشکل را دوباره ایجاد کنید و فایل XML جلسه ردیابی را به اشتراک بگذارید.آداپتور 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به پروکسی Envoy ارسال شده است (خروجی کامل دستورcurl):curl -v ENVOY_PROXY_ENDPOINT
- یک درخواست API که با استفاده از دستور
curlبه سرویس هدف ارسال میشود (خروجی کامل دستورcurl):curl -v TARGET_SERVICE_ENDPOINT