أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
المشكلة
يتعذّر تنفيذ Envoy Proxy مع ظهور الخطأ 403 Forbidden في HTTP عند استدعائه من خلال
محوّل Apigee لـ 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
الأسباب المحتملة
سيعرض خادم وكيل Envoy الخطأ 403 في HTTP إذا تحقّق أحد الشرطين التاليين:
| السبب | الوصف | تعليمات تحديد المشاكل وحلّها التي تنطبق على |
|---|---|---|
| لم يتم تفعيل منتج واجهة برمجة التطبيقات | لم يتم تفعيل منتج واجهة برمجة التطبيقات للبيئة المحدّدة. | مستخدمو Edge Public Cloud وEdge Private Cloud |
| مسار معرّف الموارد المنتظم (URI) للخدمة المستهدَفة غير متوفّر في "منتج واجهة برمجة التطبيقات" | مسار معرّف الموارد المنتظم (URI) للخدمة المستهدَفة غير متوفّر أو لم تتم إضافته إلى منتج واجهة برمجة التطبيقات ضمن موارد واجهة برمجة التطبيقات. | مستخدمو Edge Public Cloud وEdge Private Cloud |
| اسم المضيف غير متوفّر في منتج واجهة برمجة التطبيقات | اسم المضيف المقدَّم في طلب البيانات من واجهة برمجة التطبيقات للعميل غير متوفّر في منتج واجهة برمجة التطبيقات ضمن أهداف الخدمة البعيدة في Apigee. | مستخدمو Edge Public Cloud وEdge Private Cloud |
| مفتاح واجهة برمجة التطبيقات غير متوفّر في عنوان الطلب | لم يتم تمرير مفتاح واجهة برمجة التطبيقات في عنوان HTTP x-api-key. |
مستخدمو Edge Public Cloud وEdge Private Cloud |
| مفتاح واجهة برمجة التطبيقات غير صالح | مفتاح واجهة برمجة التطبيقات الذي تم تمريره كجزء من الطلب غير صالح. | مستخدمو Edge Public Cloud وEdge Private Cloud |
| تعذُّر تواصل "محوّل Apigee" لـ Envoy مع خادم وكيل لواجهة برمجة التطبيقات الخاصة بالخدمة البعيدة | يتعذّر على "محوّل Apigee" لـ Envoy الاتصال بخادم وكيل لواجهة برمجة التطبيقات للخدمة البعيدة. | مستخدمو Edge Public Cloud وEdge Private Cloud |
| تعذُّر تواصل خادم Envoy الوكيل مع "محوّل Apigee" لـ Envoy | تعذُّر اتصال الخادم الوكيل Envoy بـ "محوّل Apigee" لـ Envoy | مستخدمو Edge Public Cloud وEdge 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
السبب: لم يتم تفعيل منتج واجهة برمجة التطبيقات
سيحدث هذا الخطأ إذا لم يتم تفعيل منتج واجهة برمجة التطبيقات المحدّد الذي يستخدمه Envoy Proxy في البيئة المحدّدة التي يتم فيها استدعاء طلبات البيانات من واجهة برمجة التطبيقات.
التشخيص
يُرجى اتّباع الخطوات التالية لتشخيص المشكلة:
- فعِّل سجلّات تصحيح الأخطاء كما هو موضّح في الخطوة 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
يوضّح المثال أعلاه أنّه لم يتم العثور على منتج واجهة برمجة التطبيقات
ENVOY-PRODUCT-1في Apigee Adapter for Envoy.لمزيد من المعلومات حول تسجيل "محوّل Apigee" لـ Envoy، راجِع التسجيل.
- إذا ظهرت لك هذه الرسالة أثناء منح الإذن بطلب البيانات من واجهة برمجة التطبيقات، فهذا يشير على الأرجح إلى أنّ منتج واجهة برمجة التطبيقات المحدّد غير مفعّل في بيئة معيّنة تُجري فيها طلبات البيانات من واجهة برمجة التطبيقات.
- اتّبِع الخطوات التالية للتحقّق من ذلك:
- سجِّل الدخول إلى واجهة مستخدم Edge.
- في صفحة نشر > منتجات واجهة برمجة التطبيقات، انقر على منتج واجهة برمجة التطبيقات المحدّد الذي استخدمته لإعداد Apigee Adapter for Envoy.
- تأكَّد من تفعيل البيئة المحدّدة التي تُرسِل فيها طلبات واجهة برمجة التطبيقات في منتج واجهة برمجة التطبيقات.
- إذا لم يتم تفعيل البيئة المحدّدة في "منتج واجهة برمجة التطبيقات"، سيكون ذلك هو سبب هذه المشكلة.
- إذا كانت البيئة المحدّدة مفعَّلة، انتقِل إلى السبب: مسار عنوان URI الخاص بالخدمة المستهدَفة غير متوفّر في منتج واجهة برمجة التطبيقات.
الدقة
إذا لم تكن البيئة المحدّدة مفعّلة في منتج واجهة برمجة التطبيقات، اتّبِع الخطوات التالية لحلّ المشكلة:
- سجِّل الدخول إلى واجهة مستخدم Edge.
- في صفحة نشر > منتجات واجهة برمجة التطبيقات، انقر على منتج واجهة برمجة التطبيقات المحدّد الذي استخدمته لإعداد Apigee Adapter for Envoy.
- في صفحة منتجات واجهة برمجة التطبيقات > اسم المنتج، انقر على تعديل.
- فعِّل البيئة المحدّدة التي تريد إرسال طلبات بيانات من واجهة برمجة التطبيقات فيها، وذلك من خلال وضع علامة في مربّع الاختيار الخاص بالبيئة ذات الصلة.
- انقر على حفظ.
السبب: مسار معرّف الموارد المنتظم (URI) للخدمة المستهدَفة غير متوفّر في منتج واجهة برمجة التطبيقات
سيحدث هذا الخطأ إذا لم يتم تحديد مسار معرّف الموارد المنتظم (URI) للهدف في منتج واجهة برمجة التطبيقات المحدّد الذي يستخدمه Envoy Proxy.
التشخيص
يُرجى اتّباع الخطوات التالية لتشخيص المشكلة:
- فعِّل سجلّات تصحيح الأخطاء كما هو موضّح في الخطوة 2 أعلاه.
-
راجِع سجلّات Apigee Adapter for Envoy وتأكَّد من عرض الرسالة التالية لـ "منتج واجهة برمجة التطبيقات" المحدّد المرتبط بهدف محدّد ضمن القسم
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في منتج واجهة برمجة التطبيقاتENVOY-PRODUCT-1. - إذا ظهرت لك الرسالة
no path: REQUEST_URI_PATHفي سجلّات تصحيح الأخطاء الخاصة بـ Apigee Adapter for Envoy، يعني ذلك أنّ هذا هو سبب المشكلة. إذا لم يكن الأمر كذلك، انتقِل إلى السبب: اسم المضيف غير متوفّر في منتج واجهة برمجة التطبيقات.
الدقة
إذا لم تتم إضافة معرّف الموارد المنتظم (URI) الخاص بالطلب إلى منتج واجهة برمجة التطبيقات الخاص بالهدف المحدّد، اتّبِع الخطوات التالية لحلّ المشكلة:
- سجِّل الدخول إلى واجهة مستخدم Edge.
- في صفحة نشر > منتجات واجهة برمجة التطبيقات، انقر على منتج واجهة برمجة التطبيقات المحدّد الذي استخدمته لإعداد Apigee Adapter for Envoy.
- في صفحة منتجات واجهة برمجة التطبيقات > اسم المنتج، انقر على تعديل.
- في جزء مراجع موارد واجهة برمجة التطبيقات، أضِف معرّف الموارد المنتظم (URI) لطلب بيانات من واجهة برمجة التطبيقات إلى منتج واجهة برمجة التطبيقات.
- راقِب سجلات "محوّل Apigee" لـ Envoy وانتظِر إلى أن يجلب "محوّل Apigee" لـ Envoy منتج واجهة برمجة التطبيقات المعدَّل. بعد ذلك، أرسِل طلب بيانات من واجهة برمجة التطبيقات آخر للتحقّق من الإصلاح.
السبب: لم يتم إدخال اسم المضيف في منتج واجهة برمجة التطبيقات
سيحدث هذا الخطأ إذا لم تتم إضافة مجموعة اسم المضيف والمنفذ المستهدَفة إلى منتج واجهة برمجة التطبيقات المحدّد الذي يستخدمه Envoy Proxy.
التشخيص
يُرجى اتّباع الخطوات التالية لتشخيص المشكلة:
- فعِّل سجلّات تصحيح الأخطاء كما هو موضّح في الخطوة 2 أعلاه.
تحقَّق من سجلّات Apigee Adapter for Envoy وتأكَّد من عرض الرسالة التالية للمنتج المحدّد لواجهة برمجة التطبيقات المرتبط بهدف محدّد ضمن القسم
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في منتج واجهة برمجة التطبيقاتENVOY-PRODUCT-1.- إذا كانت سجلّات "محوّل Apigee" لـ Envoy تتضمّن إدخالاً يتضمّن الرسالة
no targets: HOSTNAME:PORTأثناء منح الإذن بالطلب، يكون هذا هو سبب المشكلة. إذا لم يكن الأمر كذلك، انتقِل إلى السبب: مفتاح واجهة برمجة التطبيقات غير متوفّر في عنوان الطلب.
الدقة
إذا لم تتم إضافة مجموعة اسم المضيف والمنفذ المستهدفة إلى منتج واجهة برمجة التطبيقات، اتّبِع الخطوات التالية لحلّ المشكلة:
- سجِّل الدخول إلى واجهة مستخدم Edge.
- في صفحة نشر > منتجات واجهة برمجة التطبيقات، انقر على منتج واجهة برمجة التطبيقات المحدّد الذي استخدمته لإعداد Apigee Adapter for Envoy.
- في صفحة منتجات واجهة برمجة التطبيقات > اسم المنتج، انقر على تعديل.
في لوحة أهداف الخدمة البعيدة في Apigee، أضِف اسم المضيف والمنفذ المستهدَفين، ثم انقر على حفظ.
إذا لم يظهر قسم أهداف الخدمة البعيدة في Apigee في واجهة المستخدم، أضِف سمة مخصّصة إلى حزمة واجهة برمجة التطبيقات بالاسم
apigee-remote-service-targetsوأضِف القيمة HOSTNAME:PORT باستخدام واجهة برمجة التطبيقات Edge. على سبيل المثال: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 منتج واجهة برمجة التطبيقات المعدَّل. بعد ذلك، أرسِل طلبًا آخر إلى واجهة برمجة التطبيقات للتحقّق من الإصلاح.
السبب: مفتاح واجهة برمجة التطبيقات غير متوفّر في عنوان الطلب
سيحدث هذا الخطأ إذا لم يتم تمرير مفتاح واجهة برمجة التطبيقات كجزء من عناوين الطلبات.
التشخيص
يُرجى اتّباع الخطوات التالية لتشخيص المشكلة:
- فعِّل سجلّات تصحيح الأخطاء كما هو موضّح في الخطوة 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]. تشير هذه الرسالة إلى أنّه لم يتم تمرير مفتاح واجهة برمجة التطبيقات كجزء من عنوان الطلب. - إذا كانت سجلّات Apigee Adapter for Envoy تتضمّن إدخال في السجلّ بالرسالة
[missing authentication]ضمن القسمAuthenticate error، يعني ذلك أنّ هذا هو سبب المشكلة. إذا لم يكن كذلك، انتقِل إلى السبب: مفتاح واجهة برمجة التطبيقات غير صالح.
الدقة
إذا ظهر الخطأ [missing authentication] في سجلات Apigee Adapter for Envoy، اتّبِع الخطوات التالية لحلّ المشكلة:
- تحقَّق مما إذا كان العميل قد أرسل مفتاح واجهة برمجة التطبيقات باستخدام عنوان HTTP
x-api-keyفي طلب البيانات من واجهة برمجة التطبيقات. إذا لم يكن الأمر كذلك، اطلب من العميل إرسال مفتاح واجهة برمجة التطبيقات في عنوان HTTPx-api-key. - تحقَّق من ملف إعداد Apigee Adapter for Envoy وتأكَّد من تغيير اسم عنوان مفتاح واجهة برمجة التطبيقات التلقائي
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. - إذا تم تغيير اسم عنوان مفتاح واجهة برمجة التطبيقات التلقائي، اطلب من العميل استخدام اسم عنوان مفتاح واجهة برمجة التطبيقات المعدَّل وإرسال طلب بيانات من واجهة برمجة التطبيقات آخر والتحقّق مما إذا كان ذلك سيحل المشكلة.
السبب: مفتاح واجهة برمجة التطبيقات غير صالح
سيحدث هذا الخطأ إذا تم تمرير مفتاح واجهة برمجة تطبيقات غير صالح كجزء من عنوان الطلب.
التشخيص
يُرجى اتّباع الخطوات التالية لتشخيص المشكلة:
- فعِّل سجلّات تصحيح الأخطاء كما هو موضّح في الخطوة 2 أعلاه.
- راجِع سجلات "محوّل Apigee" لـ Envoy وتأكَّد من ظهور الرسالة
[permission denied]ضمن القسمAuthenticate error. يتم عرض ذلك عادةً بعد أن يجلب المحوّل مفتاح واجهة برمجة التطبيقات، ويتم الإشارة إلى ذلك من خلال الرسالة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)
في هذا المثال، كان مفتاح واجهة برمجة التطبيقات المُرسَل في طلب بيانات من واجهة برمجة التطبيقات غير صالح.
- إذا كانت سجلّات Apigee Adapter for Envoy تتضمّن إدخال في السجلّ يتضمّن
[permission denied]ضمن القسمAuthenticate error، يشير ذلك إلى أنّ مفتاح واجهة برمجة التطبيقات الذي تم تمريره كجزء من الطلب غير صالح وهو سبب المشكلة. إذا لم يكن كذلك، انتقِل إلى السبب: يتعذّر على Apigee Adapter for Envoy التواصل مع خادم وكيل لواجهة برمجة التطبيقات للخدمة البعيدة.
الدقة
إذا ظهرت الرسالة [permission denied] ضمن قسم Authenticate
error في سجلات Apigee Adapter for Envoy، اتّبِع الخطوات التالية
لحلّ المشكلة:
- تحقَّق من مفتاح واجهة برمجة التطبيقات المُرسَل في طلب بيانات من واجهة برمجة التطبيقات مقابل قيمة مفتاح واجهة برمجة التطبيقات التي تم العثور عليها في التطبيق المرتبط بمنتج واجهة برمجة التطبيقات.
- إذا كان مفتاح واجهة برمجة التطبيقات الذي يستخدمه العميل غير صالح، اطلب من العميل إرسال مفتاح صالح لواجهة برمجة التطبيقات.
- إذا كان مفتاح واجهة برمجة التطبيقات الذي يستخدمه العميل صالحًا واستمر ظهور الخطأ
403في HTTP، يُرجى التواصل مع فريق دعم Apigee Edge للتحقيق في هذه المشكلة بشكل أكبر.
السبب: يتعذّر على "محوّل Apigee" لـ Envoy التواصل مع خادم وكيل لواجهة برمجة التطبيقات للخدمة البعيدة
سيحدث هذا الخطأ إذا تعذّر على Apigee Adapter for Envoy التواصل مع خادم وكيل لواجهة برمجة التطبيقات للخدمة البعيدة بسبب عدم صلاحية مضيف الخدمة البعيدة الذي تم ضبطه.
التشخيص
يُرجى اتّباع الخطوات التالية لتشخيص المشكلة:
- فعِّل سجلّات تصحيح الأخطاء كما هو موضّح في الخطوة 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 for Envoy من التواصل مع خادم وكيل لواجهة برمجة التطبيقات عن بُعد، لأنّ اسم المضيف المقدَّم في عنوان URL الخاص بخادم وكيل لواجهة برمجة التطبيقات عن بُعد غير صالح كما هو موضّح في الخطأ
no such host. - إذا كانت سجلّات "محوّل Apigee" لـ Envoy تتضمّن إدخال في السجلّ يتضمّن الرسالة
no such host، يعني ذلك أنّ هذا هو سبب المشكلة. إذا لم يكن الأمر كذلك، انتقِل إلى السبب: يتعذّر على خادم Envoy الوكيل التواصل مع Apigee Adapter for Envoy.
الدقة
إذا ظهرت الأخطاء أعلاه في سجلّات Apigee Adapter for Envoy، اتّبِع الخطوات التالية لحلّ المشكلة:
تحقَّق من ملف إعداد Apigee Adapter for Envoy وتأكَّد من أنّ عنوان URL لخادم وكيل API للخدمة البعيدة صالح.
إذا لم يكن كذلك، أوقِف Apigee Adapter for Envoy، وأصلِح عنوان URL للخادم الوكيل لواجهة برمجة التطبيقات للخدمة البعيدة في ملف الإعداد، ثم ابدأ Apigee Adapter for Envoy، وأرسِل طلب بيانات من واجهة برمجة التطبيقات آخر، وتأكَّد من إصلاح المشكلة.
نموذج الإعداد:
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-serviceفي بيئة Edge ذات الصلة. إذا لم يكن كذلك، عليك نشر خادم وكيل لواجهة برمجة التطبيقاتremote-serviceفي بيئة Edge ذات الصلة وإعادة المحاولة. - تأكَّد من إمكانية الاتصال بالشبكة بين Apigee Adapter for Envoy ونقطة نهاية خادم وكيل واجهة برمجة التطبيقات
remote-service. إذا تم العثور على أي مشاكل في الاتصال بالشبكة، يُرجى التواصل مع فريق الشبكة ومحاولة حل المشكلة.
السبب: يتعذّر على خادم Envoy الوكيل التواصل مع "محوّل Apigee" لـ Envoy
التشخيص
يُرجى اتّباع الخطوات التالية لتشخيص المشكلة:
تأكَّد من تفعيل سجلّات تصحيح الأخطاء في Envoy. إذا لم يكن الأمر كذلك، أوقِف Envoy وأعِد تشغيله مع تفعيل سجلات تصحيح الأخطاء. بعد ذلك، أرسِل طلبًا آخر إلى واجهة برمجة التطبيقات.
عمليات النشر المستقلة:
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 Adapter for Envoy قيد التشغيل.
- تأكَّد من أنّ عملية Apigee Adapter for Envoy تعمل من خلال تنفيذ الأمر التالي. إذا كانت عملية Apigee Adapter for Envoy قيد التشغيل، يجب أن تعرض نتيجة الأمر التالي هذه العملية.
ps -ef | grep apigee-remote-service-envoy
- إذا لم يكن قيد التشغيل، فهذا هو سبب المشكلة.
الدقة
- إذا لم تكن عملية "محوّل Apigee" لـ Envoy قيد التشغيل، ابدأ تشغيلها.
- أرسِل طلبًا آخر إلى واجهة برمجة التطبيقات وتأكَّد من حلّ المشكلة.
السيناريو 2: عملية المحوّل لا تستمع إلى المنفذ المحدّد
إذا لم تكن عملية Apigee Adapter for Envoy تستمع على المنفذ المحدّد، يمكن أن يحدث هذا الخطأ.
إذا كانت عملية "محوّل Apigee" لـ 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 وأعِد تشغيله.
- أرسِل طلبًا آخر إلى واجهة برمجة التطبيقات وتأكَّد من حلّ المشكلة.
السيناريو 3: اتصال الشبكة بين 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عند استخدام telnet، يشير ذلك إلى وجود مشكلة في اتصال الشبكة بين Envoy وApigee Adapter for Envoy.
الدقة
إذا واجهت أي مشاكل في الاتصال بالشبكة بين Envoy وApigee Adapter for Envoy، يُرجى التواصل مع فريق الشبكة ومحاولة حلّ المشكلة.
إذا استمرت المشكلة، انتقِل إلى المعلومات التشخيصية التي يجب جمعها.
يجب جمع معلومات التشخيص
إذا استمرت المشكلة بعد اتّباع التعليمات أعلاه، اجمع معلومات التشخيص التالية ثم تواصَل مع فريق دعم Apigee Edge:
-
منتج Apigee المستخدَم:
مثال: Apigee Edge Cloud وApigee OPDK وApigee Hybrid وApigee X
- مؤسسة وبيئة Apigee
تعريف منتج واجهة برمجة التطبيقات الذي تمّت قراءته باستخدام Edge API:
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
ابدأ جلسة تتبُّع في خادم وكيل
remote-serviceAPI باستخدام واجهة مستخدم Apigee Edge. أعِد إنتاج هذه المشكلة وشارك ملف 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
- طلب بيانات من واجهة برمجة التطبيقات تم إرساله إلى خادم وكيل Envoy باستخدام الأمر
curl(الناتج الكامل للأمرcurl):curl -v ENVOY_PROXY_ENDPOINT
- طلب بيانات من واجهة برمجة التطبيقات تم إرساله إلى الخدمة المستهدَفة باستخدام الأمر
curl(الناتج الكامل للأمرcurl):curl -v TARGET_SERVICE_ENDPOINT