As solicitações de API falham com o erro TARGET_CONNECT_HOST_NOT_REACHABLE

Está a ver a documentação do Apigee e do Apigee Hybrid.
Não existe um equivalente na documentação do Apigee Edge para este tópico.

Sintomas

Os pedidos de API falham com o erro TARGET_CONNECT_HOST_NOT_REACHABLE.

Mensagens de erro

Se este problema ocorrer, os pedidos da API falham com o código de estado da resposta HTTP 503 e o seguinte erro:

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

Causas possíveis

Foram identificadas as seguintes potenciais causas para o sintoma mencionado acima:

Causa Descrição Plataforma
O anfitrião do servidor de destino especificado está incorreto ou tem carateres inválidos Este problema pode ocorrer se o anfitrião do servidor de destino designado especificado no proxy da API estiver incorreto ou contiver carateres inválidos. Apigee, Apigee Hybrid
O intercâmbio de DNS não está configurado Este problema pode ocorrer quando o Apigee não consegue resolver o nome do domínio se o peering de DNS não estiver configurado nas implementações do Apigee. Apigee

Causa: o anfitrião do servidor de destino especificado está incorreto ou tem carateres inválidos

Diagnóstico

  1. Envie um pedido de API ao 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

    e verifique a mensagem de resposta:

    {"fault":{"faultstring":
    "Unable to resolve host invalid-target-host","detail":
    {"errorcode":"protocol.http.NoResolvedHost","reason":
    "TARGET_CONNECT_HOST_NOT_REACHABLE"}}}
  2. Se a resposta contiver o motivo do erro TARGET_CONNECT_HOST_NOT_REACHABLE, significa que está relacionado com este motivo.

Resolução

  1. Verifique a definição do proxy de API e encontre o nome do anfitrião de destino definido:
  2. Se o nome de anfitrião de destino fornecido for inválido ou tiver carateres inválidos, corrija-o em conformidade, crie uma nova revisão do proxy e implemente o proxy.

Causa: o peering de DNS não está configurado

Diagnóstico

  1. Verifique se a organização do Apigee está em peering com uma rede VPC invocando a seguinte API Apigee:
    TOKEN=$(gcloud auth print-access-token)
    curl -H "Authorization: Bearer $TOKEN" \
      "https://apigee.googleapis.com/v1/organizations/$ORG" | jq .authorizedNetwork

    Por exemplo, para determinar se o peering de VPC está ativado, verifique se o atributo de resposta authorizedNetwork está presente e definido para um valor. Se não for o caso, o peering de VPC não está ativado:

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

    Esta resposta de exemplo indica que o peering de VPC está ativado:

    "projects/example-org/global/networks/shared-vpc1"
  2. Verifique junto do programador do proxy de API do lado do cliente se o nome de domínio deste servidor de destino está configurado internamente. Caso contrário, este cenário não se aplica.
  3. Encontre o ID do projeto e a rede na qual o ponto final de destino está alojado.
  4. Liste as interligações de DNS criadas na rede acima. Siga os passos abaixo consoante a organização do Apigee esteja ou não em peering com uma rede VPC.

    Intercâmbio de VPC ativado

    Se a sua organização tiver a interligação de VPC ativada, use o comando peered-dns-domains list:

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

    O resultado pode estar em branco se não estiverem disponíveis domínios DNS com peering ou apresentar os domínios DNS com peering. Por exemplo:

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

    O intercâmbio de VPC não está ativado

    Se a sua organização não tiver a funcionalidade de interligação de VPC ativada, use a seguinte API 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"

    Onde: ORGANIZATION é o nome da sua organização do Apigee.

    Exemplo de resposta, em que o nome da organização é 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"
        }
      ]
    }

    Se a resposta não incluir uma entrada de peering de DNS para o sufixo de DNS relevante, esse pode ser o motivo deste problema. Siga as instruções indicadas em Resolução para resolver o problema.

Resolução

  1. Tome nota do sufixo DNS, do ID do projeto e da rede em que o ponto final de destino está alojado.
  2. Crie um domínio DNS com peering para o sufixo DNS.

    Intercâmbio de VPC ativado

    Se a sua organização tiver a interligação de VPC ativada, use o comando peered-dns-domains create gcloud. Tenha em atenção que o sufixo DNS deve conter um ponto final no final do sufixo DNS:

    gcloud services peered-dns-domains create NAME --network=NETWORK --dns-suffix=DNS-SUFFIX. --project=PROJECT-ID

    Por exemplo:

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

    Resposta:

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

    O intercâmbio de VPC não está ativado

    Se a sua organização não tiver a funcionalidade de peering de VPC ativada, crie uma zona de peering de DNS com a zona de DNS privado no seu projeto:

    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"
            }
        }'

    Onde:

    • ORGANIZATION é o nome da sua organização do Apigee.
    • DNS_ZONE_ID é o nome da zona DNS que quer criar.
    • DOMAIN é o nome DNS desta zona gerida, por exemplo, example.com.
    • DESCRIPTION é uma breve descrição da zona DNS. Máximo de carateres: 1024
    • PRODUCER_PROJECT_ID é o projeto que contém a rede VPC do produtor.
    • PRODUCER_VPC_NETWORK é a rede VPC no projeto do cliente.
  3. Agora, envie um pedido de API para o ponto final do proxy de API e verifique se o proxy de API conseguiu resolver o nome do domínio do servidor de destino e comunicar com o servidor de destino.

Tem de recolher informações de diagnóstico

Se o problema persistir mesmo depois de seguir as instruções acima, reúna as seguintes informações de diagnóstico e, em seguida, contacte o apoio ao cliente do Google Cloud.

  1. Google Cloud ID do projeto
  2. Organização do Apigee
  3. Proxy e revisão da API
  4. Rede na qual o domínio privado é criado
  5. Sufixo DNS do domínio privado
  6. O resultado completo do comando de criação do domínio DNS em peering