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

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

Симптом

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

Сообщение об ошибке

Отображается следующее сообщение об ошибке:

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
В продукте API отсутствует путь URI целевой службы. Путь 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 для 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 для 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 Adaptor for 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. Нажмите Сохранить .

Причина: в продукте API отсутствует путь URI целевой службы.

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

Разрешение

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

  1. Войдите в пользовательский интерфейс Edge .
  2. На странице «Публикация» > «Продукты API» выберите конкретный продукт API, который вы использовали для настройки адаптера Apigee для Envoy.
  3. На странице Продукты API > Название продукта нажмите Изменить .
  4. На панели ресурсов API добавьте URI запроса API к продукту API.
  5. Отслеживайте журналы адаптера Apigee для Envoy и подождите, пока адаптер Apigee для 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 Adaptor 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 для 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 Adaptor for Envoy содержат запись журнала с сообщением [missing authentication] в разделе Authenticate error , то это является причиной проблемы. Если нет, перейдите к разделу «Причина: неверный ключ API» .

Разрешение

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

  1. Проверьте, отправил ли клиент ключ API, используя HTTP-заголовок x-api-key в запросе API. Если нет, попросите клиента отправить ключ API в HTTP-заголовке x-api-key .
  2. Проверьте файл конфигурации Apigee Adaptor 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 .

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

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

Разрешение

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

  1. Проверьте файл конфигурации Apigee Adaptor for 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. Убедитесь, что прокси remote-service развернут в соответствующей пограничной среде. Если нет, разверните прокси 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 Adaptor for Envoy по причине connection failure .

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

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

Если процесс Apigee Adaptor for Envoy не запущен, может возникнуть эта ошибка.

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

Разрешение

  1. Если процесс Apigee Adaptor for Envoy не запущен, запустите Apigee Adaptor for Envoy.
  2. Сделайте еще один запрос API и проверьте, устранена ли проблема.

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

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

Если процесс Apigee Adaptor 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 для 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 с помощью telnet», это указывает на проблему с сетевым подключением между 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. Запустите сеанс трассировки в прокси remote-service с помощью пользовательского интерфейса Apigee Edge. Воспроизведите эту проблему и поделитесь XML-файлом сеанса трассировки.

    Ссылка: Использование инструмента «Трассировка» | Апигей Край

  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