تحديد المشاكل وحلّها

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

الخطأ Istio 404 (لم يتم العثور عليه)

قد يكون تصحيح الخطأ 404 (لم يتم العثور على الصفحة) على Istio أمرًا محبطًا. نأمل أن توفّر لك هذه المعلومات مساحة يمكنك من خلالها تتبّع الأخطاء التي قد تحدث.

تعارض بوابة أحرف البدل

يمكن أن يكون هناك تعريف واحد فقط للمدخل يستخدم قيمة مضيف حرف بدل "*". وإذا نشرت أي خطوات أخرى تتضمّن مدخل حرف بدل، سيتعذّر استدعاء العميل إذا ظهرت الحالة 404.

مثال:

$ istioctl get gateways
GATEWAY NAME         HOSTS     NAMESPACE   AGE
bookinfo-gateway     *         default     20s
httpbin-gateway      *         default     3s

إذا كان الأمر كذلك، يجب حذف إحدى المداخل المتعارضة أو تغييرها.

تتبع الأماكن التي يتعطل فيها المسار

يشبه البيضة البصلة (أو الغريبة)، كما أنّها تحتوي على طبقات. وهناك طريقة منهجية لتصحيح أخطاء 404 تتمثل في المضي قدمًا نحو الهدف.

حجم الأعمال في الخلفية

تأكَّد من أنّه يمكنك الوصول إلى عبء العمل من خلال الملف الجانبي:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl localhost:80/headers

المقعد الخلفي

يمكنك ضبط عنوان الخدمة والحصول على عنوان IP لمجموعة عبء العمل.

SERVICE=httpbin.default.svc.cluster.local:80
  POD_IP=$(kubectl get pod $WORKLOAD_POD -o jsonpath='{.status.podIP}')

الوصول إلى حجم العمل من خلال الملف الجانبي:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl -v http://$SERVICE/headers --resolve "$SERVICE:$POD_IP"

أو في حال تفعيل Istio mTLS:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl -v https://$SERVICE/headers --resolve "$SERVICE:$POD_IP" --key /etc/certs/key.pem --cert /etc/certs/cert-chain.pem --cacert /etc/certs/root-cert.pem --insecure

البوابة (أو الخزانة الجانبية للواجهة الأمامية)

الوصول إلى الخدمة من البوابة:

kubectl -n istio-system exec $GATEWAY_POD -- curl -v http://$SERVICE/header

أو في حال تفعيل Istio mTLS:

kubectl -n istio-system exec $GATEWAY_POD -- curl -v https://$SERVICE/headers --key /etc/certs/key.pem --cert /etc/certs/cert-chain.pem --cacert /etc/certs/root-cert.pem --insecure

الإحصاءات غير المتوفّرة

إذا لم تظهر لك الإحصاءات في واجهة مستخدم "إحصاءات Google"، ننصحك بأخذ الأسباب المحتملة التالية في الاعتبار:

  • يمكن أن يتأخر تناول عصير الحمية لبضع دقائق
  • لم يتم إعداد سجلّ الوصول إلى Envoy gRPC بشكل صحيح.
  • يتعذّر على Envoy الوصول إلى "الخدمة عن بُعد".
  • يتعذُّر تحميل الخدمة عن بُعد

عدم رفض مفتاح واجهة برمجة تطبيقات مفقود أو غير صالح

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

الخادم الوكيل المباشر

تحقَّق من إعدادات ext-authz.

السيارة الجانبية
  • تأكَّد من ضبط أداة المستمع لمنع التقطيع.
  • تحقَّق من إعدادات ext-authz.

يتم التحقّق من الطلبات غير الصالحة والسماح بها

  • تم إعداد الخدمة عن بُعد لتعذُّر فتح التطبيق
  • لم يتم إعداد Envoy لعمليات التحقّق من RBAC.

للحصول على معلومات عن كيفية حلّ هذه المشاكل، راجِع الموضوع التالي في مستندات Envoy: التفويض الخارجي وراجِع المعلومات المتعلّقة بالسمة failure_mode_allow. وتتيح لك هذه السمة تغيير سلوك الفلتر عند رصد الأخطاء.

عدم رفض JWT مفقود أو غير صالح

السبب المحتمل هو عدم ضبط فلتر Envoy JWT.

تعذّر استخدام مفتاح واجهة برمجة تطبيقات صالح

الأسباب المحتملة

  • يتعذّر على Envoy الوصول إلى الخدمة البعيدة.
  • بيانات الاعتماد غير صالحة
  • لم يتم إعداد منتج Apigee API للاستهداف والبيئة.

خطوات تحديد المشاكل وحلّها

فحص منتج واجهة برمجة التطبيقات على Apigee

  • هل هي مُفعّلة في بيئتك (الاختبار أو المنتج)؟

    يجب أن يرتبط المنتج بالبيئة نفسها التي توجد بها الخدمة عن بُعد.

  • هل هي مرتبطة بالهدف الذي تصل إليه؟

    راجِع قسم أهداف الخدمة عن بُعد في Apigee. وتذكَّر أنّ اسم الخدمة يجب أن يكون اسم مضيف مؤهّلاً بالكامل. إذا كانت الخدمة هي خدمة Istio، سيظهر الاسم على النحو التالي helloworld.default.svc.cluster.localcode> الذي يمثّل خدمة helloworld في مساحة الاسم default.

  • هل يطابق مسار الموارد طلبك؟

    تذكَّر أنّ مسارًا مثل / أو /** سيطابق أي مسار. يمكنك أيضًا استخدام حرفَي بدل "*" أو "**" للمطابقة.

  • هل لديك تطبيق مطوِّر؟

    يجب ربط منتج واجهة برمجة التطبيقات بتطبيق مطوّر برامج للتحقّق من مفاتيحه.

التحقّق من طلبك

  • هل يتم تمرير مفتاح المستهلك في x-api-key header؟

    مثال:

    curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
  • هل تستخدم مفتاح عميل جيدًا؟

    تأكَّد من أنّه تمّت الموافقة على بيانات اعتماد التطبيق الذي تستخدمه لمنتج واجهة برمجة التطبيقات الخاص بك.

التحقُّق من سجلات الخدمة عن بُعد

  1. ابدأ الخدمة عن بُعد بتسجيل الدخول في debug level. يُرجى الاطّلاع على إعداد مستويات سجلّ الخدمة عن بُعد.

    يمكنك استخدام خيار -l debug في سطر الأوامر. مثال:

    apigee-remote-service-envoy -l debug
  2. محاولة الوصول إلى الهدف والتحقّق من السجلات

    تحقق من السجلات بحثًا عن سطر يبدو على النحو التالي:

    Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: []
    Selected: [helloworld]
    Eliminated: [helloworld2 doesn't match path: /hello]
    
  3. إعداد مستويات سجلّ الخدمة عن بُعد

    باستخدام علامة سطر أوامر، يمكنك بدء الخدمة عن بُعد بأحد أوضاع تصحيح الأخطاء التالية، بترتيب الإسهاب، حيث يكون debug مطوَّلاً، وerror أقلها:

    • debug - وضع التسجيل الأكثر تفصيلاً
    • info - الخيار التلقائي
    • warn
    • error - وضع التسجيل الأقل مطوَّلاً

    على سبيل المثال، لبدء الخدمة على مستوى debug:

    apigee-remote-service-envoy -l debug