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, para determinar si el intercambio de tráfico de VPC está habilitado, verifica si el atributo de respuesta authorizedNetwork está presente y se estableció en un valor. Si no es así, el intercambio de tráfico entre VPC no está habilitado:

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

    En esta respuesta de ejemplo, se indica que el intercambio de tráfico de VPC está habilitado:

    "projects/example-org/global/networks/shared-vpc1"
  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 DNS creados en la red anterior. Sigue los pasos que se indican a continuación según si la organización de Apigee intercambia tráfico con una red de VPC o no.

    Intercambio de tráfico entre VPC habilitado

    Si tu organización tiene habilitado el intercambio de tráfico de VPC, usa el comando peered-dns-domains list:

    gcloud services peered-dns-domains list --network=NETWORK --project=PROJECT-ID

    El resultado podría estar 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. Por ejemplo:

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

    El intercambio de tráfico entre VPC no está habilitado

    Si tu organización no tiene habilitado el intercambio de tráfico de VPC, usa la siguiente API de Apigee:

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type:application/json" \
      "https://apigee.googleapis.com/v1/organizations/ORGANIZATION/dnsZones"

    En el ejemplo anterior, ORGANIZATION es el nombre de tu organización de Apigee.

    Ejemplo de respuesta, en el que el nombre de la organización es dns-peering-int-4:

    {
      "dnsZones": [
        {
          "name": "organizations/dns-peering-int-4/dnsZones/demo",
          "description": "latest",
          "domain": "demo.com",
          "peeringConfig": {
            "targetProjectId": "dns-peering-int-4",
            "targetNetworkId": "default"
          },
          "state": "ACTIVE"
        },
        {
          "name": "organizations/dns-peering-int-4/dnsZones/dns-peering-int-4",
          "description": "latest",
          "domain": "dns-peering-int-4.com",
          "peeringConfig": {
            "targetProjectId": "dns-peering-int-4",
            "targetNetworkId": "default"
          },
          "state": "ACTIVE"
        }
      ]
    }

    Si la respuesta no incluye 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 que se indican 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.

    Intercambio de tráfico entre VPC habilitado

    Si tu organización tiene habilitado el intercambio de tráfico de VPC, usa el comando peered-dns-domains create de gcloud. 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.

    El intercambio de tráfico entre VPC no está habilitado

    Si tu organización no tiene habilitado el intercambio de tráfico de VPC, crea una zona de intercambio de tráfico de DNS con la zona de DNS privada de tu proyecto:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type:application/json" \
          "https://apigee.googleapis.com/v1/organizations/ORGANIZATION/dnsZones?dnsZoneId=DNS_ZONE_ID" \
          -d '{
            "domain": "DOMAIN",
            "description": "DESCRIPTION",
            "peeringConfig": {
               "targetProjectId": "PRODUCER_PROJECT_ID",
               "targetNetworkId": "PRODUCER_VPC_NETWORK"
            }
        }'

    Aquí:

    • ORGANIZATION es el nombre de tu organización de Apigee.
    • DNS_ZONE_ID es el nombre de la zona de DNS que deseas crear.
    • DOMAIN es el nombre de DNS de esta zona administrada, por ejemplo, example.com.
    • DESCRIPTION es una descripción breve de la zona de DNS. Máximo de caracteres: 1,024
    • PRODUCER_PROJECT_ID es el proyecto que contiene la red de VPC del productor.
    • PRODUCER_VPC_NETWORK es la red de VPC en el proyecto del cliente.
  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.

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 deGoogle 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