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