Прокси-сервер Envoy не работает и возвращает ошибку HTTP 403 Forbidden в адаптере Apigee для Envoy

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

Symptom

При вызове через адаптер 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
В продукте API отсутствует путь URI целевого сервиса Путь 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. Включите журналы отладки:

    Убедитесь, что в адаптере Apigee для Envoy включены журналы отладки, чтобы получать более подробную информацию об ошибке. Если нет, остановите адаптер Apigee для Envoy и запустите его снова, включив журналы отладки с помощью следующей команды:

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

Причина: продукт API не включен

Эта ошибка возникает, если определенный продукт API, используемый прокси-сервером Envoy, не включен в определенной среде, в которой вызываются вызовы API.

диагностика;

Чтобы диагностировать проблему, выполните следующие действия:

  1. Включите журналы отладки, как описано в шаге 2 выше.
  2. Проверьте журналы адаптера Apigee для 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 для Envoy.

    Подробнее о ведении журналов в адаптере Apigee для Envoy рассказывается в разделе Ведение журналов.

  3. Если вы видите это сообщение при авторизации запроса к API, скорее всего, это означает, что определенный продукт API не включен для среды, в которой вы выполняете вызовы API.
  4. Чтобы проверить это, выполните следующие действия:
    1. Войдите в интерфейс Edge.
    2. На странице Publish > API products (Публикация > Продукты API) нажмите на продукт API, который вы использовали для настройки адаптера Apigee для Envoy.
    3. Убедитесь, что среда, в которой вы отправляете запросы API, включена в продукте API.
    4. Если определенная среда не включена в продукт API, это и является причиной проблемы.
  5. Если нужная среда уже включена, перейдите к разделу Причина: в продукте API отсутствует путь URI целевого сервиса.

Разрешение

Если определенная среда не включена в продукт API, выполните следующие действия, чтобы устранить проблему:

  1. Войдите в интерфейс Edge.
  2. На странице Publish > API products (Публикация > Продукты API) нажмите на продукт API, который вы использовали для настройки адаптера Apigee для Envoy.
  3. На странице API products > Product name (Продукты API > Название продукта) нажмите Edit (Изменить).
  4. Установите флажок рядом с нужной средой, чтобы включить ее.
  5. Нажмите Сохранить.

Причина: в продукте API отсутствует путь URI целевого сервиса

Эта ошибка возникает, если путь URI целевого объекта не указан в определенном продукте API, используемом Envoy Proxy.

диагностика;

Чтобы диагностировать проблему, выполните следующие действия:

  1. Включите журналы отладки, как описано в шаге 2 выше.
  2. Проверьте журналы адаптера Apigee для 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. Если в журналах отладки адаптера Apigee для Envoy вы видите сообщение no path: REQUEST_URI_PATH, то это и есть причина проблемы. Если нет, перейдите к разделу Причина: отсутствие имени хоста в продукте API.

Разрешение

Если URI определенного запроса не добавлен в продукт API для определенной цели, выполните следующие действия, чтобы устранить проблему:

  1. Войдите в интерфейс Edge.
  2. На странице Publish > API products (Опубликовать > Продукты API) нажмите на продукт API, который вы использовали для настройки адаптера Apigee для Envoy.
  3. На странице API products > Product name (Продукты API > Название продукта) нажмите Edit (Изменить).
  4. На панели Ресурсы API добавьте URI запроса к API в продукт API.
  5. Отслеживайте журналы адаптера Apigee для Envoy и дождитесь, пока адаптер Apigee для Envoy получит обновленный продукт API. После этого отправьте ещё один запрос к API, чтобы проверить, была ли исправлена проблема.

Причина: в продукте API отсутствует имя хоста

Эта ошибка возникает, если целевое имя хоста и комбинация портов не добавлены в определенный продукт API, используемый Envoy Proxy.

диагностика;

Чтобы диагностировать проблему, выполните следующие действия:

  1. Включите журналы отладки, как описано в шаге 2 выше.
  2. Проверьте журналы адаптера Apigee для 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 для Envoy есть запись с сообщением no targets: HOSTNAME:PORT при авторизации запроса, то это и есть причина проблемы. Если нет, перейдите к разделу Причина: в заголовке запроса отсутствует ключ API.

Разрешение

Если целевое имя хоста и комбинация портов не добавлены в продукт API, выполните следующие действия, чтобы устранить проблему:

  1. Войдите в интерфейс Edge.
  2. На странице Publish > API products (Публикация > Продукты API) нажмите на продукт API, который вы использовали для настройки адаптера Apigee для Envoy.
  3. На странице API products > Product name (Продукты API > Название продукта) нажмите Edit (Изменить).
  4. На панели Цели удаленного сервиса Apigee добавьте целевое имя хоста и порт и нажмите Сохранить.

    Если в интерфейсе нет раздела Apigee remote service targets (Целевые сервисы удаленного сервиса Apigee), добавьте в продукт API настраиваемый атрибут с именем apigee-remote-service-targets и значением HOSTNAME:PORT с помощью API Edge. Пример:

    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 для Envoy и дождитесь, пока адаптер Apigee для Envoy получит обновленный продукт API. После этого отправьте ещё один запрос к API, чтобы проверить, устранена ли проблема.

Причина: в заголовке запроса отсутствует ключ API

Эта ошибка возникает, если ключ API не передан в заголовках запроса.

диагностика;

Чтобы диагностировать проблему, выполните следующие действия:

  1. Включите журналы отладки, как описано в шаге 2 выше.
  2. Проверьте журналы адаптера Apigee для 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 для Envoy есть запись в журнале с сообщением [missing authentication] в разделе Authenticate error , то это причина проблемы. Если нет, перейдите к разделу Причина: недействительный ключ API.

Разрешение

Если в журналах адаптера Apigee для Envoy появилась ошибка [missing authentication], выполните следующие действия, чтобы устранить проблему:

  1. Проверьте, отправил ли клиент ключ API с помощью заголовка HTTP x-api-key в запросе к API. Если нет, попросите клиента отправлять ключ API в заголовке HTTP x-api-key.
  2. Проверьте файл конфигурации адаптера Apigee для 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 и убедитесь, что в разделе Authenticate error есть сообщение [permission denied] . Обычно это сообщение появляется после того, как адаптер получает ключ 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. Если в журналах адаптера Apigee для Envoy есть запись в журнале с [permission denied] в разделе Authenticate error , это означает, что ключ API, переданный в составе запроса, недействителен и является причиной проблемы. Если нет, перейдите к разделу Причина: адаптер Apigee для Envoy не может взаимодействовать с прокси-сервером API удаленного сервиса.

Разрешение

Если в разделе Authenticate error журналов адаптера Apigee для Envoy вы видите сообщение [permission denied], выполните следующие действия, чтобы устранить проблему:

  1. Сравните ключ API, отправленный в запросе к API, со значением ключа API, найденным в приложении, подключенном к продукту API.
  2. Если ключ API, используемый клиентом, недействителен, попросите клиента отправить действительный ключ API.
  3. Если ключ API, используемый клиентом, действителен, но вы по-прежнему видите ошибку HTTP 403, обратитесь в службу поддержки Apigee Edge.

Причина: адаптер Apigee для Envoy не может взаимодействовать с прокси-сервером API удаленного сервиса

Эта ошибка возникает, если адаптер Apigee для Envoy не может взаимодействовать с прокси API удаленного сервиса, поскольку хост удаленного сервиса настроен неправильно.

диагностика;

Чтобы диагностировать проблему, выполните следующие действия:

  1. Включите журналы отладки, как описано в шаге 2 выше.
  2. Проверьте журналы адаптера Apigee для 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 для Envoy есть запись в журнале с сообщением no such host, то это и есть причина проблемы. Если нет, перейдите к разделу Причина: прокси-сервер Envoy не может взаимодействовать с адаптером Apigee для Envoy.

Разрешение

Если в журналах адаптера Apigee для Envoy отображаются указанные выше ошибки, выполните следующие действия, чтобы устранить проблему:

  1. Проверьте файл конфигурации адаптера Apigee для Envoy и убедитесь, что указанный URL прокси-сервера API удаленного сервиса действителен.

    Если нет, остановите адаптер Apigee для Envoy, исправьте URL прокси-сервера API удаленного сервиса в файле конфигурации, запустите адаптер Apigee для 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 не удалось установить связь с адаптером Apigee для Envoy по причине connection failure.

  3. Причин появления значка connection failure может быть несколько. Рассмотрим каждый из этих сценариев.

Сценарий 1. Процесс адаптера не запущен

Эта ошибка может возникнуть, если процесс адаптера Apigee для Envoy не запущен.

  1. Убедитесь, что процесс адаптера Apigee для Envoy запущен, выполнив следующую команду: Если процесс адаптера Apigee для Envoy запущен, он должен быть указан в результатах следующей команды:
    ps -ef | grep apigee-remote-service-envoy
  2. Если он не запущен, то это и есть причина проблемы.

Разрешение

  1. Если процесс адаптера Apigee для Envoy не запущен, запустите его.
  2. Отправьте ещё один запрос к API и проверьте, устранена ли проблема.

Сценарий 2. Процесс адаптера не прослушивает определенный порт

Если процесс адаптера Apigee для Envoy не прослушивает определенный порт, может возникнуть эта ошибка.

Если процесс адаптера Apigee для 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 для 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. Если при использовании telnet вы видите ошибку Connection timed out, это означает, что между Envoy и адаптером Apigee для Envoy есть проблема с подключением к сети.

Разрешение

Если вы обнаружите проблемы с подключением к сети между Envoy и адаптером Apigee для 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

    Справочная информация: API Apigee Edge

  4. Начните сеанс трассировки в прокси-сервере API remote-service с помощью интерфейса Apigee Edge. Воспроизведите проблему и поделитесь XML-файлом сеанса трассировки.

    Справочная информация: Использование инструмента трассировки | 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, отправленный прокси-серверу Envoy с помощью команды curl (полный вывод команды curl):
    curl -v ENVOY_PROXY_ENDPOINT
  7. Запрос к API, отправленный целевому сервису с помощью команды curl (полный вывод команды curl):
    curl -v TARGET_SERVICE_ENDPOINT