আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
লক্ষণ
Apigee Adapter for Envoy- এর মাধ্যমে আহ্বান করা হলে Envoy Proxy 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
সম্ভাব্য কারণসমূহ
নিম্নলিখিত শর্তগুলির মধ্যে কোনো একটি ঘটলে এনভয় প্রক্সি একটি HTTP 403 ত্রুটি দেখাবে:
| কারণ | বর্ণনা | সমস্যা সমাধানের নির্দেশাবলী প্রযোজ্য |
|---|---|---|
| এপিআই পণ্যটি সক্রিয় করা হয়নি | নির্দিষ্ট পরিবেশের জন্য এপিআই পণ্যটি সক্রিয় করা নেই। | এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা |
| এপিআই প্রোডাক্টে টার্গেট সার্ভিস ইউআরআই পাথ অনুপস্থিত। | টার্গেট সার্ভিসের URI পাথটি অনুপস্থিত অথবা API রিসোর্সের অধীনে API প্রোডাক্টে যোগ করা হয়নি। | এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা |
| এপিআই প্রোডাক্টে হোস্টনেম অনুপস্থিত | ক্লায়েন্ট এপিআই অনুরোধে প্রদত্ত হোস্টনেমটি Apigee রিমোট সার্ভিস টার্গেটের অধীনে থাকা এপিআই প্রোডাক্টে অনুপস্থিত। | এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা |
| অনুরোধ হেডারে এপিআই কী অনুপস্থিত | x-api-key HTTP হেডারে API কী পাস করা হয় না। | এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা |
| অবৈধ এপিআই কী | অনুরোধের অংশ হিসেবে প্রদত্ত এপিআই কী-টি অবৈধ। | এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা |
| Envoy-এর জন্য Apigee অ্যাডাপ্টার রিমোট-সার্ভিস এপিআই প্রক্সির সাথে যোগাযোগ করতে অক্ষম। | Apigee Adapter for Envoy রিমোট-সার্ভিস এপিআই প্রক্সির সাথে যোগাযোগ করতে পারছে না। | এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা |
| Envoy প্রক্সি, Envoy-এর জন্য Apigee অ্যাডাপ্টারের সাথে যোগাযোগ করতে পারছে না। | Envoy প্রক্সি, Envoy-এর জন্য Apigee অ্যাডাপ্টারের সাথে যোগাযোগ করতে পারছে না। | এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা |
শুরু করার আগে
- যাচাই করুন যে আপনি এনভয় প্রক্সি থেকে
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-তে ডিবাগ লগ চালু করেছেন কিনা তা নিশ্চিত করুন। যদি তা না করে থাকেন, তাহলে Apigee Adapter for Envoy বন্ধ করে আবার চালু করুন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে ডিবাগ লগ চালু করুন:
apigee-remote-service-envoy -c config.yaml -l debug
কারণ: এপিআই পণ্যটি সক্রিয় করা নেই
যে নির্দিষ্ট পরিবেশে এপিআই কলগুলো করা হচ্ছে, সেখানে এনভয় প্রক্সি দ্বারা ব্যবহৃত নির্দিষ্ট এপিআই প্রোডাক্টটি সক্রিয় না থাকলে এই ত্রুটিটি ঘটবে।
রোগ নির্ণয়
সমস্যাটি নির্ণয় করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- উপরে ২ নং ধাপে ব্যাখ্যা করা অনুযায়ী ডিবাগ লগ চালু করুন।
- Apigee Adapter for Envoy-এর লগগুলি পরীক্ষা করুন এবং যাচাই করুন যে
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
উপরের উদাহরণটি থেকে দেখা যায় যে, Apigee Adapter for Envoy-তে
ENVOY-PRODUCT-1API প্রোডাক্টটি খুঁজে পাওয়া যায়নি।Apigee Adapter for Envoy লগিং সম্পর্কে আরও তথ্যের জন্য, লগিং দেখুন।
- এপিআই অনুরোধ অনুমোদন করার সময় যদি আপনি এই বার্তাটি দেখতে পান, তাহলে এটি সম্ভবত নির্দেশ করে যে, আপনি যে নির্দিষ্ট পরিবেশে এপিআই কলগুলো করছেন, সেই পরিবেশের জন্য নির্দিষ্ট এপিআই প্রোডাক্টটি সক্রিয় করা নেই।
- এটি যাচাই করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- Edge UI- তে লগ ইন করুন।
- Publish > API products পেজে, Apigee Adapter for Envoy কনফিগার করার জন্য আপনি যে নির্দিষ্ট API প্রোডাক্টটি ব্যবহার করেছিলেন, সেটিতে ক্লিক করুন।
- যাচাই করুন যে, আপনি যে নির্দিষ্ট পরিবেশে এপিআই অনুরোধগুলি করছেন, সেটি এপিআই প্রোডাক্টে সক্রিয় করা আছে।
- যদি এপিআই প্রোডাক্টে নির্দিষ্ট এনভায়রনমেন্টটি এনাবল করা না থাকে, তাহলে সেটাই এই সমস্যার কারণ।
- যদি নির্দিষ্ট পরিবেশটি ইতিমধ্যেই সক্রিয় করা থাকে, তাহলে "কারণ: API Product-এ টার্গেট সার্ভিস URI পাথ অনুপস্থিত" অংশে যান।
সমাধান
যদি এপিআই প্রোডাক্টে নির্দিষ্ট এনভায়রনমেন্টটি এনাবল করা না থাকে, তাহলে সমস্যাটি সমাধান করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- Edge UI- তে লগ ইন করুন।
- Publish > API products পেজে, Apigee Adapter for Envoy কনফিগার করার জন্য আপনি যে নির্দিষ্ট API প্রোডাক্টটি ব্যবহার করেছিলেন, সেটিতে ক্লিক করুন।
- API প্রোডাক্টস > প্রোডাক্ট নেম পেজে, এডিট-এ ক্লিক করুন।
- আপনি যে নির্দিষ্ট পরিবেশে এপিআই অনুরোধ করতে চান, সেটির জন্য প্রাসঙ্গিক এনভায়রনমেন্ট চেকবক্সটি নির্বাচন করে পরিবেশটি সক্রিয় করুন।
- সংরক্ষণ করুন- এ ক্লিক করুন।
কারণ: এপিআই প্রোডাক্টে টার্গেট সার্ভিস ইউআরআই পাথ অনুপস্থিত
এনভয় প্রক্সি দ্বারা ব্যবহৃত নির্দিষ্ট এপিআই প্রোডাক্টে টার্গেটের ইউআরআই পাথ উল্লেখ করা না থাকলে এই ত্রুটিটি ঘটবে।
রোগ নির্ণয়
সমস্যাটি নির্ণয় করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- উপরে ২ নং ধাপে ব্যাখ্যা করা অনুযায়ী ডিবাগ লগ চালু করুন।
Apigee Adapter for Envoy-এর লগগুলি পরীক্ষা করুন এবং যাচাই করুন যে
Authorizing requestবিভাগের অধীনে একটি নির্দিষ্ট টার্গেটের সাথে যুক্ত নির্দিষ্ট API Product-এর জন্য নিম্নলিখিত বার্তাটি প্রদর্শিত হচ্ছে: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
এটি নির্দেশ করে যে
ENVOY-PRODUCT-1এপিআই প্রোডাক্টটিতে/echo1পাথটি খুঁজে পাওয়া যায়নি।- আপনি যদি Apigee Adapter for Envoy-এর ডিবাগ লগগুলিতে
no path: REQUEST_URI_PATHবার্তাটি দেখতে পান, তাহলে সেটাই এই সমস্যার কারণ। অন্যথায়, ‘Cause: Missing hostname in the API product’ অংশে যান।
সমাধান
যদি নির্দিষ্ট টার্গেটের জন্য নির্দিষ্ট রিকোয়েস্ট URI-টি API প্রোডাক্টে যোগ করা না থাকে, তাহলে সমস্যাটি সমাধান করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- Edge UI- তে লগ ইন করুন।
- Publish > API products পেজে, Apigee Adapter for Envoy কনফিগার করার জন্য আপনি যে নির্দিষ্ট API প্রোডাক্টটি ব্যবহার করেছিলেন, সেটিতে ক্লিক করুন।
- API প্রোডাক্টস > প্রোডাক্ট নেম পেজে, এডিট-এ ক্লিক করুন।
- এপিআই রিসোর্স প্যানে, এপিআই প্রোডাক্টে এপিআই রিকোয়েস্ট ইউআরআই যোগ করুন।
- Apigee Adapter for Envoy-এর লগগুলো পর্যবেক্ষণ করুন এবং Apigee Adapter for Envoy আপডেট করা API প্রোডাক্টটি ফেচ করা পর্যন্ত অপেক্ষা করুন। এরপর, সমাধানটি যাচাই করার জন্য আরেকটি API রিকোয়েস্ট পাঠান।
কারণ: এপিআই প্রোডাক্টে হোস্টনেম অনুপস্থিত
এনভয় প্রক্সি দ্বারা ব্যবহৃত নির্দিষ্ট এপিআই প্রোডাক্টে টার্গেট হোস্টনেম এবং পোর্ট কম্বিনেশনটি যোগ করা না থাকলে এই ত্রুটিটি ঘটবে।
রোগ নির্ণয়
সমস্যাটি নির্ণয় করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- উপরে ২ নং ধাপে ব্যাখ্যা করা অনুযায়ী ডিবাগ লগ চালু করুন।
Apigee Adapter for Envoy-এর লগগুলি পরীক্ষা করুন এবং যাচাই করুন যে
Authorizing requestবিভাগের অধীনে একটি নির্দিষ্ট টার্গেটের সাথে যুক্ত নির্দিষ্ট API Product-এর জন্য নিম্নলিখিত বার্তাটি প্রদর্শিত হচ্ছে: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)
উপরের উদাহরণটি থেকে দেখা যায় যে,
ENVOY-PRODUCT-1নামক এপিআই প্রোডাক্টটিতেhttpbin1:8080হোস্টনেম ও পোর্টের সংমিশ্রণটি খুঁজে পাওয়া যায়নি।- অনুরোধ অনুমোদন করার সময় যদি Apigee Adapter for Envoy লগ-এ
no targets: HOSTNAME : PORTবার্তা সহ কোনো এন্ট্রি থাকে, তাহলে এটিই সমস্যার কারণ। যদি তা না থাকে, তাহলে ‘কারণ: অনুরোধ হেডারে API কী অনুপস্থিত’ অংশে যান।
সমাধান
যদি টার্গেট হোস্টনেম এবং পোর্ট কম্বিনেশনটি এপিআই প্রোডাক্টে যোগ করা না থাকে, তাহলে সমস্যাটি সমাধান করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- Edge UI- তে লগ ইন করুন।
- Publish > API products পেজে, Apigee Adapter for Envoy কনফিগার করার জন্য আপনি যে নির্দিষ্ট API প্রোডাক্টটি ব্যবহার করেছিলেন, সেটিতে ক্লিক করুন।
- API প্রোডাক্টস > প্রোডাক্ট নেম পেজে, এডিট-এ ক্লিক করুন।
Apigee রিমোট সার্ভিস টার্গেট প্যানে, টার্গেট হোস্টনেম ও পোর্ট যোগ করুন এবং সেভ-এ ক্লিক করুন।
যদি আপনি UI-তে Apigee রিমোট সার্ভিস টার্গেটস সেকশনটি দেখতে না পান, তাহলে Edge API ব্যবহার করে API প্রোডাক্টে
apigee-remote-service-targetsনামে একটি কাস্টম অ্যাট্রিবিউট যোগ করুন এবং 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) পাস করা না হলে এই ত্রুটিটি ঘটবে।
রোগ নির্ণয়
সমস্যাটি নির্ণয় করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- উপরে ২ নং ধাপে ব্যাখ্যা করা অনুযায়ী ডিবাগ লগ চালু করুন।
- Apigee Adapter for Envoy-এর লগগুলি পরীক্ষা করুন এবং যাচাই করুন যে আপনি
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 key) পাস করা হয়নি। - যদি Apigee Adapter for Envoy-এর লগ-এর
Authenticate errorসেকশনে[missing authentication]মেসেজসহ কোনো লগ এন্ট্রি থাকে, তাহলে এটাই সমস্যার কারণ। অন্যথায়, Cause: Invalid API key অংশে যান।
সমাধান
যদি Apigee Adapter for Envoy লগ-এ [missing authentication] ত্রুটিটি প্রদর্শিত হয়ে থাকে, তাহলে সমস্যাটি সমাধান করতে নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:
- ক্লায়েন্ট এপিআই অনুরোধে HTTP হেডার
x-api-keyব্যবহার করে এপিআই কী পাঠিয়েছে কিনা তা পরীক্ষা করুন। যদি না পাঠিয়ে থাকে, তবে ক্লায়েন্টকে HTTP হেডারx-api-keyএ এপিআই কী পাঠাতে অনুরোধ করুন। - Apigee Adapter for Envoy-এর কনফিগারেশন ফাইলটি পরীক্ষা করুন এবং যাচাই করুন যে ডিফল্ট 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 Key হেডার নামটি পরিবর্তন করে
api-keyকরা হয়েছে। এক্ষেত্রে, আপনাকেapi-keyহেডারের অংশ হিসেবে API Key-টি পাস করতে হবে। - যদি ডিফল্ট এপিআই কী হেডার নামটি পরিবর্তন করা হয়ে থাকে, তাহলে ক্লায়েন্টকে আপডেট করা এপিআই কী হেডার নামটি ব্যবহার করে আরেকটি এপিআই অনুরোধ পাঠাতে বলুন এবং যাচাই করুন যে এতে সমস্যাটির সমাধান হয় কিনা।
কারণ: অবৈধ এপিআই কী
রিকোয়েস্ট হেডারের অংশ হিসেবে কোনো অবৈধ এপিআই কী (API Key) দেওয়া হলে এই ত্রুটিটি ঘটবে।
রোগ নির্ণয়
সমস্যাটি নির্ণয় করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- উপরে ২ নং ধাপে ব্যাখ্যা করা অনুযায়ী ডিবাগ লগ চালু করুন।
- Apigee Adapter for Envoy-এর লগগুলি পরীক্ষা করুন এবং যাচাই করুন যে আপনি
Authenticate errorবিভাগের অধীনে[permission denied]বার্তাটি দেখতে পাচ্ছেন। এটি সাধারণত অ্যাডাপ্টার দ্বারা API Key ফেচ করার পরে প্রদর্শিত হয়, যা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)
এই উদাহরণে, এপিআই অনুরোধে পাঠানো এপিআই কী-টি বৈধ ছিল না।
- যদি Apigee Adapter for Envoy-এর লগ-এর
Authenticate errorসেকশনে[permission denied]লেখা থাকে, তাহলে বুঝতে হবে যে রিকোয়েস্টের অংশ হিসেবে দেওয়া API Key-টি অবৈধ এবং এটিই সমস্যার কারণ। যদি তা না থাকে, তাহলে Cause: Apigee Adapter for Envoy is unable to communicate with remote-service API proxy অংশে যান।
সমাধান
Apigee Adapter for Envoy লগ-এর Authenticate error সেকশনে যদি [permission denied] মেসেজটি দেখা যায়, তাহলে সমস্যাটি সমাধান করার জন্য নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- এপিআই অনুরোধে পাঠানো এপিআই কী-টি, এপিআই প্রোডাক্টের সাথে সংযুক্ত অ্যাপ্লিকেশনে থাকা এপিআই কী-এর মানের সাথে মিলিয়ে দেখুন।
- ক্লায়েন্ট কর্তৃক ব্যবহৃত এপিআই কী বৈধ না হলে, ক্লায়েন্টকে বৈধ এপিআই কী পাঠাতে অনুরোধ করুন।
- ক্লায়েন্ট কর্তৃক ব্যবহৃত এপিআই কী বৈধ হওয়ার পরেও যদি আপনি HTTP
403ত্রুটি দেখতে পান, তবে বিষয়টি আরও খতিয়ে দেখার জন্য অনুগ্রহ করে Apigee Edge Support-এর সাথে যোগাযোগ করুন।
কারণ: Envoy-এর জন্য Apigee অ্যাডাপ্টার রিমোট-সার্ভিস এপিআই প্রক্সির সাথে যোগাযোগ করতে পারছে না।
কনফিগার করা রিমোট সার্ভিস হোস্টটি অবৈধ হলে, Apigee Adapter for Envoy যদি রিমোট সার্ভিস API Proxy-এর সাথে যোগাযোগ করতে না পারে, তাহলে এই ত্রুটিটি ঘটবে।
রোগ নির্ণয়
সমস্যাটি নির্ণয় করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- উপরে ২ নং ধাপে ব্যাখ্যা করা অনুযায়ী ডিবাগ লগ চালু করুন।
Apigee Adapter for Envoy-এর লগগুলি পরীক্ষা করুন এবং যাচাই করুন যে আপনি নিম্নলিখিত বার্তাটি দেখতে পাচ্ছেন:
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
এই উদাহরণে, Apigee Adapter for Envoy রিমোট-সার্ভিস এপিআই প্রক্সির সাথে যোগাযোগ করতে পারেনি, কারণ রিমোট সার্ভার এপিআই প্রক্সি ইউআরএল-এ দেওয়া হোস্টনেমটি বৈধ নয়, যা
no such hostত্রুটি দ্বারা নির্দেশিত হয়েছে।- যদি Apigee Adapter for Envoy-এর লগগুলিতে
no such hostবার্তা সহ কোনো লগ এন্ট্রি থাকে, তাহলে এটিই সমস্যার কারণ। যদি তা না থাকে, তাহলে ‘কারণ: Envoy প্রক্সি Apigee Adapter for Envoy-এর সাথে যোগাযোগ করতে পারছে না’ অংশে যান।
সমাধান
যদি Apigee Adapter for Envoy লগ-এ উপরোক্ত ত্রুটিগুলো প্রদর্শিত হয়, তাহলে সমস্যাটি সমাধান করতে নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করুন:
Apigee Adapter for Envoy কনফিগারেশন ফাইলটি পরীক্ষা করুন এবং যাচাই করুন যে প্রদত্ত রিমোট-সার্ভিস API প্রক্সি URL-টি বৈধ।
অন্যথায়, Apigee Adapter for Envoy বন্ধ করুন, কনফিগারেশন ফাইলে রিমোট-সার্ভিস API প্রক্সি URL ঠিক করুন, Apigee Adapter for Envoy চালু করুন এবং আরেকটি 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: SECRET- যাচাই করুন যে
remote-serviceএপিআই প্রক্সিটি প্রাসঙ্গিক এজ এনভায়রনমেন্টে ডেপ্লয় করা আছে। যদি না থাকে, তাহলে প্রাসঙ্গিক এজ এনভায়রনমেন্টেremote-serviceএপিআই প্রক্সিটি ডেপ্লয় করুন এবং আবার চেষ্টা করুন। - Apigee Adapter for Envoy এবং
remote-serviceAPI প্রক্সি এন্ডপয়েন্টের মধ্যে নেটওয়ার্ক সংযোগ যাচাই করুন। যদি নেটওয়ার্ক সংযোগে কোনো সমস্যা পাওয়া যায়, তাহলে আপনার নেটওয়ার্কিং টিমের সাথে যোগাযোগ করুন এবং সমস্যাটি সমাধান করার চেষ্টা করুন।
কারণ: Envoy প্রক্সি, Envoy-এর জন্য Apigee অ্যাডাপ্টারের সাথে যোগাযোগ করতে পারছে না।
রোগ নির্ণয়
সমস্যাটি নির্ণয় করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
নিশ্চিত করুন যে আপনি Envoy-তে ডিবাগ লগ চালু করেছেন। যদি না করে থাকেন, তাহলে Envoy বন্ধ করে আবার চালু করুন এবং ডিবাগ লগ চালু করুন। এরপর আরেকটি API অনুরোধ পাঠান।
স্বতন্ত্র স্থাপন:
envoy -c envoy-config.yaml -l debug
কুবারনেটিস/ইস্টিও ভিত্তিক ডেপ্লয়মেন্ট:
kubectl -n=istio-system get pods kubectl -n=istio-system exec -it INGRESS_GATEWAY_NAME bash -- curl -X POST localhost:15000/logging?connection=debug
- Apigee Adapter for Envoy-এর লগগুলি পরীক্ষা করুন এবং যাচাই করুন যে সেখানে নিম্নলিখিত বার্তা সহ একটি লগ এন্ট্রি আছে:
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'
উপরের উদাহরণটি দেখায় যে,
connection failureনামক কারণে Envoy, Apigee Adapter for Envoy-এর সাথে যোগাযোগ করতে পারেনি। -
connection failureএকাধিক কারণ থাকতে পারে। চলুন, প্রতিটি পরিস্থিতি খতিয়ে দেখা যাক।
দৃশ্যকল্প #১: অ্যাডাপ্টার প্রসেসটি চলছে না
যদি Apigee Adapter for Envoy প্রসেসটি চালু না থাকে, তাহলে এই ত্রুটিটি ঘটতে পারে।
- নিম্নলিখিত কমান্ডটি চালিয়ে Apigee Adapter for Envoy প্রসেসটি চলছে কিনা তা যাচাই করুন। যদি Apigee Adapter for Envoy প্রসেসটি চালু থাকে, তাহলে নিম্নলিখিত কমান্ডের ফলাফলে এটি তালিকাভুক্ত হওয়া উচিত।
ps -ef | grep apigee-remote-service-envoy
- যদি এটি চালু না থাকে, তাহলে সেটাই সমস্যার কারণ।
সমাধান
- যদি Apigee Adapter for Envoy প্রসেসটি চালু না থাকে, তাহলে Apigee Adapter for Envoy চালু করুন।
- আরেকটি এপিআই অনুরোধ পাঠান এবং যাচাই করুন সমস্যাটি সমাধান হয়েছে কিনা।
দৃশ্যকল্প #২: অ্যাডাপ্টার প্রসেসটি নির্দিষ্ট পোর্টে লিসেন করছে না
যদি Apigee Adapter for Envoy প্রসেসটি নির্দিষ্ট পোর্টে লিসেন না করে, তাহলে এই ত্রুটিটি ঘটতে পারে।
যদি Apigee Adapter for Envoy প্রসেসটি চালু থাকে, তাহলে যাচাই করুন যে 5000 পোর্টে ( 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 অ্যাডাপ্টারটি বন্ধ করুন এবং আবার চালু করুন।
- আরেকটি এপিআই অনুরোধ পাঠান এবং যাচাই করুন সমস্যাটি সমাধান হয়েছে কিনা।
দৃশ্যকল্প #৩: Envoy এবং Envoy-এর জন্য Apigee অ্যাডাপ্টারের মধ্যে নেটওয়ার্ক সংযোগ
- Envoy এবং Apigee Adapter for Envoy-এর মধ্যে নেটওয়ার্ক সংযোগ যাচাই করুন:
ssh $ENVOY_HOST telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
যদি টেলনেট এনভয়ের জন্য এপিজি অ্যাডাপ্টারের সাথে একটি TCP সংযোগ স্থাপন করতে পারে, তাহলে নিম্নলিখিতের মতো একটি আউটপুট প্রদর্শিত হবে:
telnet $APIGEE_ENVOY_ADAPTER_HOST 5000 Trying ::1... Connected to localhost. Escape character is '^]'.
- যদি আপনি টেলনেটের সাথে
Connection timed outত্রুটিটি দেখতে পান, তাহলে বুঝতে হবে Envoy এবং Apigee Adapter for Envoy-এর মধ্যে নেটওয়ার্ক সংযোগে সমস্যা রয়েছে।
সমাধান
Envoy এবং Apigee Adapter for Envoy-এর মধ্যে নেটওয়ার্ক সংযোগে কোনো সমস্যা দেখলে, অনুগ্রহ করে আপনার নেটওয়ার্কিং টিমের সাথে যোগাযোগ করুন এবং সমস্যাটি সমাধান করার চেষ্টা করুন।
যদি সমস্যাটি এখনও থেকে যায়, তাহলে 'অবশ্যই ডায়াগনস্টিক তথ্য সংগ্রহ করুন' অংশে যান।
রোগ নির্ণয়ের তথ্য অবশ্যই সংগ্রহ করতে হবে
উপরের নির্দেশাবলী অনুসরণ করার পরেও যদি সমস্যাটি থেকে যায়, তাহলে নিম্নলিখিত ডায়াগনস্টিক তথ্য সংগ্রহ করুন এবং তারপর Apigee Edge Support-এর সাথে যোগাযোগ করুন:
ব্যবহৃত Apigee পণ্য:
উদাহরণ: Apigee Edge Cloud, Apigee OPDK, Apigee hybrid, Apigee X
- অ্যাপিজি সংগঠন এবং পরিবেশ
Edge API ব্যবহার করে API পণ্যের সংজ্ঞা পড়া হয়েছে:
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
তথ্যসূত্র: Apigee Edge APIs
Apigee Edge UI ব্যবহার করে
remote-serviceএপিআই প্রক্সিতে একটি ট্রেস সেশন শুরু করুন। এই সমস্যাটি পুনরায় তৈরি করুন এবং ট্রেস সেশন XML ফাইলটি শেয়ার করুন।Apigee Adapter for Envoy লগ (প্রদত্ত সময়কালের সম্পূর্ণ লগ)
স্বতন্ত্র স্থাপন:
# by default Apigee Envoy write logs to stdout and stderr, check your deployment configuration and collect logs accordingly
কুবারনেটিস/ইস্টিও ভিত্তিক ডেপ্লয়মেন্ট:
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