أنت تعرض مستندات Apigee Edge.
انتقل إلى
مستندات Apigee X. معلومات
المشكلة
تعذّر خادم وكيل Envoy مع ظهور خطأ HTTP 403 Forbidden
عند الاستدعاء من خلال
مهايئ 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 خطأ HTTP 403
في حال استيفاء أحد الشروط التالية
الحدوث:
السبب | الوصف | إرشادات استكشاف الأخطاء وإصلاحها التي تنطبق على |
---|---|---|
منتج واجهة برمجة التطبيقات غير مفعّل | لم يتم تفعيل منتج واجهة برمجة التطبيقات للبيئة المحدّدة. | مستخدمو Edge Public و Private Cloud |
مسار معرِّف الموارد المنتظم (URI) الخاص بالخدمة المستهدَفة غير متوفّر في منتج واجهة برمجة التطبيقات | مسار معرّف الموارد المنتظم (URI) للخدمة المستهدفة غير متوفّر أو لم تتم إضافته إلى منتج واجهة برمجة التطبيقات ضمن واجهة برمجة التطبيقات. الموارد. | مستخدمو Edge Public و Private Cloud |
اسم المضيف غير متوفّر في منتج واجهة برمجة التطبيقات | اسم المضيف المقدَّم في طلب البيانات من واجهة برمجة التطبيقات للعميل غير متوفّر في منتج واجهة برمجة التطبيقات ضمن Apigee أهداف الخدمة عن بُعد. | مستخدمو Edge Public و Private Cloud |
عدم توفّر مفتاح واجهة برمجة التطبيقات في عنوان الطلب | لا يتم ضبط مفتاح واجهة برمجة التطبيقات في عنوان HTTP الذي يتضمّن x-api-key . |
مستخدمو Edge Public و Private Cloud |
مفتاح واجهة برمجة التطبيقات غير صالح | مفتاح واجهة برمجة التطبيقات الذي تم تمريره كجزء من الطلب غير صالح. | مستخدمو Edge Public و Private Cloud |
مهايئ Apigee لـ Envoy غير قادر على تنفيذ ما يلي: التواصل باستخدام الخادم الوكيل لواجهة برمجة التطبيقات للخدمة عن بُعد | يتعذّر على Apigee Adapter for Envoy الاتصال بالخادم الوكيل لواجهة برمجة التطبيقات للخدمة عن بُعد. | مستخدمو Edge Public و Private Cloud |
يتعذّر على وكيل Envoy الاتصال مع Apigee Adapter لـ Envoy | يتعذر على وكيل Envoy الاتصال بـ Apigee Adapter لـ 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 لـ Envoy للحصول على مزيد من التفاصيل عن الخطأ. إذا لم يكن الأمر كذلك، أوقِف محوّل Apigee 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.
التشخيص
نفِّذ الخطوات التالية لتشخيص المشكلة:
- فعِّل سجلات تصحيح الأخطاء كما هو موضّح في الخطوة 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 لسجلات تصحيح الأخطاء في 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 لـ Envoy على إدخال بالرسالة
no targets: HOSTNAME:PORT
أثناء السماح بالطلب، فهذه هي سبب المشكلة. إذا لم يكن كذلك، انتقِل إلى السبب: مفتاح واجهة برمجة التطبيقات غير متوفّر في عنوان الطلب.
الدقة
في حال عدم إضافة اسم المضيف المستهدف ومجموعة المنفذ إلى منتج واجهة برمجة التطبيقات، عليك الخطوات التالية لحل المشكلة:
- سجِّل الدخول إلى واجهة مستخدم Edge.
- في قسم نشر > واجهة برمجة التطبيقات، انقر على منتج واجهة برمجة التطبيقات المحدّد الذي يُستخدم في إعداد مهايئ Apigee لجهاز 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 Adapter في 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 لسجلات Envoy تحتوي على إدخال سجلّ بالرسالة
[missing authentication]
ضمن القسمAuthenticate error
، تكون هذه القيمة سبب المشكلة. إذا لم يكن كذلك، انتقِل إلى السبب: مفتاح واجهة برمجة التطبيقات غير صالح.
الدقة
إذا ظهر الخطأ [missing authentication]
في
عليك اتّباع الخطوات التالية لحلّ المشكلة في محوّل Apigee لسجلات Envoy.
- تحقَّق مما إذا كان العميل قد أرسل مفتاح واجهة برمجة التطبيقات باستخدام عنوان HTTP
x-api-key
في طلب واجهة برمجة التطبيقات. إذا لم يكن الأمر كذلك، اطلب من العميل إرسال مفتاح واجهة برمجة التطبيقات في عنوان HTTP.x-api-key
- راجِع ملف إعداد Apigee Adapter لملف إعداد 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 for Envoy إدخال سجلّ يتضمّن
[permission denied]
ضمن القسمAuthenticate error
، يعني ذلك أنّ مفتاح واجهة برمجة التطبيقات الذي تم تمريره كجزء من الطلب غير صالح وهو سبب المشكلة. إذا لم يكن كذلك، انتقِل إلى السبب: محوّل Apigee لـ Envoy يتعذر الاتصال بالخادم الوكيل لواجهة برمجة التطبيقات للخدمة عن بُعد.
الدقة
إذا تمت ملاحظة الرسالة [permission denied]
ضمن القسم Authenticate
error
في Apigee Adapter لسجلات Envoy، عليك تنفيذ الخطوات التالية.
لحل المشكلة:
- يمكنك التحقّق من مفتاح واجهة برمجة التطبيقات الذي تم إرساله في طلب البيانات من واجهة برمجة التطبيقات مقابل قيمة مفتاح واجهة برمجة التطبيقات الواردة في تطبيق متصل بمنتج واجهة برمجة التطبيقات.
- إذا كان مفتاح واجهة برمجة التطبيقات الذي يستخدمه العميل غير صالح، اطلب من العميل إرسال مفتاح واجهة برمجة التطبيقات الصالح.
- ما إذا كان مفتاح واجهة برمجة التطبيقات الذي يستخدمه العميل صالحًا وإذا كنت لا تزال ترى بروتوكول HTTP
403
خطأ. يُرجى التواصل مع فريق Apigee Edge Support لإجراء مزيد من التحقيق.
السبب: تعذُّر الاتصال بالخادم الوكيل لواجهة برمجة التطبيقات في Apigee for Envoy
سيحدث هذا الخطأ في حال تعذُّر الاتصال بوحدة التحكّم عن بُعد في Apigee Adapter لـ 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 لـ Envoy من الاتصال بـ خادم وكيل لواجهة برمجة التطبيقات للخدمة عن بُعد نظرًا لأن اسم المضيف المقدم في الخادم الوكيل لواجهة برمجة التطبيقات للخادم البعيد عنوان URL غير صالح كما يشير إليه الخطأ
no such host
. - إذا كانت سجلات Apigee for Envoy تحتوي على إدخال سجل بالرسالة
no such host
، يكون هذا هو سبب المشكلة. إذا لم يكن كذلك، انتقِل إلى السبب: يتعذّر على خادم وكيل Envoy الاتصال بـ Apigee Adapter لـ Envoy.
الدقة
في حال عرض الأخطاء المذكورة أعلاه في سجلّات Apigee Adapter لـ Envoy، عليك إجراء ما يلي. خطوات لحل المشكلة:
راجع محوِّل Apigee لملف إعداد Envoy وتأكَّد من صحة قيمة عنوان URL للخادم الوكيل لواجهة برمجة التطبيقات للخدمة عن بُعد صالح.
إذا لم يكن الأمر كذلك، أوقِف محوّل Apigee في Envoy، وأصلح عنوان URL للخادم الوكيل لواجهة برمجة التطبيقات عن بُعد في قسم وبدء تشغيل مهايئ Apigee في 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 Adapter لـ 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 for Envoy قيد التشغيل، فابدأ محوّل Apigee لـ Envoy.
- يُرجى تقديم طلب آخر من واجهة برمجة التطبيقات والتأكّد من حلّ المشكلة.
السيناريو 2: عدم الاستماع إلى عملية المحوّل على المنفذ المحدد
إذا كانت عملية مهايئ Apigee for Envoy لا تستجيب على المنفذ المحدد، فيمكن أن يحدث هذا الخطأ.
إذا كانت عملية Apigee Adapter لـ Envoy قيد التشغيل، فتأكد من وجود مقبس استماع قيد التشغيل.
المنفذ 5000: APIGEE_ENVOY_ADAPTER_HOST:5000
. يمكنك تشغيل
netstat
للتحقق من هذا:
sudo netstat -lnp | grep 5000
نموذج الناتج:
sudo netstat -lnp | grep 5000 tcp6 0 0 :::5000 :::* LISTEN 1596530/./apigee-re
إذا لم يكن هناك مقبس يستمع إلى المنفذ 5000، فقد يكون هذا هو سبب المشكلة.
الدقة
- أوقِف محوّل Apigee في Envoy ثم أعِد تشغيله.
- يُرجى تقديم طلب آخر من واجهة برمجة التطبيقات والتأكّد من حلّ المشكلة.
السيناريو 3: الاتصال بالشبكة بين Envoy ومهايئ Apigee لـ Envoy
- تحقق من اتصال الشبكة بين Envoy وApigee Adapter لـ 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 في 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 لسجلات 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