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

Esta é a documentação da Apigee e da Apigee híbrida.
Não há documentação equivalente do Apigee Edge para esse tópico.

Sintomas

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

Mensagens de erro

Se esse problema ocorrer, as solicitações da API vão falhar com HTTP 503. código de status da resposta 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

As possíveis causas a seguir foram identificadas para os casos acima sintoma:

Causa Descrição Plataforma
O host do servidor de destino especificado é está incorreta ou tem caracteres inválidos Esse problema pode ocorrer caso o servidor de destino designado especificado no proxy de API está incorreto ou contém caracteres inválidos. Apigee, Apigee híbrida
O peering de DNS não está configurado Esse problema pode ocorrer quando a Apigee não consegue resolver o domínio nome, se o peering de DNS não estiver configurado nas implantações da Apigee. Apigee

Causa: o host do servidor de destino especificado está incorreto ou tem caracteres inválidos

Diagnóstico

  1. Envie uma solicitação 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, que está relacionado às por isso.

Resolução

  1. Verifique a definição do proxy de API e encontre o nome do host de destino definido:
  2. Se o nome do host de destino for inválido ou tiver caracteres inválidos, fazer as correções necessárias, criar uma nova revisão do proxy e implantar proxy.

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

Diagnóstico

  1. Verificar se a organização da Apigee está fazendo peering com uma rede VPC invocando a seguinte API da 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 da VPC está ativado, verifique se o atributo de resposta authorizedNetwork está presente e definido como um valor. Se não estiver, 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 com o desenvolvedor do proxy de API do lado do cliente se o nome de domínio do servidor de destino é configurado internamente. Caso contrário, nesse cenário não se aplica.
  3. Encontre o ID do projeto e a rede em que o endpoint de destino está hospedados.
  4. Liste os peerings de DNS criados na rede acima. Siga as etapas abaixo com base no fato de a organização da Apigee estar ou não em peering com uma rede VPC.

    Peering de VPC ativado

    Se o peering de VPC estiver ativado na sua organização, 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 houver domínios DNS em peering disponíveis ou listar os domínios DNS em peering. Exemplo:

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

    O peering de VPC não está ativado

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

    Em que ORGANIZATION é o nome da sua organização da 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 poderia ser o motivo do problema. Siga as instruções fornecidas em Solução para resolver o problema.

Resolução

  1. Anote o sufixo DNS, o ID do projeto e a rede em que o e o endpoint de destino está hospedado.
  2. Crie um domínio DNS com peering para o sufixo DNS.

    Peering de VPC ativado

    Se o peering de VPC estiver ativado na sua organização, use o comando peered-dns-domains create do gcloud. Observe que o sufixo DNS precisa ter um ponto final no final:

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

    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 peering de VPC não está ativado

    Se a sua organização não tiver o peering de VPC ativado, crie uma zona de peering de DNS com a zona de DNS particular 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"
            }
        }'

    Em que:

    • ORGANIZATION é o nome da organização da Apigee;
    • DNS_ZONE_ID é o nome da zona DNS que você quer criar.
    • DOMAIN é o nome DNS dessa zona gerenciada, por exemplo, example.com.
    • DESCRIPTION é uma breve descrição da zona de DNS. Máximo de caracteres: 1.024
    • 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 uma solicitação de API para o endpoint do proxy de API e verifique se o proxy de API pode resolver o nome de domínio do servidor de destino e se comunicar com o servidor de destino.

É necessário coletar 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 entre em contato com o Suporte do Google Cloud:

  1. ID do projetoGoogle Cloud
  2. Organização da Apigee
  3. Proxy e revisão de API
  4. Rede em que o domínio particular é criado
  5. Sufixo DNS do domínio particular
  6. A saída completa do comando de criação de domínio DNS com peering