عیب یابی

شما در حال مشاهده مستندات 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.local code> خواهد بود - که نشان دهنده سرویس helloworld در فضای نام default .

  • آیا مسیر منبع با درخواست شما مطابقت دارد؟

    به یاد داشته باشید، مسیری مانند / یا /** با هر مسیری مطابقت دارد. همچنین می‌توانید از کاراکترهای جایگزین '*' یا '**' برای تطبیق استفاده کنید.

  • آیا اپلیکیشن توسعه‌دهنده دارید؟

    محصول API باید به یک برنامه توسعه‌دهنده متصل شود تا کلیدهای آن بررسی شوند.

درخواست خود را بررسی کنید

  • آیا کلید مصرف‌کننده را در x-api-key header وارد می‌کنید؟

    مثال:

    curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
  • آیا از یک Consumer Key خوب استفاده می‌کنید؟

    مطمئن شوید که اعتبارنامه‌های برنامه‌ای که استفاده می‌کنید برای محصول API شما تأیید شده است.

گزارش‌های سرویس از راه دور را بررسی کنید

  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