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

আপনি 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

যদি তাই হয়, তাহলে আপনাকে বিরোধপূর্ণ গেটওয়েগুলির একটি মুছতে বা পরিবর্তন করতে হবে৷

যেখানে রুট ব্যর্থ হচ্ছে ট্রেস করুন

ইস্টিও একটি পেঁয়াজের মতো (বা, সম্ভবত, একটি ওগ্রে), এটির স্তর রয়েছে। একটি 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-তে বিশ্লেষণ দেখতে না পান, তাহলে এই সম্ভাব্য কারণগুলি বিবেচনা করুন:

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

অনুপস্থিত বা খারাপ API কী প্রত্যাখ্যান করা হচ্ছে না

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

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

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

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

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

  • দূরবর্তী পরিষেবা ব্যর্থ খোলার জন্য কনফিগার করা হয়েছে৷
  • RBAC চেকের জন্য দূত কনফিগার করা হয়নি

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

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

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

বৈধ API কী ব্যর্থ হয়েছে৷

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

  • দূত রিমোট সার্ভিসে পৌঁছাতে পারে না
  • আপনার শংসাপত্র বৈধ নয়
  • Apigee API পণ্য লক্ষ্য এবং env এর জন্য কনফিগার করা হয়নি৷

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

Apigee এ আপনার API পণ্য পরীক্ষা করুন

  • এটা কি আপনার পরিবেশের জন্য সক্ষম (পরীক্ষা বনাম প্রোড)?

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

  • এটা আপনি অ্যাক্সেস করছি লক্ষ্য আবদ্ধ?

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

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

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

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

    এপিআই প্রোডাক্টকে অবশ্যই একটি ডেভেলপার অ্যাপের সাথে আবদ্ধ হতে হবে তার কী চেক করতে।

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

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

    উদাহরণ:

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

    আপনি যে অ্যাপটি ব্যবহার করছেন তার শংসাপত্রগুলি আপনার 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