عیب‌یابی

درحال مشاهده اسناد Apigee Edge هستید.
به اسناد Apigee X بروید.
اطلاعات

خطای Istio 404 (پیدا نشد)

عیب‌یابی خطای ۴۰۴ (پیدا نشد) در Istio می‌تواند ناامیدکننده باشد. امیدواریم این کار به شما کمک کند مکان‌هایی را که ممکن است مشکل داشته باشند پیدا کنید.

تداخل دروازه کارت جوکر

فقط یک تعریف «دروازه» می‌تواند از مقدار میزبان «*» کارت عام استفاده کند. اگر هر چیز دیگری را که شامل «دروازه» عام باشد مستقر کرده باشید، تماس‌های مشتری با وضعیت ۴۰۴ ناموفق خواهد بود.

مثال:

$ 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 غلاف بار کاری را دریافت کنید.

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

تجزیه‌وتحلیل‌ها وجود ندارد

اگر Analytics را در «میانای کاربری Analytics» نمی‌بینید، این دلایل احتمالی را درنظر بگیرید:

  • دریافت Apigee ممکن است چند دقیقه تأخیر داشته باشد
  • گزارش دسترسی Envoy gRPC به‌درستی پیکربندی نشده است
  • ‫Envoy نمی‌تواند به «سرویس از دور» دسترسی پیدا کند
  • «سرویس از دور» درحال بارگذاری ناموفق است

کلید میانای برنامه‌سازی کاربردی ناموجود یا بد رد نمی‌شود

اگر اعتبارسنجی کلید API به‌درستی کار نمی‌کند، این دلایل احتمالی را درنظر بگیرید:

کارگزار نیابتی مستقیم

پیکربندی 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 است.

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

    به‌خاطر داشته باشید که مسیری مثل / یا /** با هر مسیری مطابقت خواهد داشت. همچنین می‌توانید از نویسه‌های عام «*» یا «**» برای مطابقت استفاده کنید.

  • آیا «برنامه توسعه‌دهنده» دارید؟

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

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

  • آیا «کلید مصرف‌کننده» را در x-api-key header ارسال می‌کنید

    مثال:

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

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

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

  • «سرویس ازراه‌دور» را با گزارش‌گیری در debug level شروع کنید

    از گزینه -l debug در خط فرمان استفاده کنید.

  • تلاش برای دسترسی به هدف و بررسی گزارش‌ها

    گزارش‌ها را برای خطی که شبیه این است بررسی کنید:

    Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: []
    Selected: [helloworld]
    Eliminated: [helloworld2 doesn't match path: /hello]