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

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

Симптом

При вызове через адаптер 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-продукт не активирован для данной среды. Пользователи публичных и частных облачных сервисов на периферии сети
Отсутствует путь URI целевого сервиса в API продукта. URI-путь целевого сервиса отсутствует или не добавлен к продукту API в разделе ресурсов API. Пользователи публичных и частных облачных сервисов на периферии сети
В API-продукте отсутствует имя хоста. В API-интерфейсе продукта в разделе «Цели удаленных служб Apigee» отсутствует имя хоста, указанное в запросе к клиентскому API. Пользователи публичных и частных облачных сервисов на периферии сети
Отсутствует ключ API в заголовке запроса. Ключ API не передается в HTTP-заголовке x-api-key . Пользователи публичных и частных облачных сервисов на периферии сети
Недействительный ключ API Переданный в запросе API-ключ недействителен. Пользователи публичных и частных облачных сервисов на периферии сети
Адаптер Apigee для Envoy не может взаимодействовать с прокси-сервером API удаленного сервиса. Адаптер Apigee для Envoy не может взаимодействовать с прокси-сервером API удаленного сервиса. Пользователи публичных и частных облачных сервисов на периферии сети
Прокси-сервер Envoy не может установить связь с адаптером Apigee для Envoy. Прокси-сервер Envoy не может установить связь с адаптером Apigee для Envoy. Пользователи публичных и частных облачных сервисов на периферии сети

Прежде чем начать

  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, не включен в той среде, в которой выполняются вызовы 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. На странице «Публикация > Продукты API» щелкните по конкретному продукту API, который вы использовали для настройки адаптера Apigee для Envoy.
    3. Убедитесь, что в API-продукте включена поддержка той среды, в которой вы отправляете API-запросы.
    4. Если данная среда не включена в API-продукте, то это и является причиной проблемы.
  5. Если соответствующая среда уже включена, перейдите к разделу «Причина: Отсутствует путь URI целевого сервиса в API-продукте» .

Разрешение

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

  1. Войдите в пользовательский интерфейс Edge .
  2. На странице «Публикация > Продукты API» щелкните по конкретному продукту API, который вы использовали для настройки адаптера Apigee для Envoy.
  3. На странице «Продукты API > Название продукта» нажмите «Редактировать» .
  4. Для выбора нужной среды и выполнения API-запросов установите флажок напротив соответствующего параметра.
  5. Нажмите « Сохранить ».

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

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

Диагноз

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

  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. На странице «Публикация > Продукты API» щелкните по конкретному продукту API, который вы использовали для настройки адаптера Apigee для Envoy.
  3. На странице «Продукты API > Название продукта» нажмите «Редактировать» .
  4. В панели ресурсов API добавьте URI запроса API к продукту API.
  5. Отслеживайте журналы Apigee Adapter for Envoy и дождитесь, пока Apigee Adapter for Envoy получит обновленный API-продукт. После этого отправьте еще один API-запрос, чтобы проверить исправление.

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

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

Диагноз

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

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

Разрешение

Если комбинация имени хоста и порта целевого объекта не добавлена ​​в API-продукт, выполните следующие действия для решения проблемы:

  1. Войдите в пользовательский интерфейс Edge .
  2. На странице «Публикация > Продукты API» щелкните по конкретному продукту API, который вы использовали для настройки адаптера Apigee для Envoy.
  3. На странице «Продукты API > Название продукта» нажмите «Редактировать» .
  4. В панели «Цели удаленных служб Apigee» добавьте имя хоста и порт целевой службы и нажмите «Сохранить» .

    Если в пользовательском интерфейсе отсутствует раздел « Цели удаленных служб Apigee» , добавьте пользовательский атрибут к продукту 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 для Envoy и убедитесь, что в разделе Authenticate error отображается сообщение [missing authentication] .

    Пример вывода отладочного журнала:

    2021-01-12T08:20:31.461Z        DEBUG   auth/auth.go:98 Authenticate: key: , claims: map[string]interface {}(nil)
    2021-01-12T08:20:31.461Z        DEBUG   auth/auth.go:159
    Authenticate error: &auth.Context{Context:(*server.Handler)
    (0xc0001a0600), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0,
    loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [missing authentication]
    2021-01-12T08:20:31.461Z        DEBUG   server/authorization.go:205     sending denied: UNAUTHENTICATED
    2021-01-12T08:20:32.448Z        DEBUG   server/header_context.go:68     No context header x-apigee-api, using target header
    : :authority

    В приведенном выше примере выходных данных содержится сообщение [missing authentication] . Это сообщение указывает на то, что ключ API не был передан в заголовке запроса.

  3. Если в логах Apigee Adapter for Envoy в разделе Authenticate error содержится запись с сообщением [missing authentication] , то это и есть причина проблемы. В противном случае перейдите к разделу «Причина: Недействительный ключ API» .

Разрешение

Если в журналах Apigee Adapter for 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 Key по умолчанию изменено на 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 Adapter for Envoy в разделе Authenticate error » содержится запись [permission denied] , это означает, что переданный в запросе ключ API недействителен и является причиной проблемы. В противном случае перейдите к разделу «Причина: Apigee Adapter for Envoy не может взаимодействовать с прокси-сервером API удаленного сервиса» .

Разрешение

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

  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

    Пример вывода отладочного журнала:

    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-адресе прокси-сервера API удаленного сервера, недействительно, о чем свидетельствует ошибка no such host .

  3. Если в логах Apigee Adapter for Envoy содержится запись с сообщением no such host , то это и есть причина проблемы. В противном случае перейдите к разделу «Причина: прокси-сервер Envoy не может связаться с Apigee Adapter for Envoy» .

Разрешение

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

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

    В противном случае остановите Apigee Adapter for Envoy, исправьте URL-адрес прокси-сервера удаленного 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. Убедитесь, что прокси remote-service развернут в соответствующей среде Edge. Если нет, разверните прокси remote-service в соответствующей среде Edge и повторите попытку.
  3. Проверьте сетевое соединение между адаптером Apigee для Envoy и конечной точкой прокси 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 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 Adapter for 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 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

    Справочная информация: 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