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 indicado 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 este nome de domínio do 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 uma lista dos 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, essa pode ser a razão deste problema. Siga as instruções apresentadas 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 da 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 VPC peering ativada, crie uma zona de peering DNS com a zona DNS privada 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 com peering