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

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

علامت

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

قبل از شروع

  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. فعال کردن گزارش‌های اشکال‌زدایی:

    مطمئن شوید که گزارش‌های اشکال‌زدایی را در 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 برای گزارش‌های Envoy را بررسی کنید و بررسی کنید که پیام زیر در بخش Authorizing request نمایش داده می‌شود:
    product: API_PRODUCT_NAME not found

    نمونه خروجی Log Debug:

    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 یافت نشد.

    برای اطلاعات بیشتر در مورد Apigee Adapter for Envoy logging، به Logging مراجعه کنید.

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

قطعنامه

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

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

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

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

تشخیص

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

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

    no path: REQUEST_URI_PATH

    نمونه خروجی Log Debug:

    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 مشاهده کردید، دلیل این مشکل همین است. اگر نه، به علت: نام میزبان گم شده در محصول API بروید.

قطعنامه

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

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

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

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

تشخیص

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

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

    no targets: HOSTNAME:PORT

    نمونه خروجی Log Debug:

    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. در صفحه انتشار > محصولات API ، روی محصول API خاصی که برای پیکربندی Apigee Adapter برای Envoy استفاده کردید، کلیک کنید.
  3. در صفحه محصولات API > نام محصول ، روی ویرایش کلیک کنید.
  4. در بخش اهداف سرویس راه دور Apigee ، نام میزبان و پورت مورد نظر را اضافه کنید و روی ذخیره کلیک کنید.

    اگر بخش اهداف سرویس از راه دور 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 در هدر درخواست

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

تشخیص

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

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

    نمونه خروجی Log Debug:

    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 به api-key تغییر یافته است. در این حالت، باید کلید API را به عنوان بخشی از هدر api-key منتقل کنید.

  3. اگر نام هدر کلید API پیش‌فرض تغییر کرده است، از مشتری بخواهید از نام سرصفحه کلید API به‌روزرسانی شده استفاده کند و درخواست API دیگری ارسال کند و بررسی کنید که آیا مشکل را حل می‌کند یا خیر.

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

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

تشخیص

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

  1. همانطور که در مرحله 2 در بالا توضیح داده شد، گزارش های اشکال زدایی را فعال کنید.
  2. آداپتور Apigee برای گزارش‌های Envoy را بررسی کنید و بررسی کنید که پیام [permission denied] را در بخش Authenticate error مشاهده می‌کنید. این معمولاً پس از واکشی کلید API توسط آداپتور نمایش داده می شود که با پیام fetchToken fetching: API_KEY .

    نمونه خروجی Log Debug:

    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 ارسال شده به عنوان بخشی از درخواست نامعتبر است و دلیل مشکل است. اگر نه، به Cause بروید: 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 Adapter for Envoy نتواند با پراکسی API سرویس راه دور ارتباط برقرار کند، اگر میزبان سرویس راه دور پیکربندی شده نامعتبر باشد، این خطا رخ خواهد داد.

تشخیص

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

  1. همانطور که در مرحله 2 در بالا توضیح داده شد، گزارش های اشکال زدایی را فعال کنید.
  2. آداپتور Apigee برای گزارش‌های Envoy را بررسی کنید و بررسی کنید که پیام زیر را مشاهده می‌کنید:

    Error retrieving products: REQUEST_URI: no such host

    نمونه خروجی Log Debug:

    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 قادر به برقراری ارتباط با پراکسی API سرویس راه دور نبود، زیرا نام میزبان ارائه شده در URL پروکسی سرور راه دور معتبر نیست، همانطور که با خطای no such host نشان داده شده است.

  3. اگر لاگ‌های Apigee Adapter for Envoy حاوی یک ورودی گزارش با پیام no such host است، دلیل این مشکل همین است. اگر نه، به Cause بروید: پروکسی Envoy قادر به برقراری ارتباط با Apigee Adapter برای Envoy نیست .

قطعنامه

اگر خطاهای بالا در لاگ های Apigee Adapter for Envoy نمایش داده می شوند، مراحل زیر را برای حل مشکل انجام دهید:

  1. فایل پیکربندی Apigee Adapter for Envoy را بررسی کنید و تأیید کنید که URL پروکسی API سرویس راه دور ارائه شده معتبر است.

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

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

    نمونه خروجی Log Debug:

    [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 می تواند به دلایل مختلفی باشد. بیایید به هر یک از سناریوها نگاه کنیم.

سناریوی شماره 1: فرآیند آداپتور در حال اجرا نیست

اگر فرآیند 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. درخواست API دیگری انجام دهید و بررسی کنید که آیا مشکل برطرف شده است.

سناریوی شماره 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. آداپتور Apigee را برای Envoy متوقف کنید و دوباره آن را شروع کنید.
  2. درخواست API دیگری انجام دهید و بررسی کنید که آیا مشکل برطرف شده است.

سناریوی شماره 3: اتصال شبکه بین Envoy و Apigee Adapter for Envoy

  1. بررسی اتصال شبکه بین Envoy و Apigee Adapter for Envoy:
    ssh $ENVOY_HOST
    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000

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

    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 تماس بگیرید:

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

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

  2. سازمان و محیط Apigee
  3. خواندن تعریف محصول API با استفاده از Edge API:

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

    مرجع: Apigee Edge APIs

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

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