Envoy proxy fails with HTTP 403 Forbidden error in Apigee Adapter for Envoy

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

শুরু করার আগে

  1. আপনি 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
  2. ডিবাগ লগ চালু করুন:

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

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

কারণ: API প্রোডাক্ট চালু করা নেই

Envoy Proxy-এর ব্যবহার করা নির্দিষ্ট API প্রোডাক্ট, API কল ইনভোক করা নির্দিষ্ট এনভায়রনমেন্টে চালু না থাকলে এই সমস্যাটি হবে।

ডায়াগনসিস

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

  1. উপরে ২ নম্বর ধাপে যেভাবে ব্যাখ্যা করা হয়েছে সেইভাবে ডিবাগ লগ চালু করুন।
  2. 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 সম্পর্কে আরও তথ্যের জন্য, লগিং দেখুন।

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

রেজোলিউশন

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

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

কারণ: API প্রোডাক্টে টার্গেট পরিষেবার URI পাথ নেই

Envoy Proxy-তে ব্যবহৃত নির্দিষ্ট API প্রোডাক্টে টার্গেটের URI পাথ উল্লেখ করা না থাকলে এই সমস্যাটি হবে।

ডায়াগনসিস

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

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

  3. আপনি যদি Apigee Adapter for Envoy-এর ডিবাগ লগে no path: REQUEST_URI_PATH মেসেজটি দেখতে পান, তাহলে এটিই এই সমস্যার কারণ। না হলে, কারণ: API প্রোডাক্টে হোস্টনেম নেই দেখুন।

রেজোলিউশন

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

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

কারণ: API প্রোডাক্টে হোস্টনেম নেই

Envoy Proxy-এর ব্যবহার করা নির্দিষ্ট API প্রোডাক্টে টার্গেট হোস্টনেম ও পোর্ট কম্বিনেশন যোগ করা না থাকলে এই সমস্যা হবে।

ডায়াগনসিস

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

  1. উপরে ২ নম্বর ধাপে যেভাবে ব্যাখ্যা করা হয়েছে সেইভাবে ডিবাগ লগ চালু করুন।
  2. 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:8080 API প্রোডাক্ট ENVOY-PRODUCT-1-এ পাওয়া যায়নি।

  3. অনুরোধ অনুমোদন করার সময় Apigee Adapter for Envoy লগে no targets: HOSTNAME:PORT মেসেজ সহ কোনও এন্ট্রি থাকলে, এটিই হল সমস্যার কারণ। না হলে, এখানে যান: কারণ: অনুরোধের হেডারে API key নেই।

রেজোলিউশন

API প্রোডাক্টে টার্গেট হোস্টনেম ও পোর্ট কম্বিনেশন যোগ করা না থাকলে, সমস্যা সমাধানের জন্য নিচের ধাপগুলি অনুসরণ করুন:

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

কারণ: অনুরোধের হেডারে API key নেই

অনুরোধের হেডার হিসেবে API কী না পাঠালে এই সমস্যা হবে।

ডায়াগনসিস

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

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

  3. Apigee Adapter for Envoy লগে [missing authentication]-এর অধীনে Authenticate error বিভাগ সহ কোনও লগ এন্ট্রি থাকলে, এটিই সমস্যার কারণ। যদি না হয়, তাহলে কারণ: ভুল API কী-তে যান।

রেজোলিউশন

Envoy লগের জন্য Apigee অ্যাডাপ্টারে [missing authentication] সমস্যাটি দেখা গেলে, সমস্যাটি সমাধান করতে নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

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

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

কারণ: ভুল API key

অনুরোধের হেডারের অংশ হিসেবে ভুল API কী পাস করা হলে এই সমস্যা হবে।

ডায়াগনসিস

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

  1. উপরে ২ নম্বর ধাপে যেভাবে ব্যাখ্যা করা হয়েছে সেইভাবে ডিবাগ লগ চালু করুন।
  2. 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 কীটি সঠিক ছিল না।

  3. Envoy-এর জন্য Apigee অ্যাডাপ্টারের লগে Authenticate error বিভাগের অধীনে [permission denied] সহ কোনও লগ এন্ট্রি থাকলে, এটি ইঙ্গিত করে যে অনুরোধের অংশ হিসেবে পাস করা API কীটি অবৈধ এবং এটিই সমস্যার কারণ। যদি না হয়, তাহলে কারণ: Apigee Adapter for Envoy রিমোট-সার্ভিস API প্রক্সির সাথে যোগাযোগ করতে পারছে না।

রেজোলিউশন

Envoy লগের জন্য Apigee অ্যাডাপ্টারের Authenticate error বিভাগে [permission denied] মেসেজটি দেখা গেলে, সমস্যা সমাধান করতে নিচে উল্লেখ করা ধাপগুলি অনুসরণ করুন:

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

কারণ: Apigee Adapter for Envoy, রিমোট-সার্ভিস API প্রক্সির সাথে যোগাযোগ করতে পারছে না

কনফিগার করা রিমোট সার্ভিস হোস্ট ভুল হলে, Envoy-এর জন্য Apigee অ্যাডাপ্টার রিমোট সার্ভিস API প্রক্সির সাথে যোগাযোগ করতে না পারলে এই সমস্যা হবে।

ডায়াগনসিস

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

  1. উপরে ২ নম্বর ধাপে যেভাবে ব্যাখ্যা করা হয়েছে সেইভাবে ডিবাগ লগ চালু করুন।
  2. 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 সমস্যার মাধ্যমে দেখানো হয়েছে।

  3. Apigee Adapter for Envoy-এর লগে no such host মেসেজ সহ কোনও লগ এন্ট্রি থাকলে, এটিই সমস্যার কারণ। যদি না হয়, তাহলে কারণ: Envoy proxy, Apigee Adapter for Envoy-এর সাথে যোগাযোগ করতে পারছে না।

রেজোলিউশন

Envoy লগের জন্য Apigee অ্যাডাপ্টারে উপরের সমস্যাগুলি দেখানো হলে, সমস্যা সমাধানের জন্য নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

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

কারণ: Envoy proxy, Apigee Adapter for Envoy-এর সাথে যোগাযোগ করতে পারছে না

ডায়াগনসিস

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

  1. 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
  2. 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 অ্যাডাপ্টরের সাথে যোগাযোগ করতে পারেনি।

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

পরিস্থিতি #১: অ্যাডাপ্টার প্রসেস চলছে না

Apigee Adapter for Envoy প্রসেস না চললে, এই সমস্যা হতে পারে।

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

রেজোলিউশন

  1. Envoy-এর জন্য Apigee অ্যাডাপ্টার প্রসেস না চললে, Envoy-এর জন্য Apigee অ্যাডাপ্টার চালু করুন।
  2. আরেকটি 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-এ কোনও সকেট লিসেনিং না থাকলে, এটি এই সমস্যার কারণ হতে পারে।

রেজোলিউশন

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

দৃশ্য #৩: Envoy ও Apigee Adapter for Envoy-এর মধ্যে নেটওয়ার্ক কানেক্টিভিটি

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

রেজোলিউশন

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

এর পরেও সমস্যা থেকে গেলে, রোগ নির্ণয় সংক্রান্ত তথ্য অবশ্যই সংগ্রহ করতে হবে লিঙ্কে যান।

অবশ্যই ডায়াগনস্টিক তথ্য সংগ্রহ করতে হবে

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

  1. ব্যবহৃত Apigee প্রোডাক্ট:

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

  2. Apigee সংস্থা ও এনভায়রনমেন্ট
  3. Edge API ব্যবহার করে API প্রোডাক্টের সংজ্ঞা পড়ুন:

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

    রেফারেন্স: Apigee Edge API

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

    রেফারেন্স: ট্রেস টুল ব্যবহার করা | Apigee Edge

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