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

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

خطأ 404 (لم يتم العثور على الصفحة) في Istio

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

تعارض بوابة البطاقة المميزة

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

مثال:

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

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

تتبُّع مكان تعذُّر عرض المسار

يشبه Istio البصل (أو ربما الغول)، فهو يتألف من طبقات. تتمثّل إحدى الطرق المنهجية لتصحيح الخطأ 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}')

الوصول إلى عبء العمل من خلال Sidecar:

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

أو إذا كان بروتوكول mTLS في Istio مفعَّلاً:

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

أو إذا كان بروتوكول mTLS في Istio مفعَّلاً:

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"، إليك الأسباب المحتملة:

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

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

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

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

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

Sidecar
  • تأكَّد من ضبط المستمع على وضع الاعتراض.
  • تحقَّق من إعدادات 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