پروکسی Envoy با خطای HTTP 403 Forbidden در Apigee Adapter for Envoy از کار می‌افتد.

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

علامت

پروکسی Envoy هنگام فراخوانی از طریق Apigee Adapter برای 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 برای محیط خاص فعال نیست. کاربران فضای ابری عمومی و خصوصی Edge
مسیر URI سرویس هدف در محصول API وجود ندارد مسیر URI سرویس هدف وجود ندارد یا در بخش منابع API به محصول API اضافه نشده است. کاربران فضای ابری عمومی و خصوصی Edge
نام میزبان در محصول API وجود ندارد نام میزبان داده شده در درخواست API کلاینت، در محصول API تحت اهداف سرویس راه دور Apigee وجود ندارد. کاربران فضای ابری عمومی و خصوصی Edge
کلید API در هدر درخواست وجود ندارد کلید API در هدر HTTP مربوط به x-api-key ارسال نشده است. کاربران فضای ابری عمومی و خصوصی Edge
کلید API نامعتبر است کلید API ارسال شده به عنوان بخشی از درخواست نامعتبر است. کاربران فضای ابری عمومی و خصوصی Edge
آداپتور Apigee برای Envoy قادر به برقراری ارتباط با پروکسی API سرویس از راه دور نیست آداپتور Apigee برای Envoy قادر به برقراری ارتباط با پروکسی API سرویس از راه دور نیست. کاربران فضای ابری عمومی و خصوصی Edge
پروکسی Envoy قادر به برقراری ارتباط با آداپتور Apigee برای Envoy نیست پروکسی Envoy قادر به برقراری ارتباط با آداپتور Apigee برای Envoy نیست کاربران فضای ابری عمومی و خصوصی Edge

قبل از اینکه شروع کنی

  1. تأیید کنید که پیام پاسخ 403 Forbidden را از پروکسی Envoy دریافت می‌کنید. برای مثال:
    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. فعال کردن گزارش‌های اشکال‌زدایی:

    مطمئن شوید که گزارش‌های اشکال‌زدایی (debug logs) را در Apigee Adapter for Envoy فعال کرده‌اید تا جزئیات بیشتری در مورد خطا ثبت شود. در غیر این صورت، Apigee Adapter for Envoy را متوقف کرده و دوباره آن را اجرا کنید و گزارش‌های اشکال‌زدایی را با استفاده از دستور زیر فعال کنید:

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

علت: محصول API فعال نیست

این خطا زمانی رخ می‌دهد که محصول API خاص مورد استفاده توسط Envoy Proxy در محیط خاصی که فراخوانی‌های API در آن فراخوانی می‌شوند، فعال نباشد.

تشخیص

برای تشخیص مشکل، مراحل زیر را انجام دهید:

  1. همانطور که در مرحله 2 بالا توضیح داده شد، گزارش‌های اشکال‌زدایی را فعال کنید.
  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

    مثال بالا نشان می‌دهد که محصول API ENVOY-PRODUCT-1 در Apigee Adapter برای Envoy یافت نشد.

    برای اطلاعات بیشتر در مورد آداپتور Apigee برای ثبت وقایع Envoy، به ثبت وقایع مراجعه کنید.

  3. اگر هنگام تأیید درخواست API این پیام را مشاهده کردید، به احتمال زیاد نشان می‌دهد که محصول API خاص برای محیطی که در آن فراخوانی‌های API را انجام می‌دهید، فعال نیست.
  4. برای تأیید این موضوع مراحل زیر را انجام دهید:
    1. وارد رابط کاربری Edge شوید.
    2. در صفحه Publish > API products ، روی محصول API خاصی که برای پیکربندی Apigee Adapter برای Envoy استفاده کرده‌اید، کلیک کنید.
    3. تأیید کنید که محیط خاصی که در آن درخواست‌های API را انجام می‌دهید، در محصول API فعال شده باشد.
    4. اگر محیط خاص در محصول API فعال نشده باشد، دلیل این مشکل همین است.
  5. اگر محیط خاص از قبل فعال شده است، در API Product به قسمت Cause: Missing target service URI path بروید.

وضوح تصویر

اگر محیط خاص در محصول API فعال نشده است، مراحل زیر را برای حل مشکل انجام دهید:

  1. وارد رابط کاربری Edge شوید.
  2. در صفحه Publish > API products ، روی محصول API خاصی که برای پیکربندی Apigee Adapter برای Envoy استفاده کرده‌اید، کلیک کنید.
  3. در صفحه محصولات API > نام محصول ، روی ویرایش کلیک کنید.
  4. با انتخاب کادر انتخاب محیط مربوطه، محیط خاصی را که می‌خواهید درخواست‌های API را در آن انجام دهید، فعال کنید.
  5. روی ذخیره کلیک کنید.

علت: مسیر URI سرویس هدف در محصول API وجود ندارد

این خطا زمانی رخ می‌دهد که مسیر URI هدف در محصول API خاص مورد استفاده توسط Envoy Proxy مشخص نشده باشد.

تشخیص

برای تشخیص مشکل، مراحل زیر را انجام دهید:

  1. همانطور که در مرحله 2 بالا توضیح داده شد، گزارش‌های اشکال‌زدایی را فعال کنید.
  2. لاگ‌های Apigee Adapter for Envoy را بررسی کنید و مطمئن شوید که پیام زیر برای محصول API خاص مرتبط با یک هدف خاص در بخش Authorizing request نمایش داده می‌شود:

    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

    این نشان می‌دهد که مسیر /echo1 در محصول API ENVOY-PRODUCT-1 یافت نشده است.

  3. اگر پیام no path: REQUEST_URI_PATH در لاگ‌های اشکال‌زدایی Apigee Adapter for Envoy مشاهده کردید، پس علت این مشکل همین است. در غیر این صورت، به قسمت Cause: Missing hostname در محصول API بروید.

وضوح تصویر

اگر URI درخواست خاص برای هدف خاص به محصول API اضافه نشد، مراحل زیر را برای حل مشکل انجام دهید:

  1. وارد رابط کاربری Edge شوید.
  2. در صفحه Publish > API products ، روی محصول API خاصی که برای پیکربندی Apigee Adapter برای Envoy استفاده کرده‌اید، کلیک کنید.
  3. در صفحه محصولات API > نام محصول ، روی ویرایش کلیک کنید.
  4. در پنل منابع API ، آدرس درخواست API را به محصول API اضافه کنید.
  5. لاگ‌های Apigee Adapter for Envoy را زیر نظر بگیرید و منتظر بمانید تا Apigee Adapter for Envoy محصول API به‌روزرسانی‌شده را دریافت کند. پس از آن، یک درخواست API دیگر برای تأیید رفع مشکل ارسال کنید.

علت: نام میزبان در محصول API وجود ندارد

این خطا در صورتی رخ می‌دهد که ترکیب نام میزبان و پورت هدف به محصول API خاص مورد استفاده توسط Envoy Proxy اضافه نشده باشد.

تشخیص

برای تشخیص مشکل، مراحل زیر را انجام دهید:

  1. همانطور که در مرحله 2 بالا توضیح داده شد، گزارش‌های اشکال‌زدایی را فعال کنید.
  2. لاگ‌های Apigee Adapter for Envoy را بررسی کنید و مطمئن شوید که پیام زیر برای محصول API خاص مرتبط با یک هدف خاص در بخش Authorizing request نمایش داده می‌شود:

    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 ، علت مشکل همین است. در غیر این صورت، در هدر درخواست به قسمت Cause: Missing API key بروید.

وضوح تصویر

اگر ترکیب نام میزبان و پورت هدف به محصول API اضافه نشد، مراحل زیر را برای حل مشکل انجام دهید:

  1. وارد رابط کاربری Edge شوید.
  2. در صفحه Publish > API products ، روی محصول API خاصی که برای پیکربندی Apigee Adapter برای Envoy استفاده کرده‌اید، کلیک کنید.
  3. در صفحه محصولات API > نام محصول ، روی ویرایش کلیک کنید.
  4. در پنجره‌ی اهداف سرویس از راه دور Apigee ، نام میزبان و پورت هدف را اضافه کنید و روی ذخیره کلیک کنید.

    اگر بخش Apigee remote service targets را در رابط کاربری نمی‌بینید، یک ویژگی سفارشی به محصول API با نام apigee-remote-service-targets اضافه کنید و مقدار HOSTNAME : PORT را با استفاده از Edge API اضافه کنید. برای مثال:

    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 در هدر درخواست

اگر کلید API به عنوان بخشی از هدرهای درخواست ارسال نشود، این خطا رخ خواهد داد.

تشخیص

برای تشخیص مشکل، مراحل زیر را انجام دهید:

  1. همانطور که در مرحله 2 بالا توضیح داده شد، گزارش‌های اشکال‌زدایی را فعال کنید.
  2. لاگ‌های Apigee Adapter for Envoy را بررسی کنید و مطمئن شوید که پیام [missing authentication] را در بخش Authenticate error مشاهده می‌کنید.

    نمونه خروجی گزارش اشکال‌زدایی:

    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 باشد، پس علت مشکل همین است. در غیر این صورت، به قسمت Cause: Invalid API key بروید.

وضوح تصویر

اگر خطای [missing authentication] در لاگ‌های Apigee Adapter for Envoy نمایش داده شد، مراحل زیر را برای حل مشکل انجام دهید:

  1. بررسی کنید که آیا کلاینت کلید API را با استفاده از هدر HTTP x-api-key در درخواست API ارسال کرده است یا خیر. در غیر این صورت، از کلاینت بخواهید که کلید API را در هدر 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 پیش‌فرض تغییر کرده است، از کلاینت بخواهید از نام هدر کلید API به‌روزرسانی‌شده استفاده کند و درخواست API دیگری ارسال کنید و بررسی کنید که آیا مشکل حل می‌شود یا خیر.

علت: کلید API نامعتبر

این خطا در صورتی رخ می‌دهد که کلید API نامعتبر به عنوان بخشی از هدر درخواست ارسال شود.

تشخیص

برای تشخیص مشکل، مراحل زیر را انجام دهید:

  1. همانطور که در مرحله 2 بالا توضیح داده شد، گزارش‌های اشکال‌زدایی را فعال کنید.
  2. لاگ‌های Apigee Adapter for Envoy را بررسی کنید و مطمئن شوید که پیام [permission denied] را در بخش Authenticate error مشاهده می‌کنید. این پیام معمولاً پس از دریافت کلید API توسط Adapter نمایش داده می‌شود که با پیام 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. اگر گزارش‌های Apigee Adapter for Envoy حاوی ورودی گزارش با عبارت [permission denied] در بخش Authenticate error باشد، نشان می‌دهد که کلید API ارسال شده به عنوان بخشی از درخواست نامعتبر است و علت مشکل است. در غیر این صورت، به قسمت «علت: Apigee Adapter for Envoy قادر به برقراری ارتباط با پروکسی API سرویس از راه دور نیست» بروید.

وضوح تصویر

اگر پیام [permission denied] در بخش Authenticate error در لاگ‌های Apigee Adapter for Envoy مشاهده شد، مراحل زیر را برای حل مشکل انجام دهید:

  1. کلید API ارسال شده در درخواست API را با مقدار کلید API موجود در برنامه متصل به محصول API بررسی کنید.
  2. اگر کلید API استفاده شده توسط کلاینت معتبر نیست، از کلاینت درخواست کنید تا کلید API معتبر را ارسال کند.
  3. اگر کلید API استفاده شده توسط کلاینت معتبر است و اگر هنوز خطای HTTP 403 را مشاهده می‌کنید، لطفاً برای بررسی بیشتر با پشتیبانی Apigee Edge تماس بگیرید.

علت: آداپتور Apigee برای Envoy قادر به برقراری ارتباط با پروکسی API سرویس از راه دور نیست

این خطا زمانی رخ می‌دهد که آداپتور Apigee برای Envoy نتواند با سرویس از راه دور API Proxy ارتباط برقرار کند، در صورتی که میزبان سرویس از راه دور پیکربندی شده نامعتبر باشد.

تشخیص

برای تشخیص مشکل، مراحل زیر را انجام دهید:

  1. همانطور که در مرحله 2 بالا توضیح داده شد، گزارش‌های اشکال‌زدایی را فعال کنید.
  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 برای Envoy قادر به برقراری ارتباط با پروکسی API سرویس از راه دور نبود زیرا نام میزبان ارائه شده در URL پروکسی API سرور راه دور معتبر نیست، همانطور که با خطای 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 را بررسی کنید و تأیید کنید که URL پروکسی API سرویس از راه دور داده شده معتبر است.

    اگر اینطور نیست، Apigee Adapter for Envoy را متوقف کنید، آدرس اینترنتی پروکسی API سرویس از راه دور را در فایل پیکربندی اصلاح کنید، 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. تأیید کنید که پروکسی API remote-service در محیط Edge مربوطه مستقر شده است. در غیر این صورت، پروکسی API remote-service را در محیط Edge مربوطه مستقر کرده و دوباره امتحان کنید.
  3. اتصال شبکه بین آداپتور Apigee برای Envoy و نقطه پایانی پروکسی API remote-service را تأیید کنید. در صورت مشاهده هرگونه مشکل در اتصال شبکه، با تیم شبکه خود تماس بگیرید و سعی کنید مشکل را حل کنید.

علت: پروکسی Envoy قادر به برقراری ارتباط با آداپتور Apigee برای 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. لاگ‌های آداپتور Apigee برای 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'

    مثال بالا نشان می‌دهد که Envoy به دلیل connection failure قادر به برقراری ارتباط با Apigee Adapter برای 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 در حال اجرا نیست، آن را اجرا کنید.
  2. درخواست API دیگری ارسال کنید و بررسی کنید که آیا مشکل برطرف شده است یا خیر.

سناریوی شماره ۲: فرآیند آداپتور به پورت خاص گوش نمی‌دهد

اگر فرآیند Apigee Adapter for Envoy به پورت خاص گوش ندهد، ممکن است این خطا رخ دهد.

اگر فرآیند Apigee Adapter for Envoy در حال اجرا است، تأیید کنید که یک سوکت روی پورت ۵۰۰۰ در حال گوش دادن است: APIGEE_ENVOY_ADAPTER_HOST :5000 . می‌توانید دستور netstat را برای تأیید این موضوع اجرا کنید:

sudo netstat -lnp | grep 5000

خروجی نمونه:

sudo netstat -lnp | grep 5000

tcp6       0      0 :::5000                 :::*                    LISTEN      1596530/./apigee-re

اگر هیچ سوکتی روی پورت ۵۰۰۰ در حال گوش دادن نباشد، می‌تواند دلیل این مشکل باشد.

وضوح تصویر

  1. آداپتور Apigee مخصوص Envoy را متوقف کرده و دوباره روشن کنید.
  2. درخواست API دیگری ارسال کنید و بررسی کنید که آیا مشکل برطرف شده است یا خیر.

سناریوی شماره ۳: اتصال شبکه بین Envoy و آداپتور Apigee برای Envoy

  1. اتصال شبکه بین Envoy و آداپتور Apigee را برای Envoy تأیید کنید:
    ssh $ENVOY_HOST
    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000

    اگر telnet بتواند یک اتصال TCP به آداپتور Apigee برای Envoy برقرار کند، خروجی مشابه زیر نمایش داده خواهد شد:

    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
    
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
  2. اگر خطای « Connection timed out » را مشاهده کردید، این نشان می‌دهد که مشکلی در اتصال شبکه بین Envoy و Apigee Adapter برای Envoy وجود دارد.

وضوح تصویر

اگر هرگونه مشکل اتصال شبکه بین Envoy و Apigee Adapter for Envoy مشاهده کردید، لطفاً با تیم شبکه خود تماس بگیرید و سعی کنید مشکل را حل کنید.

اگر مشکل همچنان ادامه داشت، به «باید اطلاعات تشخیصی جمع‌آوری شود» بروید.

باید اطلاعات تشخیصی جمع‌آوری کند

اگر مشکل پس از دنبال کردن دستورالعمل‌های بالا همچنان ادامه داشت، اطلاعات تشخیصی زیر را جمع‌آوری کرده و سپس با پشتیبانی Apigee Edge تماس بگیرید:

  1. محصول مورد استفاده Apigee:

    مثال: Apigee Edge Cloud، Apigee OPDK، Apigee hybrid، Apigee X

  2. سازمان و محیط آپیجی
  3. تعریف محصول API که با استفاده از Edge API خوانده می‌شود:

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

    مرجع: API های Apigee Edge

  4. با استفاده از رابط کاربری Apigee Edge، یک جلسه ردیابی در پروکسی API remote-service شروع کنید. این مشکل را دوباره ایجاد کنید و فایل XML جلسه ردیابی را به اشتراک بگذارید.

    مرجع: استفاده از ابزار Trace | Apigee Edge

  5. آداپتور Apigee برای گزارش‌های Envoy (گزارش‌های کامل مربوط به دوره زمانی داده شده)

    استقرارهای مستقل:

    # 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. یک درخواست API که با استفاده از دستور curl به پروکسی Envoy ارسال شده است (خروجی کامل دستور curl ):
    curl -v ENVOY_PROXY_ENDPOINT
  7. یک درخواست API که با استفاده از دستور curl به سرویس هدف ارسال می‌شود (خروجی کامل دستور curl ):
    curl -v TARGET_SERVICE_ENDPOINT