أنت الآن بصدد الاطّلاع على مستندات 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}')الوصول إلى عبء العمل من خلال التطبيق الجانبي:
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"، إليك الأسباب المحتملة:
- قد يتأخّر استيعاب Apigee لبضع دقائق
- لم يتم إعداد سجلّ الوصول إلى gRPC في Envoy بشكل صحيح
- يتعذّر على Envoy الوصول إلى "الخدمة البعيدة"
- تعذُّر تحميل "الخدمة عن بُعد"
عدم رفض مفتاح واجهة برمجة التطبيقات غير المتوفّر أو غير الصالح
إذا لم تنجح عملية التحقّق من صحة مفتاح واجهة برمجة التطبيقات بشكلٍ سليم، يُرجى مراعاة الأسباب المحتملة التالية:
الخادم الوكيل المباشر
تحقَّق من إعدادات ext-authz.
- تأكَّد من ضبط المستمع على وضع الاعتراض.
- تحقَّق من إعدادات
ext-authz.
يتم التحقّق من الطلبات غير الصالحة والسماح بها
- تم ضبط "الخدمة عن بُعد" على وضع "السماح بالوصول عند التعذّر"
- لم يتم ضبط Envoy لإجراء عمليات التحقّق من التحكم المستند إلى الأدوار (RBAC)
للحصول على معلومات حول كيفية حلّ هذه المشاكل، يُرجى الرجوع إلى موضوع مستندات Envoy التالي: الترخيص الخارجي، والرجوع إلى معلومات حول السمة failure_mode_allow. تتيح لك هذه السمة تغيير سلوك الفلتر عند حدوث أخطاء.
عدم رفض رمز ويب JSON غير متوفّر أو غير صالح
السبب المحتمل هو عدم ضبط فلتر 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"
- هل تستخدم Consumer Key جيّدًا؟
تأكَّد من الموافقة على بيانات الاعتماد من التطبيق الذي تستخدمه لمنتج واجهة برمجة التطبيقات.
التحقّق من سجلّات "الخدمة عن بُعد"
- بدء "الخدمة عن بُعد" مع تسجيل الدخول في
debug levelاستخدِم الخيار
-l debugفي سطر الأوامر. - محاولة الوصول إلى هدفك ومراجعة السجلات
ابحث في السجلّات عن سطر يشبه ما يلي:
Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: [] Selected: [helloworld] Eliminated: [helloworld2 doesn't match path: /hello]