দূতের জন্য এপিজি অ্যাডাপ্টারে HTTP 403 নিষিদ্ধ ত্রুটির সাথে দূত প্রক্সি ব্যর্থ হয়েছে

আপনি 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 অ্যাডাপ্টারের সাথে যোগাযোগ করতে পারছে না। এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা

শুরু করার আগে

  1. যাচাই করুন যে আপনি এনভয় প্রক্সি থেকে 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
  2. ডিবাগ লগ চালু করুন:

    ত্রুটি সম্পর্কে আরও বিস্তারিত তথ্য পেতে Apigee Adapter for Envoy-তে ডিবাগ লগ চালু করেছেন কিনা তা নিশ্চিত করুন। যদি তা না করে থাকেন, তাহলে Apigee Adapter for Envoy বন্ধ করে আবার চালু করুন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে ডিবাগ লগ চালু করুন:

    apigee-remote-service-envoy -c config.yaml -l debug

কারণ: এপিআই পণ্যটি সক্রিয় করা নেই

যে নির্দিষ্ট পরিবেশে এপিআই কলগুলো করা হচ্ছে, সেখানে এনভয় প্রক্সি দ্বারা ব্যবহৃত নির্দিষ্ট এপিআই প্রোডাক্টটি সক্রিয় না থাকলে এই ত্রুটিটি ঘটবে।

রোগ নির্ণয়

সমস্যাটি নির্ণয় করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. উপরে ২ নং ধাপে ব্যাখ্যা করা অনুযায়ী ডিবাগ লগ চালু করুন।
  2. 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-1 API প্রোডাক্টটি খুঁজে পাওয়া যায়নি।

    Apigee Adapter for Envoy লগিং সম্পর্কে আরও তথ্যের জন্য, লগিং দেখুন।

  3. এপিআই অনুরোধ অনুমোদন করার সময় যদি আপনি এই বার্তাটি দেখতে পান, তাহলে এটি সম্ভবত নির্দেশ করে যে, আপনি যে নির্দিষ্ট পরিবেশে এপিআই কলগুলো করছেন, সেই পরিবেশের জন্য নির্দিষ্ট এপিআই প্রোডাক্টটি সক্রিয় করা নেই।
  4. এটি যাচাই করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
    1. Edge UI- তে লগ ইন করুন।
    2. Publish > API products পেজে, Apigee Adapter for Envoy কনফিগার করার জন্য আপনি যে নির্দিষ্ট API প্রোডাক্টটি ব্যবহার করেছিলেন, সেটিতে ক্লিক করুন।
    3. যাচাই করুন যে, আপনি যে নির্দিষ্ট পরিবেশে এপিআই অনুরোধগুলি করছেন, সেটি এপিআই প্রোডাক্টে সক্রিয় করা আছে।
    4. যদি এপিআই প্রোডাক্টে নির্দিষ্ট এনভায়রনমেন্টটি এনাবল করা না থাকে, তাহলে সেটাই এই সমস্যার কারণ।
  5. যদি নির্দিষ্ট পরিবেশটি ইতিমধ্যেই সক্রিয় করা থাকে, তাহলে "কারণ: API Product-এ টার্গেট সার্ভিস URI পাথ অনুপস্থিত" অংশে যান।

সমাধান

যদি এপিআই প্রোডাক্টে নির্দিষ্ট এনভায়রনমেন্টটি এনাবল করা না থাকে, তাহলে সমস্যাটি সমাধান করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. Edge UI- তে লগ ইন করুন।
  2. Publish > API products পেজে, Apigee Adapter for Envoy কনফিগার করার জন্য আপনি যে নির্দিষ্ট API প্রোডাক্টটি ব্যবহার করেছিলেন, সেটিতে ক্লিক করুন।
  3. API প্রোডাক্টস > প্রোডাক্ট নেম পেজে, এডিট-এ ক্লিক করুন।
  4. আপনি যে নির্দিষ্ট পরিবেশে এপিআই অনুরোধ করতে চান, সেটির জন্য প্রাসঙ্গিক এনভায়রনমেন্ট চেকবক্সটি নির্বাচন করে পরিবেশটি সক্রিয় করুন।
  5. সংরক্ষণ করুন- এ ক্লিক করুন।

কারণ: এপিআই প্রোডাক্টে টার্গেট সার্ভিস ইউআরআই পাথ অনুপস্থিত

এনভয় প্রক্সি দ্বারা ব্যবহৃত নির্দিষ্ট এপিআই প্রোডাক্টে টার্গেটের ইউআরআই পাথ উল্লেখ করা না থাকলে এই ত্রুটিটি ঘটবে।

রোগ নির্ণয়

সমস্যাটি নির্ণয় করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. উপরে ২ নং ধাপে ব্যাখ্যা করা অনুযায়ী ডিবাগ লগ চালু করুন।
  2. 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 পাথটি খুঁজে পাওয়া যায়নি।

  3. আপনি যদি Apigee Adapter for Envoy-এর ডিবাগ লগগুলিতে no path: REQUEST_URI_PATH বার্তাটি দেখতে পান, তাহলে সেটাই এই সমস্যার কারণ। অন্যথায়, ‘Cause: Missing hostname in the API product’ অংশে যান।

সমাধান

যদি নির্দিষ্ট টার্গেটের জন্য নির্দিষ্ট রিকোয়েস্ট URI-টি API প্রোডাক্টে যোগ করা না থাকে, তাহলে সমস্যাটি সমাধান করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. Edge UI- তে লগ ইন করুন।
  2. Publish > API products পেজে, Apigee Adapter for Envoy কনফিগার করার জন্য আপনি যে নির্দিষ্ট API প্রোডাক্টটি ব্যবহার করেছিলেন, সেটিতে ক্লিক করুন।
  3. API প্রোডাক্টস > প্রোডাক্ট নেম পেজে, এডিট-এ ক্লিক করুন।
  4. এপিআই রিসোর্স প্যানে, এপিআই প্রোডাক্টে এপিআই রিকোয়েস্ট ইউআরআই যোগ করুন।
  5. Apigee Adapter for Envoy-এর লগগুলো পর্যবেক্ষণ করুন এবং Apigee Adapter for Envoy আপডেট করা API প্রোডাক্টটি ফেচ করা পর্যন্ত অপেক্ষা করুন। এরপর, সমাধানটি যাচাই করার জন্য আরেকটি API রিকোয়েস্ট পাঠান।

কারণ: এপিআই প্রোডাক্টে হোস্টনেম অনুপস্থিত

এনভয় প্রক্সি দ্বারা ব্যবহৃত নির্দিষ্ট এপিআই প্রোডাক্টে টার্গেট হোস্টনেম এবং পোর্ট কম্বিনেশনটি যোগ করা না থাকলে এই ত্রুটিটি ঘটবে।

রোগ নির্ণয়

সমস্যাটি নির্ণয় করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. উপরে ২ নং ধাপে ব্যাখ্যা করা অনুযায়ী ডিবাগ লগ চালু করুন।
  2. 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 হোস্টনেম ও পোর্টের সংমিশ্রণটি খুঁজে পাওয়া যায়নি।

  3. অনুরোধ অনুমোদন করার সময় যদি Apigee Adapter for Envoy লগ-এ no targets: HOSTNAME : PORT বার্তা সহ কোনো এন্ট্রি থাকে, তাহলে এটিই সমস্যার কারণ। যদি তা না থাকে, তাহলে ‘কারণ: অনুরোধ হেডারে API কী অনুপস্থিত’ অংশে যান।

সমাধান

যদি টার্গেট হোস্টনেম এবং পোর্ট কম্বিনেশনটি এপিআই প্রোডাক্টে যোগ করা না থাকে, তাহলে সমস্যাটি সমাধান করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. Edge UI- তে লগ ইন করুন।
  2. Publish > API products পেজে, Apigee Adapter for Envoy কনফিগার করার জন্য আপনি যে নির্দিষ্ট API প্রোডাক্টটি ব্যবহার করেছিলেন, সেটিতে ক্লিক করুন।
  3. API প্রোডাক্টস > প্রোডাক্ট নেম পেজে, এডিট-এ ক্লিক করুন।
  4. 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": []
    }
  5. উপরের কাজটি সম্পন্ন হয়ে গেলে, Apigee Adapter for Envoy-এর লগগুলো পর্যবেক্ষণ করুন এবং Apigee Adapter for Envoy আপডেট করা API প্রোডাক্টটি ফেচ করা পর্যন্ত অপেক্ষা করুন। এরপর, সমাধানটি যাচাই করার জন্য আরেকটি API রিকোয়েস্ট পাঠান।

কারণ: অনুরোধ হেডারে এপিআই কী অনুপস্থিত

রিকোয়েস্ট হেডারের অংশ হিসেবে এপিআই কী (API Key) পাস করা না হলে এই ত্রুটিটি ঘটবে।

রোগ নির্ণয়

সমস্যাটি নির্ণয় করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. উপরে ২ নং ধাপে ব্যাখ্যা করা অনুযায়ী ডিবাগ লগ চালু করুন।
  2. 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) পাস করা হয়নি।

  3. যদি Apigee Adapter for Envoy-এর লগ-এর Authenticate error সেকশনে [missing authentication] মেসেজসহ কোনো লগ এন্ট্রি থাকে, তাহলে এটাই সমস্যার কারণ। অন্যথায়, Cause: Invalid API key অংশে যান।

সমাধান

যদি Apigee Adapter for Envoy লগ-এ [missing authentication] ত্রুটিটি প্রদর্শিত হয়ে থাকে, তাহলে সমস্যাটি সমাধান করতে নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:

  1. ক্লায়েন্ট এপিআই অনুরোধে HTTP হেডার x-api-key ব্যবহার করে এপিআই কী পাঠিয়েছে কিনা তা পরীক্ষা করুন। যদি না পাঠিয়ে থাকে, তবে ক্লায়েন্টকে HTTP হেডার x-api-key এ এপিআই কী পাঠাতে অনুরোধ করুন।
  2. 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-টি পাস করতে হবে।

  3. যদি ডিফল্ট এপিআই কী হেডার নামটি পরিবর্তন করা হয়ে থাকে, তাহলে ক্লায়েন্টকে আপডেট করা এপিআই কী হেডার নামটি ব্যবহার করে আরেকটি এপিআই অনুরোধ পাঠাতে বলুন এবং যাচাই করুন যে এতে সমস্যাটির সমাধান হয় কিনা।

কারণ: অবৈধ এপিআই কী

রিকোয়েস্ট হেডারের অংশ হিসেবে কোনো অবৈধ এপিআই কী (API Key) দেওয়া হলে এই ত্রুটিটি ঘটবে।

রোগ নির্ণয়

সমস্যাটি নির্ণয় করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. উপরে ২ নং ধাপে ব্যাখ্যা করা অনুযায়ী ডিবাগ লগ চালু করুন।
  2. 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)

    এই উদাহরণে, এপিআই অনুরোধে পাঠানো এপিআই কী-টি বৈধ ছিল না।

  3. যদি 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] মেসেজটি দেখা যায়, তাহলে সমস্যাটি সমাধান করার জন্য নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. এপিআই অনুরোধে পাঠানো এপিআই কী-টি, এপিআই প্রোডাক্টের সাথে সংযুক্ত অ্যাপ্লিকেশনে থাকা এপিআই কী-এর মানের সাথে মিলিয়ে দেখুন।
  2. ক্লায়েন্ট কর্তৃক ব্যবহৃত এপিআই কী বৈধ না হলে, ক্লায়েন্টকে বৈধ এপিআই কী পাঠাতে অনুরোধ করুন।
  3. ক্লায়েন্ট কর্তৃক ব্যবহৃত এপিআই কী বৈধ হওয়ার পরেও যদি আপনি HTTP 403 ত্রুটি দেখতে পান, তবে বিষয়টি আরও খতিয়ে দেখার জন্য অনুগ্রহ করে Apigee Edge Support-এর সাথে যোগাযোগ করুন।

কারণ: Envoy-এর জন্য Apigee অ্যাডাপ্টার রিমোট-সার্ভিস এপিআই প্রক্সির সাথে যোগাযোগ করতে পারছে না।

কনফিগার করা রিমোট সার্ভিস হোস্টটি অবৈধ হলে, Apigee Adapter for Envoy যদি রিমোট সার্ভিস API Proxy-এর সাথে যোগাযোগ করতে না পারে, তাহলে এই ত্রুটিটি ঘটবে।

রোগ নির্ণয়

সমস্যাটি নির্ণয় করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. উপরে ২ নং ধাপে ব্যাখ্যা করা অনুযায়ী ডিবাগ লগ চালু করুন।
  2. 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 ত্রুটি দ্বারা নির্দেশিত হয়েছে।

  3. যদি Apigee Adapter for Envoy-এর লগগুলিতে no such host বার্তা সহ কোনো লগ এন্ট্রি থাকে, তাহলে এটিই সমস্যার কারণ। যদি তা না থাকে, তাহলে ‘কারণ: Envoy প্রক্সি Apigee Adapter for Envoy-এর সাথে যোগাযোগ করতে পারছে না’ অংশে যান।

সমাধান

যদি Apigee Adapter for Envoy লগ-এ উপরোক্ত ত্রুটিগুলো প্রদর্শিত হয়, তাহলে সমস্যাটি সমাধান করতে নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করুন:

  1. 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
          
  2. যাচাই করুন যে remote-service এপিআই প্রক্সিটি প্রাসঙ্গিক এজ এনভায়রনমেন্টে ডেপ্লয় করা আছে। যদি না থাকে, তাহলে প্রাসঙ্গিক এজ এনভায়রনমেন্টে remote-service এপিআই প্রক্সিটি ডেপ্লয় করুন এবং আবার চেষ্টা করুন।
  3. Apigee Adapter for Envoy এবং remote-service API প্রক্সি এন্ডপয়েন্টের মধ্যে নেটওয়ার্ক সংযোগ যাচাই করুন। যদি নেটওয়ার্ক সংযোগে কোনো সমস্যা পাওয়া যায়, তাহলে আপনার নেটওয়ার্কিং টিমের সাথে যোগাযোগ করুন এবং সমস্যাটি সমাধান করার চেষ্টা করুন।

কারণ: Envoy প্রক্সি, Envoy-এর জন্য Apigee অ্যাডাপ্টারের সাথে যোগাযোগ করতে পারছে না।

রোগ নির্ণয়

সমস্যাটি নির্ণয় করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. নিশ্চিত করুন যে আপনি 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
  2. 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-এর সাথে যোগাযোগ করতে পারেনি।

  3. connection failure একাধিক কারণ থাকতে পারে। চলুন, প্রতিটি পরিস্থিতি খতিয়ে দেখা যাক।

দৃশ্যকল্প #১: অ্যাডাপ্টার প্রসেসটি চলছে না

যদি Apigee Adapter for Envoy প্রসেসটি চালু না থাকে, তাহলে এই ত্রুটিটি ঘটতে পারে।

  1. নিম্নলিখিত কমান্ডটি চালিয়ে Apigee Adapter for Envoy প্রসেসটি চলছে কিনা তা যাচাই করুন। যদি Apigee Adapter for Envoy প্রসেসটি চালু থাকে, তাহলে নিম্নলিখিত কমান্ডের ফলাফলে এটি তালিকাভুক্ত হওয়া উচিত।
    ps -ef | grep apigee-remote-service-envoy
  2. যদি এটি চালু না থাকে, তাহলে সেটাই সমস্যার কারণ।

সমাধান

  1. যদি Apigee Adapter for Envoy প্রসেসটি চালু না থাকে, তাহলে Apigee Adapter for Envoy চালু করুন।
  2. আরেকটি এপিআই অনুরোধ পাঠান এবং যাচাই করুন সমস্যাটি সমাধান হয়েছে কিনা।

দৃশ্যকল্প #২: অ্যাডাপ্টার প্রসেসটি নির্দিষ্ট পোর্টে লিসেন করছে না

যদি 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-এ কোনো সকেট চালু না থাকে, তাহলে সেটিই এই সমস্যার কারণ হতে পারে।

সমাধান

  1. Envoy-এর জন্য Apigee অ্যাডাপ্টারটি বন্ধ করুন এবং আবার চালু করুন।
  2. আরেকটি এপিআই অনুরোধ পাঠান এবং যাচাই করুন সমস্যাটি সমাধান হয়েছে কিনা।

দৃশ্যকল্প #৩: Envoy এবং Envoy-এর জন্য Apigee অ্যাডাপ্টারের মধ্যে নেটওয়ার্ক সংযোগ

  1. 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 '^]'.
  2. যদি আপনি টেলনেটের সাথে Connection timed out ত্রুটিটি দেখতে পান, তাহলে বুঝতে হবে Envoy এবং Apigee Adapter for Envoy-এর মধ্যে নেটওয়ার্ক সংযোগে সমস্যা রয়েছে।

সমাধান

Envoy এবং Apigee Adapter for Envoy-এর মধ্যে নেটওয়ার্ক সংযোগে কোনো সমস্যা দেখলে, অনুগ্রহ করে আপনার নেটওয়ার্কিং টিমের সাথে যোগাযোগ করুন এবং সমস্যাটি সমাধান করার চেষ্টা করুন।

যদি সমস্যাটি এখনও থেকে যায়, তাহলে 'অবশ্যই ডায়াগনস্টিক তথ্য সংগ্রহ করুন' অংশে যান।

রোগ নির্ণয়ের তথ্য অবশ্যই সংগ্রহ করতে হবে

উপরের নির্দেশাবলী অনুসরণ করার পরেও যদি সমস্যাটি থেকে যায়, তাহলে নিম্নলিখিত ডায়াগনস্টিক তথ্য সংগ্রহ করুন এবং তারপর Apigee Edge Support-এর সাথে যোগাযোগ করুন:

  1. ব্যবহৃত Apigee পণ্য:

    উদাহরণ: Apigee Edge Cloud, Apigee OPDK, Apigee hybrid, Apigee X

  2. অ্যাপিজি সংগঠন এবং পরিবেশ
  3. Edge API ব্যবহার করে API পণ্যের সংজ্ঞা পড়া হয়েছে:

    curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT

    তথ্যসূত্র: Apigee Edge APIs

  4. Apigee Edge UI ব্যবহার করে remote-service এপিআই প্রক্সিতে একটি ট্রেস সেশন শুরু করুন। এই সমস্যাটি পুনরায় তৈরি করুন এবং ট্রেস সেশন XML ফাইলটি শেয়ার করুন।

    সূত্র: ট্রেস টুল ব্যবহার | Apigee Edge

  5. 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
  6. curl কমান্ড ব্যবহার করে Envoy প্রক্সিতে পাঠানো একটি API অনুরোধ ( curl কমান্ডটির সম্পূর্ণ আউটপুট):
    curl -v ENVOY_PROXY_ENDPOINT
  7. curl কমান্ড ব্যবহার করে টার্গেট সার্ভিসে পাঠানো একটি API অনুরোধ ( curl কমান্ডের সম্পূর্ণ আউটপুট):
    curl -v TARGET_SERVICE_ENDPOINT