El proxy de Envoy falla con el error HTTP 403 Prohibido en el adaptador de Apigee para Envoy

Estás viendo la documentación de Apigee Edge.
Ve a la Documentación de Apigee X.
información

Síntoma

El proxy de Envoy falla con el error HTTP 403 Forbidden cuando se invoca a través de Adaptador de Apigee para Envoy.

Mensaje de error

Se muestra el siguiente mensaje de error:

HTTP/1.1 403 Forbidden
content-length: 19
content-type: text/plain
date: Tue, 03 Nov 2020 00:20:10 GMT
server: istio-envoy

Causas posibles

El proxy de Envoy generará un error HTTP 403 si se cumple una de las siguientes condiciones ocurre lo siguiente:

Causa Descripción Instrucciones de solución de problemas aplicables para
El producto de API no está habilitado El producto de API no está habilitado para el entorno específico. Usuarios perimetrales de nubes públicas y privadas
Falta la ruta de acceso del URI del servicio de destino en el producto de API Falta la ruta de URI del servicio de destino o no se agregó al producto de la API en la API. de Google Cloud. Usuarios perimetrales de nubes públicas y privadas
Falta el nombre de host en el producto de API El nombre de host proporcionado en la solicitud a la API del cliente falta en el producto de API en Apigee objetivos de servicio remoto. Usuarios perimetrales de nubes públicas y privadas
Falta la clave de API en el encabezado de la solicitud La clave de API no se pasa en el encabezado HTTP x-api-key. Usuarios perimetrales de nubes públicas y privadas
Clave de API no válida La clave de API que se pasó como parte de la solicitud no es válida. Usuarios perimetrales de nubes públicas y privadas
El adaptador de Apigee para Envoy no puede comunicarse con el proxy de API de servicio remoto Apigee Adapter para Envoy no puede comunicarse con el proxy de API de servicio remoto. Usuarios perimetrales de nubes públicas y privadas
El proxy Envoy no se puede comunicar con Apigee Adapter para Envoy El proxy Envoy no puede comunicarse con Apigee Adapter para Envoy. Usuarios perimetrales de nubes públicas y privadas

Antes de comenzar

  1. Verifica que estés recibiendo el mensaje de respuesta 403 Forbidden de la Proxy de Envoy Por ejemplo:
    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. Habilita los registros de depuración:

    Asegúrate de haber habilitado los registros de depuración en Apigee Adapter for Envoy para capturar más detalles sobre el error. De lo contrario, detén Apigee Adapter for Envoy y vuelve a iniciarlo, habilitando los registros de depuración. con el siguiente comando:

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

Causa: El producto de API no está habilitado

Este error se producirá si el producto de API específico que usa el proxy de Envoy no está habilitado en el entorno específico en el que se invocan las llamadas a la API.

Diagnóstico

Sigue estos pasos para diagnosticar el problema:

  1. Habilita los registros de depuración como se explica en el paso 2 más arriba.
  2. Revisa el adaptador de Apigee para registros de Envoy y verifica que se muestre el siguiente mensaje en la sección Authorizing request:
    product: API_PRODUCT_NAME not found
    

    Ejemplo de resultado del registro de depuración:

    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
    

    En el ejemplo anterior, se muestra que no se encontró el producto de API ENVOY-PRODUCT-1 en Apigee Adapter para Envoy.

    Si deseas obtener más información sobre Apigee Adapter para Envoy Logging, consulta Registro.

  3. Si ves este mensaje mientras autorizas la solicitud a la API, lo más probable es que indique que el producto de API específico no está habilitado para un entorno específico en el que realizar las llamadas a la API.
  4. Realiza los siguientes pasos para verificarlo:
    1. Accede a la IU de Edge.
    2. En la pestaña Publicar > productos de API, haz clic en el producto de API específico que que se usa en la configuración de Apigee Adapter for Envoy.
    3. Verifica que el entorno específico en el que realizas las solicitudes a la API esté habilitado en el producto de API.
    4. Si el entorno específico no está habilitado en el producto de API, entonces esa es la causa. para este problema.
  5. Si el entorno específico ya está habilitado, ve a Causa: Falta la ruta de acceso del URI del servicio de destino en el producto de API.

Solución

Si el entorno específico no está habilitado en el producto de API, sigue estos pasos para resolver el problema:

  1. Accede a la IU de Edge.
  2. En la pestaña Publicar > en la página Productos de la API, haz clic en el producto de API específico que usaste. para configurar Apigee Adapter for Envoy.
  3. En la página Productos de API > Nombre del producto, haz clic en Editar.
  4. Para habilitar el entorno específico en el que deseas realizar solicitudes a la API, selecciona en la casilla de verificación del entorno correspondiente.
  5. Haz clic en Guardar.

Causa: Falta la ruta de acceso del URI del servicio de destino en el producto de API

Este error se producirá si la ruta de URI del destino no se especifica en el producto de API específico utilizado. por el proxy de Envoy.

Diagnóstico

Sigue estos pasos para diagnosticar el problema:

  1. Habilita los registros de depuración como se explica en el paso 2 más arriba.
  2. Revisa el adaptador de Apigee para registros de Envoy y verifica que el siguiente mensaje esté que se muestra para el producto de API específico asociado con un destino específico en la sección Authorizing request:

    no path: REQUEST_URI_PATH
    

    Ejemplo de resultado del registro de depuración:

    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)

    El resultado de muestra incluye el siguiente mensaje:

    no path: /echo1
    

    Esto indica que no se encontró la ruta /echo1 en el producto de API ENVOY-PRODUCT-1

  3. Si ves el mensaje no path: REQUEST_URI_PATH en Esa es la causa del problema porque el adaptador de Apigee para registros de depuración de Envoy es. De lo contrario, ve a Causa: Falta el nombre de host en el producto de API.

Solución

Si el URI de solicitud específico no se agrega al producto de API para el destino específico, entonces Sigue estos pasos para resolver el problema:

  1. Accede a la IU de Edge.
  2. En la pestaña Publicar > productos de API, haz clic en el producto de API específico que que se usa en la configuración de Apigee Adapter for Envoy.
  3. En la página Productos de API > Nombre del producto, haz clic en Editar.
  4. En el panel Recursos de la API, agrega el URI de solicitud a la API al producto de API.
  5. Supervisa el adaptador de Apigee para registros de Envoy y espera hasta que el adaptador de Apigee para Envoy recupera el producto de API actualizado. Luego, envía otra solicitud a la API para verificar la corrección.

Causa: Falta el nombre de host en el producto de API

Este error se producirá si la combinación de nombre de host y puerto de destino no se agrega al dominio Producto de API que usa el proxy de Envoy.

Diagnóstico

Sigue estos pasos para diagnosticar el problema:

  1. Habilita los registros de depuración como se explica en el paso 2 más arriba.
  2. Revisa el adaptador de Apigee para registros de Envoy y verifica que el siguiente mensaje esté que se muestra para el producto de API específico asociado con un destino específico en la sección Authorizing request:

    no targets: HOSTNAME:PORT
    

    Ejemplo de resultado del registro de depuración:

    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)

    En el ejemplo anterior, se muestra que la combinación de nombre de host y puerto httpbin1:8080 No se encontró en el producto de API ENVOY-PRODUCT-1.

  3. Si los registros de Apigee Adapter para Envoy contienen una entrada con el mensaje no targets: HOSTNAME:PORT mientras se autoriza la solicitud, entonces esta es la causa del problema. De lo contrario, ve a Causa: Falta la clave de API en el encabezado de la solicitud.

Solución

Si la combinación de nombre de host y puerto de destino no se agrega al producto de API, realiza la sigue estos pasos para resolver el problema:

  1. Accede a la IU de Edge.
  2. En la pestaña Publicar > productos de API, haz clic en el producto de API específico que que se usa en la configuración de Apigee Adapter for Envoy.
  3. En la página Productos de API > Nombre del producto, haz clic en Editar.
  4. En el panel Destinos del servicio remoto de Apigee, agrega el nombre de host de destino y puerto y haz clic en Guardar.

    Si no ve la sección Destinos del servicio remoto de Apigee en la IU, agregar un atributo personalizado al producto de API con el asigna el nombre apigee-remote-service-targets y agrega Valor HOSTNAME:PORT con la API de Edge. Por ejemplo:

    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. Una vez completada la tarea anterior, supervisa el adaptador de Apigee para registros de Envoy y espera hasta que Apigee Adapter for Envoy recupera el producto de API actualizado. Luego, envía otra API para verificar la corrección.

Causa: Falta la clave de API en el encabezado de la solicitud

Este error se producirá si no se pasa la clave de API como parte de los encabezados de la solicitud.

Diagnóstico

Sigue estos pasos para diagnosticar el problema:

  1. Habilita los registros de depuración como se explica en el paso 2 más arriba.
  2. Consulta Apigee Adapter for Envoy registros y verifica que veas el [missing authentication] mensaje en Authenticate error sección.

    Ejemplo de resultado del registro de depuración:

    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

    El resultado de muestra anterior tiene el mensaje [missing authentication]. Este mensaje indica que la clave de API no se pasa como parte del encabezado de la solicitud.

  3. Si los registros de Apigee Adapter for Envoy contienen una entrada de registro con el mensaje [missing authentication] en la sección Authenticate error , entonces esto es la causa del problema. De lo contrario, ve a Causa: Clave de API no válida.

Solución

Si el error [missing authentication] apareciera en el Apigee Adapter for Envoy logs, sigue estos pasos para resolver el problema:

  1. Comprueba si el cliente envió la clave de API con el encabezado HTTP x-api-key en la solicitud a la API. De lo contrario, solicita al cliente que envíe la clave de API en el encabezado HTTP. x-api-key
  2. Revisa el archivo de configuración de Apigee Adapter for Envoy y verifica que la clave de API predeterminada Se cambió el nombre del encabezado x-api-key, por ejemplo:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        global:
          tls:
            ...
        tenant:
          ...
        auth:
          target_header: api-key
    

    En el ejemplo anterior, el nombre del encabezado de la clave de API predeterminado se modificó a api-key En este caso, debes pasar la clave de API como parte del encabezado api-key

  3. Si se cambió el nombre del encabezado de la clave de API predeterminado, solicita al cliente que use el elemento el nombre del encabezado de la clave de API, enviar otra solicitud a la API y verificar si se soluciona el problema.

Causa: clave de API no válida

Este error ocurrirá si se pasa una clave de API no válida como parte del encabezado de la solicitud.

Diagnóstico

Sigue estos pasos para diagnosticar el problema:

  1. Habilita los registros de depuración como se explica en el paso 2 más arriba.
  2. Revisa el adaptador de Apigee para registros de Envoy y verifica que ves el mensaje [permission denied] en la sección Authenticate error. Esto suele mostrarse después de que el adaptador recupera la clave de API, lo que se indica con el mensaje fetchToken fetching: API_KEY.

    Ejemplo de resultado del registro de depuración:

    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)
    

    En este ejemplo, la clave de API enviada en la solicitud a la API no era válida.

  3. Si los registros de Apigee Adapter para Envoy contienen una entrada de registro con el [permission denied] en la sección Authenticate error , entonces indica que la clave de API pasada como parte de la solicitud no es válida y es la causa del problema. De lo contrario, ve a Causa: Adaptador de Apigee para Envoy no puede comunicarse con el proxy de API de servicio remoto.

Solución

Si se observa el mensaje [permission denied] en la sección Authenticate error en los registros de Apigee Adapter for Envoy, sigue estos pasos: para resolver el problema:

  1. Compara la clave de API enviada en la solicitud a la API con el valor de la clave de API que se encuentra en la aplicación conectada al producto de API.
  2. Si la clave de API que usa el cliente no es válida, solicítale que la envíe.
  3. Si la clave de API que usó el cliente es válida y todavía ves una solicitud 403 error. Comunícate con el equipo de asistencia de Apigee Edge para investigar este problema más a fondo.

Causa: Apigee Adapter for Envoy no puede comunicarse con el proxy de API de servicio remoto

Este error se producirá si Apigee Adapter for Envoy no puede comunicarse con el dispositivo remoto. proxy de API de servicio si el host del servicio remoto configurado no es válido.

Diagnóstico

Sigue estos pasos para diagnosticar el problema:

  1. Habilita los registros de depuración como se explica en el paso 2 más arriba.
  2. Revisa el adaptador de Apigee para registros de Envoy y verifica que veas el siguiente mensaje:

    Error retrieving products: REQUEST_URI: no such host
    

    Ejemplo de resultado del registro de depuración:

    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
    

    En este ejemplo, Apigee Adapter for Envoy no pudo comunicarse con el proxy de API de servicio remoto porque el nombre de host proporcionado en el proxy de API del servidor remoto La URL no es válida, como lo indica el error no such host .

  3. Si los registros de Apigee Adapter para Envoy contienen una entrada de registro con el mensaje no such host, esta es la causa del problema. De lo contrario, ve a Causa: El proxy de Envoy no puede comunicarse con Apigee Adapter for Envoy.

Solución

Si se muestran los errores anteriores en los registros de Apigee Adapter for Envoy, realiza lo siguiente: pasos para resolver el problema:

  1. Consulta el archivo de configuración de Apigee Adapter for Envoy y verifica que el archivo La URL del proxy de API de servicio remoto es válida.

    De lo contrario, detén Apigee Adapter for Envoy, corrige la URL del proxy de la API de servicio remoto en la archivo de configuración de Terraform, iniciar Apigee Adapter for Envoy, enviar otra solicitud a la API y verificar la solución.

    Configuración de muestra:

    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. Verifica que el proxy de la API de remote-service esté implementado en el perímetro relevante en un entorno de nube. De lo contrario, implementa el proxy de la API de remote-service en el perímetro relevante. entorno y vuelve a intentarlo.
  3. Verificar la conectividad de red entre Apigee Adapter for Envoy y la Extremo del proxy de la API de remote-service. Si hay conectividad de red problemas detectados, comunícate con tu equipo de redes y trata de resolverlos.

Causa: El proxy de Envoy no puede comunicarse con Apigee Adapter for Envoy.

Diagnóstico

Sigue estos pasos para diagnosticar el problema:

  1. Asegúrate de haber habilitado los registros de depuración en Envoy. De lo contrario, detenga Envoy y vuelva a iniciarlo. habilitar los registros de depuración. Luego, envía otra solicitud a la API.

    Implementaciones independientes:

    envoy -c envoy-config.yaml -l debug
    

    Implementaciones basadas en 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. Revisa el adaptador de Apigee para registros de Envoy y verifica que haya una entrada de registro con el siguiente mensaje:
    connecting to APIGEE_ENVOY_ADAPTER_HOST:5000
    

    seguida de lo siguiente:

    upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
    

    Ejemplo de resultado del registro de depuración:

    [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'

    El ejemplo anterior muestra que Envoy no pudo comunicarse con Apigee Adapter para Envoy debido al motivo: connection failure.

  3. El connection failure puede deberse a varios motivos. Veamos cada una de las situaciones.

Situación 1: No se está ejecutando el proceso del adaptador

Si el proceso de Apigee Adapter for Envoy no se está ejecutando, se puede producir este error.

  1. Ejecuta el siguiente comando para verificar que el proceso de Apigee Adapter for Envoy esté en ejecución: kubectl. Si se está ejecutando el proceso de Apigee Adapter for Envoy, el resultado de lo siguiente: debería enumerarla.
    ps -ef | grep apigee-remote-service-envoy
    
  2. Si no se está ejecutando, esa es la causa del problema.

Solución

  1. Si el proceso de Apigee Adapter for Envoy no se está ejecutando, inicia el Apigee Adapter para Envoy.
  2. Realiza otra solicitud a la API y verifica si se solucionó el problema.

Situación 2: El proceso del adaptador no escucha en el puerto específico

Si el proceso de Apigee Adapter for Envoy no escucha en el puerto específico, se puede producir este error.

Si se está ejecutando el proceso Apigee Adapter for Envoy, verifica que haya un socket que escucha en puerto 5000: APIGEE_ENVOY_ADAPTER_HOST:5000. Puedes ejecutar netstat para verificar esto:

sudo netstat -lnp | grep 5000

Resultado de muestra:

sudo netstat -lnp | grep 5000

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

Si el socket no está escuchando en el puerto 5000, esa podría ser la causa de este problema.

Solución

  1. Detén Apigee Adapter para Envoy y vuelve a iniciarlo.
  2. Realiza otra solicitud a la API y verifica si se solucionó el problema.

Situación 3: Conectividad de red entre Envoy y Apigee Adapter para Envoy

  1. Verifica la conectividad de red entre Envoy y Apigee Adapter para Envoy:
    ssh $ENVOY_HOST
    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000

    Si Telnet pudiera establecer una conexión TCP a Apigee Adapter for Envoy se mostrará un resultado similar al siguiente:

    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
    
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    
  2. Si observas el error Connection timed out con telnet, entonces eso indica Hay un problema de conectividad de red entre Envoy y Apigee Adapter for Envoy.

Solución

Si tienes problemas de conectividad de red entre Envoy y Apigee Adapter for Envoy, interactuar con el equipo de redes e intentar resolver el problema.

Si el problema persiste, ve a Se debe recopilar información de diagnóstico.

Se debe recopilar información de diagnóstico

Si el problema persiste después de seguir las instrucciones anteriores, realiza el siguiente diagnóstico y, luego, comunícate con el equipo de asistencia de Apigee Edge:

  1. Producto de Apigee utilizado:

    Ejemplo: Apigee Edge Cloud, Apigee OPDK, Apigee híbrido, Apigee X

  2. Organización y entorno de Apigee
  3. Lectura de definición del producto de API con la API de Edge:

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

    Referencia: APIs de Apigee Edge

  4. Inicia una sesión de registro en el proxy de API remote-service con el comando IU de Apigee Edge Reproduce este problema y comparte el archivo XML de la sesión de Trace.

    Referencia: Usa la herramienta Trace | Apigee Edge

  5. Apigee Adapter for Envoy registros (registros completos relacionados con el período determinado)

    Implementaciones independientes:

    # by default Apigee Envoy write logs to stdout and stderr, check your deployment configuration and collect logs accordingly
    

    Implementaciones basadas en Kubernetes/Istio:

    kubectl -n=apigee get pods
    kubectl -n=apigee logs APIGEE_REMOTE_SERVICE_ENVOY_POD_NAME > apigee-remote-service-envoy.log
  6. Una solicitud a la API enviada al proxy de Envoy con un comando curl (el resultado completo del comando curl):
    curl -v ENVOY_PROXY_ENDPOINT
  7. Una solicitud a la API enviada al servicio de destino con un comando curl (la resultado del comando curl):
    curl -v TARGET_SERVICE_ENDPOINT