সমস্যার সমাধান

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন।
তথ্য

Istio 404 (খুঁজে পাওয়া যায়নি) সমস্যা

Istio-তে 404 (খুঁজে পাওয়া যায়নি) সমস্যার সমাধান করা বেশ কঠিন হতে পারে। আশা করি, এটি আপনাকে এমন একটি জায়গা দেবে যেখান থেকে আপনি ট্র্যাক করা শুরু করতে পারবেন যে কোথায় সমস্যা হচ্ছে।

ওয়াইল্ডকার্ড গেটওয়ে কনফ্লিক্ট

শুধুমাত্র একটি গেটওয়ে সংজ্ঞা থাকতে পারে যা ওয়াইল্ডকার্ড "*" হোস্ট ভ্যালু ব্যবহার করে। আপনি ওয়াইল্ডকার্ড গেটওয়ে অন্তর্ভুক্ত করে এমন কিছু অন্য জিনিস ডেপ্লয় করে থাকলে, ক্লায়েন্ট কল 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

Analytics সংক্রান্ত তথ্য নেই

Analytics UI-তে আপনি যদি অ্যানালিটিক্স দেখতে না পান, তাহলে এইসব সম্ভাব্য কারণ বিবেচনা করুন:

  • Apigee ইনটেক কয়েক মিনিট দেরি হতে পারে
  • Envoy gRPC অ্যাক্সেস লগ সঠিকভাবে কনফিগার করা হয়নি
  • Envoy রিমোট পরিষেবায় পৌঁছাতে পারছে না
  • রিমোট পরিষেবা আপলোড করতে পারছে না

API key না থাকা বা ভুল হলেও তা বাতিল করা হচ্ছে না

API কী যাচাইকরণ সঠিকভাবে কাজ না করলে, এইসব সম্ভাব্য কারণ বিবেচনা করুন:

সরাসরি প্রক্সি

ext-authz কনফিগারেশন চেক করুন।

Sidecar
  • ইন্টারসেপ্টের জন্য লিসনার কনফিগার করা আছে কিনা তা নিশ্চিত করুন।
  • ext-authz কনফিগারেশন চেক করুন।

অননুমোদিত অনুরোধ চেক করে অনুমতি দেওয়া হচ্ছে

  • ফেল ওপেনের জন্য কনফিগার করা রিমোট পরিষেবা
  • RBAC চেকের জন্য Envoy কনফিগার করা নেই

এইসব সমস্যার সমাধান কীভাবে করবেন সেই বিষয়ে তথ্য পেতে, নিম্নলিখিত Envoy ডকুমেন্টেশন বিষয় দেখুন: এক্সটার্নাল অথরাইজেশন, এবং failure_mode_allow প্রপার্টি সম্পর্কে তথ্য দেখুন। এই প্রপার্টি আপনাকে ত্রুটি হলে ফিল্টারের আচরণ পরিবর্তন করার অনুমতি দেয়।

JWT না থাকা বা ভুল JWT প্রত্যাখ্যান না করা

সম্ভাব্য কারণ হল, Envoy JWT ফিল্টার কনফিগার করা নেই।

সঠিক API key কাজ করে না

সম্ভাব্য কারণ

  • Envoy রিমোট পরিষেবায় পৌঁছাতে পারছে না
  • আপনার ক্রেডেনশিয়াল সঠিক নয়
  • টার্গেট ও এনভায়রনমেন্টের জন্য Apigee API প্রোডাক্ট কনফিগার করা নেই

সমস্যার সমাধানকারী ধাপ

Apigee-তে আপনার API প্রোডাক্ট চেক করা

  • আপনার এনভায়রনমেন্টে (টেস্ট বনাম প্রোডাকশন) এটি কি চালু আছে?

    আপনার রিমোট পরিষেবার মতো একই এনভায়রনমেন্টে প্রোডাক্টটি অবশ্যই আবদ্ধ থাকতে হবে।

  • আপনি যে টার্গেট অ্যাক্সেস করছেন সেটির সাথে কি এটি যুক্ত?

    Apigee রিমোট পরিষেবা টার্গেট বিভাগ চেক করুন। মনে রাখবেন, পরিষেবার নাম অবশ্যই একটি সম্পূর্ণ কোয়ালিফায়েড হোস্ট নেম হতে হবে। এটি Istio পরিষেবা হলে, নামটি এই ধরনের কিছু হবে helloworld.default.svc.cluster.localcode> - যা helloworld পরিষেবাকে default নেমস্পেসে দেখায়।

  • রিসোর্স পাথ কি আপনার অনুরোধের সাথে মিলছে?

    মনে রাখবেন, / বা /**-এর মতো পাথ যেকোনও পাথের সাথে ম্যাচ করবে। এছাড়াও, ম্যাচ করানোর জন্য আপনি '*' বা '**' ওয়াইল্ডকার্ড ব্যবহার করতে পারেন।

  • আপনার কি কোনও ডেভেলপার অ্যাপ আছে?

    API প্রোডাক্টের কী চেক করার জন্য সেটিকে অবশ্যই কোনও ডেভেলপার অ্যাপের সাথে যুক্ত থাকতে হবে।

আপনার অনুরোধ চেক করুন

  • আপনি কি x-api-key header-এ কনজিউমার কী পাস করছেন?

    উদাহরণ:

    curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
  • আপনি কি ভালো কনজিউমার কী ব্যবহার করছেন?

    আপনি যে অ্যাপ ব্যবহার করছেন সেটির ক্রেডেনশিয়াল আপনার API প্রোডাক্টের জন্য অনুমোদিত কিনা তা নিশ্চিত করুন।

রিমোট পরিষেবার লগ চেক করা

  • debug level-এ লগিং সহ রিমোট পরিষেবা শুরু করুন

    কমান্ড লাইনে -l debug বিকল্প ব্যবহার করুন।

  • আপনার টার্গেট অ্যাক্সেস করার চেষ্টা করুন এবং লগ চেক করুন

    লগে এমন কোনও লাইন আছে কিনা দেখুন:

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