আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন। তথ্য
সমস্যার উপসর্গ
Envoy Proxy,
Apigee Adapter for Envoy-এর মাধ্যমে ইনভোক করা হলে HTTP 403 Forbidden সমস্যার কারণে কাজ করে না।
সমস্যা সংক্রান্ত মেসেজ
এই সমস্যার মেসেজটি দেখানো হয়:
HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Tue, 03 Nov 2020 00:20:10 GMT server: istio-envoy
সম্ভাব্য কারণ
নিম্নলিখিত শর্তগুলির মধ্যে কোনও একটি পূরণ হলে Envoy প্রক্সি একটি HTTP 403 সমস্যা
দেখাবে:
| কারণ | বিবরণ | এর জন্য প্রযোজ্য সমস্যার সমাধান সংক্রান্ত নির্দেশাবলী |
|---|---|---|
| API প্রোডাক্ট চালু করা নেই | নির্দিষ্ট এনভায়রনমেন্টের জন্য API প্রোডাক্ট চালু করা নেই। | এজ পাবলিক ও প্রাইভেট ক্লাউড ব্যবহারকারী |
| API প্রোডাক্টে টার্গেট পরিষেবা URI পাথ নেই | টার্গেট পরিষেবার URI পাথ অনুপস্থিত বা API রিসোর্সের অধীনে API প্রোডাক্টে যোগ করা হয়নি। | এজ পাবলিক ও প্রাইভেট ক্লাউড ব্যবহারকারী |
| API প্রোডাক্টে হোস্টনেম নেই | ক্লায়েন্ট API অনুরোধে দেওয়া হোস্টনেম Apigee-এর অধীনে API প্রোডাক্টে রিমোট পরিষেবা টার্গেটে নেই। | এজ পাবলিক ও প্রাইভেট ক্লাউড ব্যবহারকারী |
| অনুরোধের হেডারে API key নেই | x-api-key HTTP হেডারে API key পাস করা হয়নি। |
এজ পাবলিক ও প্রাইভেট ক্লাউড ব্যবহারকারী |
| ভুল API key | অনুরোধের অংশ হিসেবে যে API কী পাঠানো হয়েছে সেটি সঠিক নয়। | এজ পাবলিক ও প্রাইভেট ক্লাউড ব্যবহারকারী |
| Apigee Adapter for Envoy রিমোট-সার্ভিস API প্রক্সির সাথে যোগাযোগ করতে পারছে না | Apigee Adapter for Envoy, রিমোট-পরিষেবা API প্রক্সির সাথে যোগাযোগ করতে পারছে না। | এজ পাবলিক ও প্রাইভেট ক্লাউড ব্যবহারকারী |
| Envoy proxy, Apigee Adapter for Envoy-এর সাথে যোগাযোগ করতে পারছে না | Envoy proxy, Apigee Adapter for Envoy-এর সাথে যোগাযোগ করতে পারছে না | এজ পাবলিক ও প্রাইভেট ক্লাউড ব্যবহারকারী |
শুরু করার আগে
- আপনি Envoy প্রক্সি থেকে
403 Forbiddenউত্তর মেসেজ পাচ্ছেন কিনা তা যাচাই করুন। যেমন:curl -i -H "x-api-key: $API_KEY" http://httpbin:8080/echo HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Tue, 12 Jan 2021 08:18:08 GMT server: envoy RBAC: access denied
ডিবাগ লগ চালু করুন:
সমস্যা সম্পর্কে আরও বিবরণ ক্যাপচার করতে, নিশ্চিত করুন যে আপনি Apigee Adapter for Envoy-তে ডিবাগ লগ চালু করেছেন। তা না হলে, Envoy-এর জন্য Apigee অ্যাডাপ্টর বন্ধ করুন এবং নিম্নলিখিত কমান্ড ব্যবহার করে ডিবাগ লগ চালু করে এটি আবার চালু করুন:
apigee-remote-service-envoy -c config.yaml -l debug
কারণ: API প্রোডাক্ট চালু করা নেই
Envoy Proxy-এর ব্যবহার করা নির্দিষ্ট API প্রোডাক্ট, API কল ইনভোক করা নির্দিষ্ট এনভায়রনমেন্টে চালু না থাকলে এই সমস্যাটি হবে।
ডায়াগনসিস
সমস্যাটি ডায়াগনসিস করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- উপরে ২ নম্বর ধাপে যেভাবে ব্যাখ্যা করা হয়েছে সেইভাবে ডিবাগ লগ চালু করুন।
- Envoy-এর জন্য Apigee অ্যাডাপ্টারের লগ চেক করুন এবং যাচাই করুন যে
Authorizing requestবিভাগের অধীনে নিম্নলিখিত মেসেজটি দেখানো হচ্ছে কিনা:product: API_PRODUCT_NAME not found
ডিবাগ লগ আউটপুটের নমুনা:
2021-01-12T08:18:08.124Z DEBUG auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil) 2021-01-12T08:18:08.124Z DEBUG auth/verify_api_key.go:106 fetchToken fetching: 7mQIG... 2021-01-12T08:18:08.589Z DEBUG auth/auth.go:125 using api key from request 2021-01-12T08:18:08.589Z DEBUG auth/auth.go:157 Authenticate success: &auth.Context{Context:(*server.Handle r)(0xc0001a0600), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"}, Expires:time.Time{wall:0x0, ext:63746037188, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[] string{""}, APIKey:"7mQIG..."} 2021-01-12T08:18:08.589Z DEBUG product/manager.go:89 Authorizing request: products: [ENVOY-PRODUCT-1] scopes: [] operation: GET /echo target: httpbin:8080 - product: ENVOY-PRODUCT-1 not found
উপরের উদাহরণে দেখানো হয়েছে যে API প্রোডাক্ট
ENVOY-PRODUCT-1, Apigee Adapter for Envoy-তে পাওয়া যায়নি।Envoy লগিংয়ের জন্য Apigee Adapter সম্পর্কে আরও তথ্যের জন্য, লগিং দেখুন।
- API অনুরোধ অনুমোদন করার সময় আপনি এই মেসেজটি দেখলে, এটি সম্ভবত ইঙ্গিত করে যে আপনি যে নির্দিষ্ট এনভায়রনমেন্টে API কল করছেন, সেখানে নির্দিষ্ট API প্রোডাক্ট চালু করা নেই।
- এটি যাচাই করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- Edge UI-তে লগ-ইন করুন।
- প্রকাশ করুন > API প্রোডাক্ট পৃষ্ঠায়, Envoy-এর জন্য Apigee Adapter কনফিগার করার জন্য আপনি যে নির্দিষ্ট API প্রোডাক্ট ব্যবহার করেছেন সেটিতে ক্লিক করুন।
- আপনি যে নির্দিষ্ট এনভায়রনমেন্টে API অনুরোধ করছেন সেটি API প্রোডাক্টে চালু আছে কিনা তা যাচাই করুন।
- API প্রোডাক্টে নির্দিষ্ট এনভায়রনমেন্ট চালু করা না থাকলে, এটিই এই সমস্যার কারণ।
- নির্দিষ্ট এনভায়রনমেন্ট আগেই চালু করা থাকলে, কারণ: API প্রোডাক্টে টার্গেট পরিষেবা URI পাথ নেই বিকল্পে যান।
রেজোলিউশন
API প্রোডাক্টে নির্দিষ্ট এনভায়রনমেন্ট চালু করা না থাকলে, সমস্যার সমাধান করতে নিচে উল্লেখ করা ধাপগুলি অনুসরণ করুন:
- Edge UI-তে লগ-ইন করুন।
- প্রকাশ করুন > API প্রোডাক্ট পৃষ্ঠায়, Envoy-এর জন্য Apigee Adapter কনফিগার করার জন্য আপনি যে নির্দিষ্ট API প্রোডাক্ট ব্যবহার করেছেন সেটিতে ক্লিক করুন।
- API প্রোডাক্ট > প্রোডাক্টের নাম পৃষ্ঠায়, এডিট করুন বিকল্পে ক্লিক করুন।
- আপনি যে নির্দিষ্ট এনভায়রনমেন্টে API অনুরোধ করতে চান, সেটি চালু করতে, প্রাসঙ্গিক এনভায়রনমেন্টের চেকবক্সে টিকচিহ্ন দিন।
- সেভ করুন বিকল্পে ক্লিক করুন।
কারণ: API প্রোডাক্টে টার্গেট পরিষেবার URI পাথ নেই
Envoy Proxy-তে ব্যবহৃত নির্দিষ্ট API প্রোডাক্টে টার্গেটের URI পাথ উল্লেখ করা না থাকলে এই সমস্যাটি হবে।
ডায়াগনসিস
সমস্যাটি ডায়াগনসিস করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- উপরে ২ নম্বর ধাপে যেভাবে ব্যাখ্যা করা হয়েছে সেইভাবে ডিবাগ লগ চালু করুন।
-
Envoy লগের জন্য Apigee অ্যাডাপ্টার চেক করুন এবং যাচাই করুন যে নিম্নলিখিত মেসেজটি
Authorizing request-এর অধীনে নির্দিষ্ট টার্গেটের সাথে যুক্ত নির্দিষ্ট API প্রোডাক্টের জন্য দেখানো হচ্ছে:no path: REQUEST_URI_PATH
ডিবাগ লগ আউটপুটের নমুনা:
2021-01-12T08:09:02.604Z DEBUG auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil) 2021-01-12T08:09:02.605Z DEBUG auth/auth.go:125 using api key from request 2021-01-12T08:09:02.605Z DEBUG auth/auth.go:157 Authenticate success: &auth.Context{Context:(*server.Handle r)(0xc0001a4180), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"}, Expires:time.Time{wall:0x0, ext:63746036507, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[] string{""}, APIKey:"7mQIG..."} 2021-01-12T08:09:02.605Z DEBUG product/manager.go:89 Authorizing request: products: [ENVOY-PRODUCT-1] scopes: [] operation: GET /echo1 target: httpbin:8080 - product: ENVOY-PRODUCT-1 no path: /echo1 2021-01-12T08:09:02.605Z DEBUG server/authorization.go:228 sending ok (actual: PERMISSION_DENIED)
স্যাম্পেল আউটপুটে এই মেসেজটি দেখানো হয়েছে:
no path: /echo1
এর থেকে বোঝা যায় যে API প্রোডাক্টে
/echo1পাথটি পাওয়া যায়নিENVOY-PRODUCT-1। - আপনি যদি Apigee Adapter for Envoy-এর
ডিবাগ লগে
no path: REQUEST_URI_PATHমেসেজটি দেখতে পান, তাহলে এটিই এই সমস্যার কারণ। না হলে, কারণ: API প্রোডাক্টে হোস্টনেম নেই দেখুন।
রেজোলিউশন
নির্দিষ্ট টার্গেটের জন্য API প্রোডাক্টে নির্দিষ্ট অনুরোধ URI যোগ করা না থাকলে, সমস্যা সমাধান করতে নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- Edge UI-তে লগ-ইন করুন।
- প্রকাশ করুন > API প্রোডাক্ট পৃষ্ঠায়, আপনি Envoy-এর জন্য Apigee Adapter কনফিগার করার জন্য যে নির্দিষ্ট API প্রোডাক্ট ব্যবহার করেছেন সেটিতে ক্লিক করুন।
- API প্রোডাক্ট > প্রোডাক্টের নাম পৃষ্ঠায়, এডিট করুন বিকল্পে ক্লিক করুন।
- API রিসোর্স প্যানেলে, API প্রোডাক্টে API অনুরোধ URI যোগ করুন।
- Envoy-এর জন্য Apigee অ্যাডাপ্টারের লগ মনিটর করুন এবং Envoy-এর জন্য Apigee অ্যাডাপ্টার আপডেট করা API প্রোডাক্ট না পাওয়া পর্যন্ত অপেক্ষা করুন। এর পরে, সমাধান যাচাই করতে আরেকটি API অনুরোধ পাঠান।
কারণ: API প্রোডাক্টে হোস্টনেম নেই
Envoy Proxy-এর ব্যবহার করা নির্দিষ্ট API প্রোডাক্টে টার্গেট হোস্টনেম ও পোর্ট কম্বিনেশন যোগ করা না থাকলে এই সমস্যা হবে।
ডায়াগনসিস
সমস্যাটি ডায়াগনসিস করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- উপরে ২ নম্বর ধাপে যেভাবে ব্যাখ্যা করা হয়েছে সেইভাবে ডিবাগ লগ চালু করুন।
Envoy লগের জন্য Apigee অ্যাডাপ্টার চেক করুন এবং যাচাই করুন যে নিম্নলিখিত মেসেজটি
Authorizing request-এর অধীনে নির্দিষ্ট API প্রোডাক্টের জন্য দেখানো হয়েছে:no targets: HOSTNAME:PORT
ডিবাগ লগ আউটপুটের নমুনা:
2021-01-12T08:12:06.019Z DEBUG auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil) 2021-01-12T08:12:06.019Z DEBUG auth/auth.go:125 using api key from request 2021-01-12T08:12:06.019Z DEBUG auth/auth.go:157 Authenticate success: &auth.Context{Context:(*server.Handle r)(0xc0001a4180), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"}, Expires:time.Time{wall:0x0, ext:63746036507, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[] string{""}, APIKey:"7mQIG..."} 2021-01-12T08:12:06.019Z DEBUG product/manager.go:89 Authorizing request: products: [ENVOY-PRODUCT-1] scopes: [] operation: GET /echo target: httpbin1:8080 - product: ENVOY-PRODUCT-1 no targets: httpbin1:8080 2021-01-12T08:12:06.020Z DEBUG server/authorization.go:228 sending ok (actual: PERMISSION_DENIED)
উপরের উদাহরণে দেখানো হয়েছে যে হোস্টনেম ও পোর্ট কম্বিনেশন
httpbin1:8080API প্রোডাক্টENVOY-PRODUCT-1-এ পাওয়া যায়নি।- অনুরোধ অনুমোদন করার সময় Apigee Adapter for Envoy লগে
no targets: HOSTNAME:PORTমেসেজ সহ কোনও এন্ট্রি থাকলে, এটিই হল সমস্যার কারণ। না হলে, এখানে যান: কারণ: অনুরোধের হেডারে API key নেই।
রেজোলিউশন
API প্রোডাক্টে টার্গেট হোস্টনেম ও পোর্ট কম্বিনেশন যোগ করা না থাকলে, সমস্যা সমাধানের জন্য নিচের ধাপগুলি অনুসরণ করুন:
- Edge UI-তে লগ-ইন করুন।
- প্রকাশ করুন > API প্রোডাক্ট পৃষ্ঠায়, আপনি Envoy-এর জন্য Apigee Adapter কনফিগার করার জন্য যে নির্দিষ্ট API প্রোডাক্ট ব্যবহার করেছেন সেটিতে ক্লিক করুন।
- API প্রোডাক্ট > প্রোডাক্টের নাম পৃষ্ঠায়, এডিট করুন বিকল্পে ক্লিক করুন।
Apigee রিমোট সার্ভিস টার্গেট প্যানেলে, টার্গেট হোস্টনেম এবং পোর্ট যোগ করে সেভ করুন বিকল্পে ক্লিক করুন।
UI-তে Apigee রিমোট সার্ভিস টার্গেট বিভাগ দেখতে না পেলে,
apigee-remote-service-targetsনামের কাস্টম অ্যাট্রিবিউট API প্রোডাক্টে যোগ করুন এবং Edge API ব্যবহার করে HOSTNAME:PORT ভ্যালু যোগ করুন। যেমন:curl https://api.enterprise.apigee.com/v1/organizations/$ORG/apiproducts/$ENVOY_PRODUCT \ -X GET \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type:application/json" \ -d \ { "apiResources": [ "/echo", "/verifyApiKey" ], "approvalType": "auto", "attributes": [ { "name": "access", "value": "public" }, { "name": "apigee-remote-service-targets", "value": "localhost:8080" } ], "createdAt": 1610435989556, "createdBy": "---masked---", "description": "", "displayName": "ENVOY-PRODUCT-1", "environments": [ "test" ], "lastModifiedAt": 1612234134060, "lastModifiedBy": "---masked---", "name": "ENVOY-PRODUCT-1", "proxies": [ "remote-service" ], "scopes": [] }- উপরের টাস্কটি সম্পূর্ণ হয়ে গেলে, Apigee Adapter for Envoy-এর লগ মনিটর করুন এবং Apigee Adapter for Envoy আপডেট করা API প্রোডাক্ট না পাওয়া পর্যন্ত অপেক্ষা করুন। এর পরে, সমাধান যাচাই করতে আরেকটি API অনুরোধ পাঠান।
কারণ: অনুরোধের হেডারে API key নেই
অনুরোধের হেডার হিসেবে API কী না পাঠালে এই সমস্যা হবে।
ডায়াগনসিস
সমস্যাটি ডায়াগনসিস করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- উপরে ২ নম্বর ধাপে যেভাবে ব্যাখ্যা করা হয়েছে সেইভাবে ডিবাগ লগ চালু করুন।
- Envoy-এর জন্য Apigee অ্যাডাপ্টারের লগ চেক করুন এবং যাচাই করুন যে আপনি
Authenticate errorবিভাগের অধীনে[missing authentication]মেসেজটি দেখতে পাচ্ছেন।ডিবাগ লগ আউটপুটের নমুনা:
2021-01-12T08:20:31.461Z DEBUG auth/auth.go:98 Authenticate: key: , claims: map[string]interface {}(nil) 2021-01-12T08:20:31.461Z DEBUG auth/auth.go:159 Authenticate error: &auth.Context{Context:(*server.Handler) (0xc0001a0600), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [missing authentication] 2021-01-12T08:20:31.461Z DEBUG server/authorization.go:205 sending denied: UNAUTHENTICATED 2021-01-12T08:20:32.448Z DEBUG server/header_context.go:68 No context header x-apigee-api, using target header : :authority
উপরে দেখানো নমুনা আউটপুটে
[missing authentication]মেসেজটি রয়েছে। এই মেসেজ থেকে বোঝা যায় যে API কীটি অনুরোধ হেডার হিসেবে পাস করা হয়নি। - Apigee Adapter for Envoy লগে
[missing authentication]-এর অধীনেAuthenticate errorবিভাগ সহ কোনও লগ এন্ট্রি থাকলে, এটিই সমস্যার কারণ। যদি না হয়, তাহলে কারণ: ভুল API কী-তে যান।
রেজোলিউশন
Envoy লগের জন্য Apigee অ্যাডাপ্টারে [missing authentication] সমস্যাটি দেখা গেলে, সমস্যাটি সমাধান করতে নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- ক্লায়েন্ট API অনুরোধে HTTP হেডার
x-api-keyব্যবহার করে API কী পাঠিয়েছে কিনা তা চেক করুন। তা না হলে, ক্লায়েন্টকে HTTP হেডারে API কী পাঠাতে বলুনx-api-key। - Envoy কনফিগারেশন ফাইলের জন্য Apigee অ্যাডাপ্টার চেক করুন এবং যাচাই করুন যে ডিফল্ট API কী
হেডার নাম
x-api-keyপরিবর্তন করা হয়েছে, যেমন:apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | global: tls: ... tenant: ... auth: target_header: api-keyউপরের উদাহরণে, ডিফল্ট API কী হেডার নাম পরিবর্তন করে
api-keyকরা হয়েছে। এই ক্ষেত্রে, আপনাকে হেডারapi-key-এর অংশ হিসেবে API কী পাস করতে হবে। - ডিফল্ট API কী হেডার নামের পরিবর্তন করা হয়ে থাকলে, ক্লায়েন্টকে আপডেট করা API কী হেডার নাম ব্যবহার করতে বলুন এবং আরেকটি API অনুরোধ পাঠিয়ে দেখুন যে সমস্যার সমাধান হয়েছে কিনা।
কারণ: ভুল API key
অনুরোধের হেডারের অংশ হিসেবে ভুল API কী পাস করা হলে এই সমস্যা হবে।
ডায়াগনসিস
সমস্যাটি ডায়াগনসিস করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- উপরে ২ নম্বর ধাপে যেভাবে ব্যাখ্যা করা হয়েছে সেইভাবে ডিবাগ লগ চালু করুন।
- Envoy-এর জন্য Apigee অ্যাডাপ্টারের লগ চেক করুন এবং যাচাই করুন যে আপনি মেসেজটি
[permission denied]Authenticate errorবিভাগের অধীনে দেখতে পাচ্ছেন। এটি সাধারণত অ্যাডাপ্টার API কী পাওয়ার পরে দেখানো হয়, যাfetchToken fetching: API_KEYমেসেজ দ্বারা ইঙ্গিত করা হয়।ডিবাগ লগ আউটপুটের নমুনা:
2021-01-12T05:01:07.198Z DEBUG auth/auth.go:98 Authenticate: key: 123, claims: map[string]interface {}(nil) 2021-01-12T05:01:07.198Z DEBUG auth/verify_api_key.go:106 fetchToken fetching: API_KEY 2021-01-12T05:01:09.102Z DEBUG server/header_context.go:68 No context header x-apigee-api, using target header: :authority 2021-01-12T05:01:09.831Z DEBUG auth/auth.go:159 Authenticate error: &auth.Context{Context:(*server.Handler)(0xc0001640c0), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [permission denied] 2021-01-12T05:01:09.832Z DEBUG server/authorization.go:228 sending ok (actual: PERMISSION_DENIED)
এই উদাহরণে, API অনুরোধে পাঠানো API কীটি সঠিক ছিল না।
- Envoy-এর জন্য Apigee অ্যাডাপ্টারের লগে
Authenticate errorবিভাগের অধীনে[permission denied]সহ কোনও লগ এন্ট্রি থাকলে, এটি ইঙ্গিত করে যে অনুরোধের অংশ হিসেবে পাস করা API কীটি অবৈধ এবং এটিই সমস্যার কারণ। যদি না হয়, তাহলে কারণ: Apigee Adapter for Envoy রিমোট-সার্ভিস API প্রক্সির সাথে যোগাযোগ করতে পারছে না।
রেজোলিউশন
Envoy লগের জন্য Apigee অ্যাডাপ্টারের Authenticate
error বিভাগে [permission denied] মেসেজটি দেখা গেলে, সমস্যা সমাধান করতে
নিচে উল্লেখ করা ধাপগুলি অনুসরণ করুন:
- API প্রোডাক্টের সাথে কানেক্ট করা অ্যাপ্লিকেশনে পাওয়া API কী ভ্যালুর সাথে API অনুরোধে পাঠানো API কী চেক করুন।
- ক্লায়েন্ট যে API কী ব্যবহার করছে সেটি সঠিক না হলে, ক্লায়েন্টকে সঠিক API কী পাঠাতে বলুন।
- ক্লায়েন্টের ব্যবহার করা API কী সঠিক হলে এবং আপনি এখনও HTTP
403সংক্রান্ত সমস্যা দেখতে পেলে, এই বিষয়ে আরও তদন্ত করতে Apigee Edge সহায়তা টিমের সাথে যোগাযোগ করুন।
কারণ: Apigee Adapter for Envoy, রিমোট-সার্ভিস API প্রক্সির সাথে যোগাযোগ করতে পারছে না
কনফিগার করা রিমোট সার্ভিস হোস্ট ভুল হলে, Envoy-এর জন্য Apigee অ্যাডাপ্টার রিমোট সার্ভিস API প্রক্সির সাথে যোগাযোগ করতে না পারলে এই সমস্যা হবে।
ডায়াগনসিস
সমস্যাটি ডায়াগনসিস করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- উপরে ২ নম্বর ধাপে যেভাবে ব্যাখ্যা করা হয়েছে সেইভাবে ডিবাগ লগ চালু করুন।
-
Envoy-এর জন্য Apigee অ্যাডাপ্টারের লগ চেক করুন এবং যাচাই করুন যে আপনি নিম্নলিখিত মেসেজটি দেখতে পাচ্ছেন:
Error retrieving products: REQUEST_URI: no such host
ডিবাগ লগ আউটপুটের নমুনা:
2021-01-12T08:29:06.499Z DEBUG product/manager.go:188 retrieving products from: https://foo/remote-service/products 2021-01-12T08:29:06.505Z ERROR product/manager.go:164 Error retrieving products: GET "https://foo/remote-service/pro ducts": dial tcp: lookup foo on 169.254.169.254:53: no such host github.com/apigee/apigee-remote-service-golib/product.(*manager).start.func1 /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/product/manager.go:164 github.com/apigee/apigee-remote-service-golib/util.(*Looper).Run /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/util/looper.go:87 github.com/apigee/apigee-remote-service-golib/util.(*Looper).Start.func1 /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/util/looper.go:59
এই উদাহরণে, Envoy-এর জন্য Apigee অ্যাডাপ্টার রিমোট-সার্ভিস API প্রক্সির সাথে যোগাযোগ করতে পারেনি কারণ রিমোট সার্ভার API প্রক্সি URL-এ দেওয়া হোস্টনেমটি
no such hostসমস্যার মাধ্যমে দেখানো হয়েছে। - Apigee Adapter for Envoy-এর লগে
no such hostমেসেজ সহ কোনও লগ এন্ট্রি থাকলে, এটিই সমস্যার কারণ। যদি না হয়, তাহলে কারণ: Envoy proxy, Apigee Adapter for Envoy-এর সাথে যোগাযোগ করতে পারছে না।
রেজোলিউশন
Envoy লগের জন্য Apigee অ্যাডাপ্টারে উপরের সমস্যাগুলি দেখানো হলে, সমস্যা সমাধানের জন্য নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
Envoy কনফিগারেশন ফাইলের জন্য Apigee অ্যাডাপ্টার চেক করুন এবং যাচাই করুন যে প্রদত্ত রিমোট-পরিষেবা API প্রক্সি URL সঠিক।
তা না হলে, Envoy-এর জন্য Apigee অ্যাডাপ্টর বন্ধ করুন, কনফিগারেশন ফাইলে রিমোট-সার্ভিস API প্রক্সি URL ঠিক করুন, Envoy-এর জন্য Apigee অ্যাডাপ্টর চালু করুন এবং আরেকটি API অনুরোধ পাঠান এবং সমাধানটি যাচাই করুন।
কনফিগারেশনের নমুনা:
apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | tenant: internal_api: https://istioservices.apigee.net/edgemicro remote_service_api: https://ORG-ENV.apigee.net/remote-service org_name: ORG env_name: ENV key: KEY secret: SECRETremote-serviceAPI প্রক্সি প্রাসঙ্গিক Edge এনভায়রনমেন্টে ডেপ্লয় করা হয়েছে কিনা তা যাচাই করুন। তা না হলে, প্রাসঙ্গিক Edge পরিবেশেremote-serviceAPI প্রক্সি ডেপ্লয় করুন এবং আবার চেষ্টা করুন।- Apigee Adapter for Envoy এবং
remote-serviceAPI প্রক্সি এন্ডপয়েন্টের মধ্যে নেটওয়ার্ক কানেক্টিভিটি যাচাই করুন। নেটওয়ার্ক কানেক্টিভিটি সংক্রান্ত কোনও সমস্যা খুঁজে পাওয়া গেলে, আপনার নেটওয়ার্কিং টিমের সাথে যোগাযোগ করুন এবং সমস্যা সমাধানের চেষ্টা করুন।
কারণ: Envoy proxy, Apigee Adapter for Envoy-এর সাথে যোগাযোগ করতে পারছে না
ডায়াগনসিস
সমস্যাটি ডায়াগনসিস করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
Envoy-তে ডিবাগ লগ চালু করেছেন কিনা তা নিশ্চিত করুন। তা না হলে, Envoy বন্ধ করে আবার চালু করুন, ডিবাগ লগ চালু করে। তারপরে আরেকটি API অনুরোধ পাঠান।
স্ট্যান্ডঅ্যালোন ডেপ্লয়মেন্ট:
envoy -c envoy-config.yaml -l debug
Kubernetes/Istio ভিত্তিক ডেপ্লয়মেন্ট:
kubectl -n=istio-system get pods kubectl -n=istio-system exec -it INGRESS_GATEWAY_NAME bash -- curl -X POST localhost:15000/logging?connection=debug
- Envoy-এর জন্য Apigee অ্যাডাপ্টারের লগ চেক করুন এবং যাচাই করুন যে মেসেজ সহ একটি লগ এন্ট্রি আছে:
connecting to APIGEE_ENVOY_ADAPTER_HOST:5000
এর পরে:
upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
ডিবাগ লগ আউটপুটের নমুনা:
[2021-03-23 05:44:41.867][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:769] [C4] connecting to 127.0.0.1:5000 [2021-03-23 05:44:41.867][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:785] [C4] connection in progress [2021-03-23 05:44:41.868][1303661][debug][http2] [external/envoy/source/common/http/http2/codec_impl.cc:1173] [C4] updating connection-level initial window size to 268435456 [2021-03-23 05:44:41.869][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:634] [C4] delayed connection error: 111 [2021-03-23 05:44:41.869][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:203] [C4] closing socket: 0 [2021-03-23 05:44:41.869][1303661][debug][client] [external/envoy/source/common/http/codec_client.cc:96] [C4] disconnect. resetting 0 pending requests [2021-03-23 05:44:41.869][1303661][debug][pool] [external/envoy/source/common/conn_pool/conn_pool_base.cc:314] [C4] client disconnected, failure reason: [2021-03-23 05:44:41.869][1303661][debug][router] [external/envoy/source/common/router/router.cc:1031] [C0][S6149963213555558594] upstream reset: reset reason: connection failure, transport failure reason: [2021-03-23 05:44:41.869][1303661][debug][http] [external/envoy/source/common/http/async_client_impl.cc:100] async http request response headers (end_stream=true): ':status', '200' 'content-type', 'application/grpc' 'grpc-status', '14' 'grpc-message', 'upstream connect error or disconnect/reset before headers. reset reason: connection failure'
উপরের উদাহরণে দেখানো হয়েছে যে Envoy,
connection failure-এর কারণে Envoy-এর জন্য Apigee অ্যাডাপ্টরের সাথে যোগাযোগ করতে পারেনি। connection failureএকাধিক কারণে হতে পারে। আসুন, প্রতিটি পরিস্থিতি দেখে নেওয়া যাক।
পরিস্থিতি #১: অ্যাডাপ্টার প্রসেস চলছে না
Apigee Adapter for Envoy প্রসেস না চললে, এই সমস্যা হতে পারে।
- নিচের কমান্ডটি চালিয়ে Apigee Adapter for Envoy প্রসেস চলছে কিনা তা যাচাই করুন।
Envoy-এর জন্য Apigee অ্যাডাপ্টার প্রসেস চালু থাকলে, নিম্নলিখিত
কমান্ডের ফলাফল এটি তালিকাভুক্ত করবে।
ps -ef | grep apigee-remote-service-envoy
- এটি না চললে, সেটিই হল সমস্যার কারণ।
রেজোলিউশন
- Envoy-এর জন্য Apigee অ্যাডাপ্টার প্রসেস না চললে, Envoy-এর জন্য Apigee অ্যাডাপ্টার চালু করুন।
- আরেকটি API অনুরোধ করুন এবং সমস্যাটির সমাধান হয়েছে কিনা তা যাচাই করুন।
পরিস্থিতি #২: অ্যাডাপ্টার প্রসেস নির্দিষ্ট পোর্টে শুনছে না
Envoy-এর জন্য Apigee Adapter প্রসেস নির্দিষ্ট পোর্টে লিসেন না করলে, এই সমস্যা হতে পারে।
Envoy-এর জন্য Apigee অ্যাডাপ্টার প্রসেস চলছে কিনা দেখুন, পোর্ট ৫০০-এ সকেট লিসেনিং আছে কিনা তা যাচাই করুন: APIGEE_ENVOY_ADAPTER_HOST:5000. এটি যাচাই করতে, আপনি
netstat কমান্ড রান করতে পারেন:
sudo netstat -lnp | grep 5000
স্যাম্পেল আউটপুট:
sudo netstat -lnp | grep 5000 tcp6 0 0 :::5000 :::* LISTEN 1596530/./apigee-re
পোর্ট 5000-এ কোনও সকেট লিসেনিং না থাকলে, এটি এই সমস্যার কারণ হতে পারে।
রেজোলিউশন
- Envoy-এর জন্য Apigee Adapter বন্ধ করে আবার চালু করুন।
- আরেকটি API অনুরোধ করুন এবং সমস্যাটির সমাধান হয়েছে কিনা তা যাচাই করুন।
দৃশ্য #৩: Envoy ও Apigee Adapter for Envoy-এর মধ্যে নেটওয়ার্ক কানেক্টিভিটি
- Envoy ও Apigee Adapter for Envoy-এর মধ্যে নেটওয়ার্ক কানেক্টিভিটি যাচাই করুন:
ssh $ENVOY_HOST telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
Envoy-এর জন্য Apigee অ্যাডাপ্টারের সাথে telnet TCP কানেকশন তৈরি করতে পারলে নিচের মতো আউটপুট দেখতে পাবেন:
telnet $APIGEE_ENVOY_ADAPTER_HOST 5000 Trying ::1... Connected to localhost. Escape character is '^]'.
- আপনি যদি
Connection timed outত্রুটিটি টেলনেটের সাথে দেখতে পান, তাহলে এটি ইঙ্গিত করে যে Envoy এবং Envoy-এর জন্য Apigee অ্যাডাপ্টারের মধ্যে নেটওয়ার্ক কানেক্টিভিটি সংক্রান্ত সমস্যা রয়েছে।
রেজোলিউশন
Envoy ও Envoy-এর জন্য Apigee অ্যাডাপ্টারের মধ্যে কোনও নেটওয়ার্ক কানেক্টিভিটি সংক্রান্ত সমস্যা দেখতে পেলে, আপনার নেটওয়ার্কিং টিমের সাথে যোগাযোগ করে সমস্যা সমাধানের চেষ্টা করুন।
এর পরেও সমস্যা থেকে গেলে, রোগ নির্ণয় সংক্রান্ত তথ্য অবশ্যই সংগ্রহ করতে হবে লিঙ্কে যান।
অবশ্যই ডায়াগনস্টিক তথ্য সংগ্রহ করতে হবে
উপরে উল্লেখ করা নির্দেশাবলী অনুসরণ করার পরেও সমস্যাটি থেকে গেলে, নিম্নলিখিত ডায়াগনস্টিক তথ্য সংগ্রহ করুন এবং তারপরে Apigee Edge সহায়তা টিমের সাথে যোগাযোগ করুন:
-
ব্যবহৃত Apigee প্রোডাক্ট:
উদাহরণ: Apigee Edge Cloud, Apigee OPDK, Apigee hybrid, Apigee X
- Apigee সংস্থা ও এনভায়রনমেন্ট
Edge API ব্যবহার করে API প্রোডাক্টের সংজ্ঞা পড়ুন:
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
রেফারেন্স: Apigee Edge API
Apigee Edge UI ব্যবহার করে
remote-serviceAPI প্রক্সিতে ট্রেস সেশন শুরু করুন। এই সমস্যাটি আবার তৈরি করুন এবং ট্রেস সেশন XML ফাইলটি শেয়ার করুন।রেফারেন্স: ট্রেস টুল ব্যবহার করা | Apigee Edge
Envoy-এর জন্য Apigee অ্যাডাপ্টারের লগ (প্রদত্ত সময়সীমা সম্পর্কিত সম্পূর্ণ লগ)
স্ট্যান্ডঅ্যালোন ডেপ্লয়মেন্ট:
# by default Apigee Envoy write logs to stdout and stderr, check your deployment configuration and collect logs accordingly
Kubernetes/Istio ভিত্তিক ডেপ্লয়মেন্ট:
kubectl -n=apigee get pods kubectl -n=apigee logs APIGEE_REMOTE_SERVICE_ENVOY_POD_NAME > apigee-remote-service-envoy.log
curlকমান্ড ব্যবহার করে Envoy প্রক্সিতে পাঠানো API অনুরোধ (curlকমান্ডের সম্পূর্ণ আউটপুট):curl -v ENVOY_PROXY_ENDPOINT
curlকমান্ড ব্যবহার করে টার্গেট পরিষেবায় পাঠানো API অনুরোধ (curlকমান্ডের সম্পূর্ণ আউটপুট):curl -v TARGET_SERVICE_ENDPOINT