Las solicitudes a la API fallan y muestran el error TARGET_CONNECT_HOST_NOT_REACHABLE.

Estás viendo la documentación de Apigee y Apigee hybrid.
No hay documentación de Apigee Edge equivalente para este tema.

Síntomas

Las solicitudes a la API fallan con el error TARGET_CONNECT_HOST_NOT_REACHABLE.

Mensajes de error

Si ocurre este problema, las solicitudes a la API fallarán con el código de estado de respuesta HTTP 503 y el siguiente error:

{"fault":{"faultstring":
"Unable to resolve host invalid-target-host","detail":
{"errorcode":"protocol.http.NoResolvedHost","reason":
"TARGET_CONNECT_HOST_NOT_REACHABLE"}}}

Causas posibles

Se identificaron las siguientes causas potenciales para el síntoma mencionado anteriormente:

Causa Descripción Plataforma
El host del servidor de destino que se especificó es incorrecto o tiene caracteres no válidos Este problema puede ocurrir si el host del servidor de destino designado que se especificó en el proxy de API es incorrecto o contiene caracteres no válidos. Apigee, Apigee hybrid
El intercambio de tráfico de DNS no está configurado Este problema puede ocurrir cuando Apigee no puede resolver el nombre de dominio si el intercambio de tráfico de DNS no se configura en las implementaciones de Apigee. Apigee

Causa: El host del servidor de destino que se especificó es incorrecto o tiene caracteres no válidos

Diagnóstico

  1. Envía una solicitud a la API al proxy de API relevante:

    curl -ik https://dev.example.com/dns-peering-example
      HTTP/2 503
      content-type: application/json
      x-request-id: ***
      content-length: 169
      date: Thu, 02 Nov 2023 04:31:43 GMT
      via: 1.1 google
      alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000

    Luego, verifica el mensaje de respuesta:

    {"fault":{"faultstring":
    "Unable to resolve host invalid-target-host","detail":
    {"errorcode":"protocol.http.NoResolvedHost","reason":
    "TARGET_CONNECT_HOST_NOT_REACHABLE"}}}
  2. Si la respuesta contiene el motivo de error TARGET_CONNECT_HOST_NOT_REACHABLE, entonces eso está relacionado con este motivo.

Solución

  1. Revisa la definición del proxy de API y busca el nombre de host de destino definido:
  2. Si el nombre de host de destino proporcionado no es válido o tiene caracteres no válidos, corrígelo según corresponda, crea una nueva revisión del proxy y, luego, implementa el proxy.

Causa: El intercambio de tráfico de DNS no está configurado

Diagnóstico

  1. Revisa si la organización de Apigee intercambia tráfico con una red de VPC invocando la siguiente API de APigee:
    TOKEN=$(gcloud auth print-access-token)
    curl -H "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/$ORG" | jq .authorizedNetwork

    Por ejemplo:

    TOKEN=$(gcloud auth print-access-token)
    curl -H "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/example-org/" | jq .authorizedNetwork

    Respuesta:

    "projects/example-org/global/networks/shared-vpc1"

    Si la organización de Apigee no intercambia tráfico con una VPC y usa Private Service Connect (PSC), esta situación no se aplica para esta organización de Apigee.

  2. Verifica con el desarrollador del proxy de API del cliente si este nombre de dominio de servidor de destino está configurado internamente. Si no es así, no se aplica esta situación.
  3. Busca el ID de proyecto y la red en la que se aloja el extremo de destino.
  4. Enumera los intercambios de tráfico de la red anterior ejecutando el comando peered-dns-domains list:
    gcloud services peered-dns-domains list --network=NETWORK --project=PROJECT-ID

    El comando anterior podría mostrar un resultado en blanco si no hay dominios DNS con intercambio de tráfico disponibles o mostrar una lista de dominios DNS con intercambio de tráfico similar a lo siguiente:

    NAME                 DNS_SUFFIX
    customer-service     customer.service.internal.
    accounts-service     accounts.service.internal.

    Si el comando anterior no enumera una entrada de intercambio de tráfico de DNS para el sufijo DNS relevante, ese puede ser el motivo de este problema. Sigue las instrucciones proporcionadas en Solución para resolverlo.

Solución

  1. Toma nota del sufijo DNS, el ID del proyecto y la red en la que se aloja el extremo de destino.
  2. Crea un dominio DNS con intercambio de tráfico para el sufijo DNS usando el comando de gcloud peered-dns-domains create. Ten en cuenta que el sufijo DNS debe contener un punto final.
    gcloud services peered-dns-domains create NAME --network=NETWORK --dns-suffix=DNS-SUFFIX. --project=PROJECT-ID

    Por ejemplo:

    gcloud services peered-dns-domains create orders-service --network="shared-vpc1" --dns-suffix="orders.service.internal." --project=service-project

    Respuesta:

    Operation "operations/cpdd.p25-1064980322781-fafa5fe4-b5fe-487e-830d-fff0f9a6200d" finished successfully.
  3. Ahora, envía la solicitud a la API al extremo del proxy de API y verifica si el proxy de API puede resolver el nombre de dominio del servidor de destino y comunicarse con el servidor de destino:
    gcloud services peered-dns-domains create orders-service --network="shared-vpc1" --dns-suffix="orders.service.internal." --project=service-project

    Respuesta:

    Operation "operations/cpdd.p25-1064980322781-fafa5fe4-b5fe-487e-830d-fff0f9a6200d" finished successfully

Se debe recopilar información de diagnóstico

Si el problema persiste incluso después de seguir las instrucciones anteriores, recopila la siguiente información de diagnóstico y, luego, comunícate con Atención al cliente de Cloud:

  1. ID del proyecto de Google Cloud
  2. Organización de Apigee
  3. Proxy de API y revisión
  4. Red en la que se crea el dominio privado
  5. Sufijo DNS del dominio privado
  6. La salida completa del comando de creación del dominio DNS con intercambio de tráfico