تعذُّر الخادم الوكيل في Envoy مع ظهور الخطأ HTTP 403 Forbidden في محول Apigee لـ Envoy

أنت تعرض مستندات 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

قبل البدء

  1. يُرجى التأكّد من تلقّيك رسالة الردّ 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
    
  2. تفعيل سجلات تصحيح الأخطاء:

    تأكَّد من تفعيل سجلّات تصحيح الأخطاء في Apigee Adapter لـ Envoy للحصول على مزيد من التفاصيل عن الخطأ. إذا لم يكن الأمر كذلك، أوقِف محوّل Apigee for Envoy ثم شغِّله مرة أخرى، وسيتم تفعيل سجلات تصحيح الأخطاء. باستخدام الأمر التالي:

    apigee-remote-service-envoy -c config.yaml -l debug
    

السبب: منتج واجهة برمجة التطبيقات غير مفعَّل

سيحدث هذا الخطأ في حال عدم تفعيل منتج واجهة برمجة التطبيقات المحدّد الذي يستخدمه خادم Envoy Proxy في بيئة محددة يتم فيها استدعاء استدعاءات واجهة برمجة التطبيقات.

التشخيص

نفِّذ الخطوات التالية لتشخيص المشكلة:

  1. فعِّل سجلات تصحيح الأخطاء كما هو موضّح في الخطوة 2 أعلاه.
  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، يُرجى الاطّلاع على التسجيل:

  3. إذا رأيت هذه الرسالة أثناء تفويض طلب البيانات من واجهة برمجة التطبيقات، فإنها تشير على الأرجح إلى أنّه لم يتم تفعيل منتج واجهة برمجة التطبيقات المحدد لبيئة معيّنة إجراء طلبات البيانات من واجهة برمجة التطبيقات.
  4. نفِّذ الخطوات التالية للتحقُّق من ذلك:
    1. سجِّل الدخول إلى واجهة مستخدم Edge.
    2. في قسم نشر > واجهة برمجة التطبيقات، انقر على منتج واجهة برمجة التطبيقات المحدّد الذي يُستخدم في إعداد مهايئ Apigee لجهاز Envoy.
    3. تحقق من أن البيئة المحددة التي ترسل فيها طلبات واجهة برمجة التطبيقات سيتم تفعيلها في منتج واجهة برمجة التطبيقات.
    4. إذا لم يتم تفعيل البيئة المحددة في منتج واجهة برمجة التطبيقات، فإن هذا هو السبب حول هذه المشكلة.
  5. إذا سبق أن تم تفعيل البيئة المحدّدة، انتقِل إلى السبب: عدم توفُّر مسار معرّف الموارد المنتظم (URI) للخدمة المستهدَفة في منتج واجهة برمجة التطبيقات.

الدقة

إذا لم يتم تفعيل البيئة المحدّدة في منتج واجهة برمجة التطبيقات، يُرجى تنفيذ الخطوات التالية من أجل: لحل المشكلة:

  1. سجِّل الدخول إلى واجهة مستخدم Edge.
  2. في قسم نشر > منتجات واجهة برمجة التطبيقات، انقر على منتج واجهة برمجة التطبيقات المحدّد الذي استخدمته لإعداد مهايئ Apigee لجهاز Envoy.
  3. في منتجات واجهة برمجة التطبيقات > اسم المنتج، انقر على تعديل.
  4. يمكنك تفعيل البيئة المحدّدة التي تريد إرسال طلبات البيانات من خلالها إلى واجهة برمجة التطبيقات، وذلك من خلال اختيار مربع اختيار البيئة ذات الصلة.
  5. انقر على حفظ.

السبب: عدم توفُّر مسار معرّف الموارد المنتظم (URI) للخدمة المستهدَفة في منتج واجهة برمجة التطبيقات

سيحدث هذا الخطأ إذا لم يتم تحديد مسار عنوان URI للهدف في منتج واجهة برمجة التطبيقات المحدد المستخدم خادم وكيل Envoy.

التشخيص

نفِّذ الخطوات التالية لتشخيص المشكلة:

  1. فعِّل سجلات تصحيح الأخطاء كما هو موضّح في الخطوة 2 أعلاه.
  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

  3. إذا ظهرت لك الرسالة no path: REQUEST_URI_PATH في ويكون هذا هو سبب المشكلة في محوّل Apigee لسجلات تصحيح الأخطاء في Envoy. إذا لم يكن كذلك، انتقِل إلى السبب: اسم المضيف غير متوفّر في منتج واجهة برمجة التطبيقات.

الدقة

إذا لم تتم إضافة عنوان URI للطلب المحدد إلى منتج واجهة برمجة التطبيقات للهدف المحدّد، فعندئذٍ اتّبِع الخطوات التالية لحل المشكلة:

  1. سجِّل الدخول إلى واجهة مستخدم Edge.
  2. في قسم نشر > واجهة برمجة التطبيقات، انقر على منتج واجهة برمجة التطبيقات المحدّد الذي يُستخدم في إعداد مهايئ Apigee لجهاز Envoy.
  3. في منتجات واجهة برمجة التطبيقات > اسم المنتج، انقر على تعديل.
  4. في لوحة موارد واجهة برمجة التطبيقات، أضِف عنوان URI لطلب واجهة برمجة التطبيقات إلى منتج واجهة برمجة التطبيقات.
  5. راقِب محوّل Apigee لسجلات Envoy وانتظر حتى تتم إضافة محوّل Apigee إلى Envoy. لجلب منتج واجهة برمجة التطبيقات المحدّث. بعد ذلك، أرسِل طلبًا آخر من واجهة برمجة التطبيقات للتحقّق من الإصلاح.

السبب: اسم المضيف غير متوفّر في منتج واجهة برمجة التطبيقات

سيحدث هذا الخطأ في حال عدم إضافة اسم المضيف المستهدف ومجموعة المنفذ إلى مجموعة البيانات منتج واجهة برمجة التطبيقات الذي يستخدمه خادم Envoy Proxy.

التشخيص

نفِّذ الخطوات التالية لتشخيص المشكلة:

  1. فعِّل سجلات تصحيح الأخطاء كما هو موضّح في الخطوة 2 أعلاه.
  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.

  3. إذا احتوت سجلات Apigee لـ Envoy على إدخال بالرسالة no targets: HOSTNAME:PORT أثناء السماح بالطلب، فهذه هي سبب المشكلة. إذا لم يكن كذلك، انتقِل إلى السبب: مفتاح واجهة برمجة التطبيقات غير متوفّر في عنوان الطلب.

الدقة

في حال عدم إضافة اسم المضيف المستهدف ومجموعة المنفذ إلى منتج واجهة برمجة التطبيقات، عليك الخطوات التالية لحل المشكلة:

  1. سجِّل الدخول إلى واجهة مستخدم Edge.
  2. في قسم نشر > واجهة برمجة التطبيقات، انقر على منتج واجهة برمجة التطبيقات المحدّد الذي يُستخدم في إعداد مهايئ Apigee لجهاز Envoy.
  3. في منتجات واجهة برمجة التطبيقات > اسم المنتج، انقر على تعديل.
  4. في لوحة أهداف خدمة 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": []
    }
    
  5. بمجرد الانتهاء من المهمة المذكورة أعلاه، راقب مهايئ Apigee لسجلات Envoy وانتظر حتى يجلب Apigee Adapter في Envoy منتج واجهة برمجة التطبيقات المحدّث. بعد ذلك، أرسِل واجهة برمجة تطبيقات أخرى. التحقق من الإصلاح.

السبب: عدم توفُّر مفتاح واجهة برمجة التطبيقات في عنوان الطلب

يحدث هذا الخطأ في حال عدم تمرير مفتاح واجهة برمجة التطبيقات كجزء من عناوين الطلبات.

التشخيص

نفِّذ الخطوات التالية لتشخيص المشكلة:

  1. فعِّل سجلات تصحيح الأخطاء كما هو موضّح في الخطوة 2 أعلاه.
  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]. وتشير هذه الرسالة إلى أن مفتاح واجهة برمجة التطبيقات لم يتم تمريره كجزء من عنوان الطلب.

  3. إذا كانت سجلات Apigee لسجلات Envoy تحتوي على إدخال سجلّ بالرسالة [missing authentication] ضمن القسم Authenticate error ، تكون هذه القيمة سبب المشكلة. إذا لم يكن كذلك، انتقِل إلى السبب: مفتاح واجهة برمجة التطبيقات غير صالح.

الدقة

إذا ظهر الخطأ [missing authentication] في عليك اتّباع الخطوات التالية لحلّ المشكلة في محوّل Apigee لسجلات Envoy.

  1. تحقَّق مما إذا كان العميل قد أرسل مفتاح واجهة برمجة التطبيقات باستخدام عنوان HTTP x-api-key في طلب واجهة برمجة التطبيقات. إذا لم يكن الأمر كذلك، اطلب من العميل إرسال مفتاح واجهة برمجة التطبيقات في عنوان HTTP. x-api-key
  2. راجِع ملف إعداد 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

  3. في حال تغيير اسم العنوان التلقائي لمفتاح واجهة برمجة التطبيقات، اطلب من العميل استخدام الاسم المعدَّل أدخِل اسم عنوان مفتاح واجهة برمجة التطبيقات وأرسِل طلبًا آخر من واجهة برمجة التطبيقات وتحقَّق مما إذا كان ذلك سيؤدي إلى حل المشكلة.

السبب: مفتاح واجهة برمجة تطبيقات غير صالح

يحدث هذا الخطأ في حال تمرير مفتاح واجهة برمجة تطبيقات غير صالح كجزء من عنوان الطلب.

التشخيص

نفِّذ الخطوات التالية لتشخيص المشكلة:

  1. فعِّل سجلات تصحيح الأخطاء كما هو موضّح في الخطوة 2 أعلاه.
  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)
    

    في هذا المثال، لم يكن مفتاح واجهة برمجة التطبيقات الذي تم إرساله في طلب البيانات من واجهة برمجة التطبيقات صالحًا.

  3. إذا تضمّنت سجلّات Apigee for Envoy إدخال سجلّ يتضمّن [permission denied] ضمن القسم Authenticate error ، يعني ذلك أنّ مفتاح واجهة برمجة التطبيقات الذي تم تمريره كجزء من الطلب غير صالح وهو سبب المشكلة. إذا لم يكن كذلك، انتقِل إلى السبب: محوّل Apigee لـ Envoy يتعذر الاتصال بالخادم الوكيل لواجهة برمجة التطبيقات للخدمة عن بُعد.

الدقة

إذا تمت ملاحظة الرسالة [permission denied] ضمن القسم Authenticate error في Apigee Adapter لسجلات Envoy، عليك تنفيذ الخطوات التالية. لحل المشكلة:

  1. يمكنك التحقّق من مفتاح واجهة برمجة التطبيقات الذي تم إرساله في طلب البيانات من واجهة برمجة التطبيقات مقابل قيمة مفتاح واجهة برمجة التطبيقات الواردة في تطبيق متصل بمنتج واجهة برمجة التطبيقات.
  2. إذا كان مفتاح واجهة برمجة التطبيقات الذي يستخدمه العميل غير صالح، اطلب من العميل إرسال مفتاح واجهة برمجة التطبيقات الصالح.
  3. ما إذا كان مفتاح واجهة برمجة التطبيقات الذي يستخدمه العميل صالحًا وإذا كنت لا تزال ترى بروتوكول HTTP 403 خطأ. يُرجى التواصل مع فريق Apigee Edge Support لإجراء مزيد من التحقيق.

السبب: تعذُّر الاتصال بالخادم الوكيل لواجهة برمجة التطبيقات في Apigee for Envoy

سيحدث هذا الخطأ في حال تعذُّر الاتصال بوحدة التحكّم عن بُعد في Apigee Adapter لـ Envoy الخادم الوكيل لواجهة برمجة تطبيقات الخدمة إذا كان مضيف الخدمة البعيد الذي تم إعداده غير صالح.

التشخيص

نفِّذ الخطوات التالية لتشخيص المشكلة:

  1. فعِّل سجلات تصحيح الأخطاء كما هو موضّح في الخطوة 2 أعلاه.
  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 .

  3. إذا كانت سجلات Apigee for Envoy تحتوي على إدخال سجل بالرسالة no such host، يكون هذا هو سبب المشكلة. إذا لم يكن كذلك، انتقِل إلى السبب: يتعذّر على خادم وكيل Envoy الاتصال بـ Apigee Adapter لـ Envoy.

الدقة

في حال عرض الأخطاء المذكورة أعلاه في سجلّات Apigee Adapter لـ Envoy، عليك إجراء ما يلي. خطوات لحل المشكلة:

  1. راجع محوِّل 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
          
  2. تأكَّد من نشر الخادم الوكيل remote-service لواجهة برمجة التطبيقات في Edge ذي الصلة. محددة. إذا لم يكن الأمر كذلك، انشر الخادم الوكيل remote-service لواجهة برمجة التطبيقات في متصفّح Edge ذي الصلة البيئة والمحاولة مرة أخرى.
  3. تحقق من اتصال الشبكة بين محوّل Apigee في Envoy نقطة نهاية الخادم الوكيل لواجهة برمجة التطبيقات remote-service. إذا كان هناك أي اتصال بالشبكة التي تم العثور عليها، اتصل بفريق الشبكات وحاول حل المشكلة.

السبب: تعذر على وكيل Envoy الاتصال بـ Apigee Adapter لـ Envoy

التشخيص

نفِّذ الخطوات التالية لتشخيص المشكلة:

  1. تأكَّد من تفعيل سجلّات تصحيح الأخطاء في 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
    
  2. راجِع مهايئ 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.

  3. قد يعود سبب "connection failure" إلى عدة أسباب. لنلقِ نظرة على كل واحد من السيناريوهات.

السيناريو 1: عملية المحول لا تعمل

في حال عدم تشغيل عملية "محوّل Apigee" لـ Envoy، يمكن أن يحدث هذا الخطأ.

  1. تأكَّد من تشغيل عملية "محوّل Apigee" لـ Envoy من خلال تنفيذ ما يلي: الأمر. في حال تشغيل عملية محوّل Apigee لـ Envoy، يمكن أن يحدث ما يلي: الأمر الذي يجب أن يدرجه.
    ps -ef | grep apigee-remote-service-envoy
    
  2. إذا لم يكن قيد التشغيل، هذا هو سبب المشكلة.

الدقة

  1. إذا لم تكن عملية Apigee for Envoy قيد التشغيل، فابدأ محوّل Apigee لـ Envoy.
  2. يُرجى تقديم طلب آخر من واجهة برمجة التطبيقات والتأكّد من حلّ المشكلة.

السيناريو 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، فقد يكون هذا هو سبب المشكلة.

الدقة

  1. أوقِف محوّل Apigee في Envoy ثم أعِد تشغيله.
  2. يُرجى تقديم طلب آخر من واجهة برمجة التطبيقات والتأكّد من حلّ المشكلة.

السيناريو 3: الاتصال بالشبكة بين Envoy ومهايئ Apigee لـ Envoy

  1. تحقق من اتصال الشبكة بين 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 '^]'.
    
  2. إذا لاحظت الخطأ Connection timed out في telnet، فهذا يشير إلى هناك مشكلة في الاتصال بالشبكة بين Envoy ومحوّل Apigee في Envoy.

الدقة

في حال ظهور أي مشاكل في الاتصال بالشبكة بين Envoy وApigee Adapter في Envoy، يُرجى فريق الشبكات لديك ومحاولة حل المشكلة.

في حال استمرار المشكلة، انتقِل إلى يجب جمع معلومات التشخيص.

يجب جمع معلومات التشخيص

في حال استمرار المشكلة بعد اتّباع التعليمات أعلاه، يُرجى جمع بيانات التشخيص التالية. ثم الاتصال بـ دعم Apigee Edge:

  1. منتج Apigee المستخدَم:

    مثال: Apigee Edge Cloud وApigee OPDK وApigee hybrid وApigee X

  2. تنظيم وبيئة Apigee
  3. قراءة تعريف منتج واجهة برمجة التطبيقات باستخدام واجهة برمجة تطبيقات Edge:

    curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT

    المرجع: واجهات برمجة تطبيقات Apigee Edge

  4. يمكنك بدء جلسة تتبُّع في الخادم الوكيل لواجهة برمجة التطبيقات remote-service باستخدام واجهة مستخدم Apigee Edge أعد إنشاء هذه المشكلة وشارك ملف XML الخاص بجلسة التتبع.

    المرجع: استخدام أداة التتبُّع | Apigee Edge

  5. محوّل 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
  6. طلب من واجهة برمجة التطبيقات يتم إرساله إلى الخادم الوكيل في Envoy باستخدام أمر curl (الإخراج الكامل للأمر curl):
    curl -v ENVOY_PROXY_ENDPOINT
  7. يشير هذا المصطلح إلى طلب من واجهة برمجة التطبيقات يتم إرساله إلى الخدمة المستهدَفة باستخدام الأمر curl (رمز الاكتمال). ناتج الأمر curl):
    curl -v TARGET_SERVICE_ENDPOINT