شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
خطای ۴۰۴ (یافت نشد)
اشکالزدایی خطای ۴۰۴ (یافت نشد) در Istio میتواند خستهکننده باشد. امیدوارم این مطلب به شما کمک کند تا بفهمید مشکل از کجاست.
تداخل دروازه Wildcard
فقط یک تعریف Gateway میتواند وجود داشته باشد که از مقدار میزبان wildcard "*" استفاده کند. اگر هر چیز دیگری را که شامل wildcard Gateway است، پیادهسازی کردهاید، تماسهای کلاینت با وضعیت ۴۰۴ ناموفق خواهند بود.
مثال:
$ istioctl get gateways GATEWAY NAME HOSTS NAMESPACE AGE bookinfo-gateway * default 20s httpbin-gateway * default 3s
در این صورت، باید یکی از دروازههای متضاد را حذف یا تغییر دهید.
ردیابی کنید که مسیر در کجا با شکست مواجه میشود
Istio مانند یک پیاز (یا شاید یک غول) است، لایه لایه است. یک روش سیستماتیک برای اشکال زدایی یک خطای ۴۰۴، کار کردن به سمت بیرون از هدف است.
حجم کار بکاند
تأیید کنید که میتوانید از طریق محفظه بار جانبی به بار کاری دسترسی داشته باشید:
kubectl exec $WORKLOAD_POD -c istio-proxy -- curl localhost:80/headers
سایدکار عقب
آدرس سرویس خود را تنظیم کنید و آدرس IP مربوط به Pod بار کاری را دریافت کنید.
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
فقدان تحلیل
اگر در رابط کاربری آنالیتیکس، تجزیه و تحلیلها را مشاهده نمیکنید، این دلایل احتمالی را در نظر بگیرید:
- مصرف آپیجی را میتوان چند دقیقه به تأخیر انداخت
- گزارش دسترسی Envoy gRPC به درستی پیکربندی نشده است
- فرستاده نمیتواند به سرویس از راه دور دسترسی پیدا کند
- سرویس از راه دور در آپلود با مشکل مواجه میشود
کلید API ناموجود یا خراب رد نمیشود
اگر اعتبارسنجی کلید API به درستی کار نمیکند، این دلایل احتمالی را در نظر بگیرید:
پروکسی مستقیم
پیکربندی ext-authz را بررسی کنید.
- مطمئن شوید که شنونده برای رهگیری پیکربندی شده است.
- پیکربندی
ext-authzرا بررسی کنید.
درخواستهای نامعتبر بررسی و مجاز میشوند
- سرویس از راه دور برای باز شدن ناموفق پیکربندی شده است
- فرستاده برای بررسیهای RBAC پیکربندی نشده است
برای کسب اطلاعات در مورد چگونگی رسیدگی به این مشکلات، به موضوع مستندات Envoy زیر مراجعه کنید: External Authorization و به اطلاعات مربوط به ویژگی failure_mode_allow مراجعه کنید. این ویژگی به شما امکان میدهد رفتار فیلتر را در مورد خطاها تغییر دهید.
JWT ناقص یا خراب رد نمیشود
علت احتمالی این است که فیلتر Envoy JWT پیکربندی نشده است.
کلید API معتبر با خطا مواجه شد
علل احتمالی
- فرستاده نمیتواند به سرویس راه دور دسترسی پیدا کند
- مدارک شما معتبر نیست
- محصول API Apigee برای target و env پیکربندی نشده است
مراحل عیبیابی
محصول API خود را در Apigee بررسی کنید
- آیا برای محیط شما (آزمایش در مقابل تولید) فعال است؟
محصول باید به همان محیطی که سرویس راه دور شما در آن قرار دارد، متصل باشد.
- آیا به هدفی که به آن دسترسی دارید، محدود است؟
بخش اهداف سرویس از راه دور Apigee را بررسی کنید. به یاد داشته باشید، نام سرویس باید یک نام میزبان کاملاً واجد شرایط باشد. اگر یک سرویس Istio باشد، نام آن چیزی شبیه
helloworld.default.svc.cluster.localcode> خواهد بود - که نشان دهنده سرویسhelloworldدر فضای نامdefault. - آیا مسیر منبع با درخواست شما مطابقت دارد؟
به یاد داشته باشید، مسیری مانند
/یا/**با هر مسیری مطابقت دارد. همچنین میتوانید از کاراکترهای جایگزین '*' یا '**' برای تطبیق استفاده کنید. - آیا اپلیکیشن توسعهدهنده دارید؟
محصول API باید به یک برنامه توسعهدهنده متصل شود تا کلیدهای آن بررسی شوند.
درخواست خود را بررسی کنید
- آیا کلید مصرفکننده را در
x-api-key headerوارد میکنید؟مثال:
curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
- آیا از یک Consumer Key خوب استفاده میکنید؟
مطمئن شوید که اعتبارنامههای برنامهای که استفاده میکنید برای محصول API شما تأیید شده است.
گزارشهای سرویس از راه دور را بررسی کنید
- سرویس راه دور را با ثبت وقایع در
debug levelآغاز کنیداز گزینه
-l debugدر خط فرمان استفاده کنید. - سعی کنید به هدف خود دسترسی پیدا کنید و گزارشها را بررسی کنید
لاگها را بررسی کنید تا خطی شبیه به این پیدا کنید:
Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: [] Selected: [helloworld] Eliminated: [helloworld2 doesn't match path: /hello]