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

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

Istio 404 (খুঁজে পাওয়া যায়নি) ত্রুটি

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

ওয়াইল্ডকার্ড গেটওয়ে দ্বন্দ্ব

শুধুমাত্র একটি গেটওয়ে ডেফিনিশন থাকতে পারে যেখানে ওয়াইল্ডকার্ড "*" হোস্ট ভ্যালু ব্যবহৃত হয়। যদি আপনি ওয়াইল্ডকার্ড গেটওয়ে সহ অন্য কিছু ডেপ্লয় করে থাকেন, তাহলে ক্লায়েন্ট কলগুলো 404 স্ট্যাটাস সহ ব্যর্থ হবে।

উদাহরণ:

$ istioctl get gateways
GATEWAY NAME         HOSTS     NAMESPACE   AGE
bookinfo-gateway     *         default     20s
httpbin-gateway      *         default     3s

যদি তাই হয়, তাহলে আপনাকে সাংঘর্ষিক গেটওয়েগুলোর মধ্যে একটি মুছে ফেলতে বা পরিবর্তন করতে হবে।

রুটটি কোথায় ব্যর্থ হচ্ছে তা চিহ্নিত করুন।

ইস্টিও একটি পেঁয়াজের (কিংবা হয়তো একটি রাক্ষসের) মতো, এর স্তর রয়েছে। একটি 404 ডিবাগ করার একটি পদ্ধতিগত উপায় হলো টার্গেট থেকে বাইরের দিকে কাজ করা।

ব্যাকএন্ডের কাজের চাপ

সাইডকার থেকে আপনি ওয়ার্কলোডটি অ্যাক্সেস করতে পারছেন কিনা তা যাচাই করুন:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl localhost:80/headers

ব্যাকএন্ড সাইডকার

আপনার সার্ভিস অ্যাড্রেস সেট করুন এবং ওয়ার্কলোড পডের আইপি অ্যাড্রেসটি সংগ্রহ করুন।

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

অনুপস্থিত বিশ্লেষণ

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

  • অ্যাপিজি গ্রহণ কয়েক মিনিট বিলম্বিত হতে পারে।
  • Envoy gRPC অ্যাক্সেস লগ সঠিকভাবে কনফিগার করা হয়নি
  • এনভয় রিমোট সার্ভিসে পৌঁছাতে পারছে না।
  • রিমোট সার্ভিস আপলোড করতে ব্যর্থ হচ্ছে

অনুপস্থিত বা ত্রুটিপূর্ণ এপিআই কী প্রত্যাখ্যান করা হচ্ছে না

যদি এপিআই কী যাচাইকরণ সঠিকভাবে কাজ না করে, তাহলে এই সম্ভাব্য কারণগুলো বিবেচনা করুন:

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

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

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

অবৈধ অনুরোধগুলো যাচাই করে অনুমোদন করা হচ্ছে।

  • ফেইল ওপেনের জন্য কনফিগার করা রিমোট সার্ভিস
  • আরবিএসি চেকের জন্য এনভয় কনফিগার করা নেই

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

অনুপস্থিত বা ত্রুটিপূর্ণ JWT প্রত্যাখ্যান করা হচ্ছে না।

সম্ভাব্য কারণটি হলো এনভয় জেডব্লিউটি ফিল্টারটি কনফিগার করা নেই।

বৈধ এপিআই কী ব্যর্থ হয়েছে

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

  • এনভয় রিমোট সার্ভিসে পৌঁছাতে পারছে না।
  • আপনার পরিচয়পত্র বৈধ নয়।
  • Apigee API প্রোডাক্টটি টার্গেট এবং এনভায়রনমেন্টের জন্য কনফিগার করা হয়নি

সমস্যা সমাধানের পদক্ষেপ

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

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

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

  • এটি কি আপনার অ্যাক্সেস করা টার্গেটের সাথে আবদ্ধ?

    Apigee রিমোট সার্ভিস টার্গেট সেকশনটি দেখুন। মনে রাখবেন, সার্ভিসের নামটি অবশ্যই একটি সম্পূর্ণ হোস্ট নেম হতে হবে। যদি এটি একটি Istio সার্ভিস হয়, তাহলে নামটি হবে helloworld.default.svc.cluster.local এর মতো কিছু একটা — যা default নেমস্পেসের helloworld সার্ভিসটিকে নির্দেশ করে।

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

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

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

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

আপনার অনুরোধ যাচাই করুন

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

    উদাহরণ:

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

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

রিমোট সার্ভিস লগগুলি পরীক্ষা করুন

  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