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

    Exemplo:

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

    Resposta:

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

    Se a organização da Apigee não fizer peering com uma VPC e usar Private Service Connect (PSC), este cenário não se aplica a esta organização da Apigee.

  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 executando o comando peered-dns-domains list:
    gcloud services peered-dns-domains list --network=NETWORK --project=PROJECT-ID

    O comando acima pode retornar um resultado em branco se não houver peering Há domínios DNS disponíveis ou você pode listar domínios DNS em peering da seguinte maneira:

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

    Se o comando acima não listar uma entrada de peering de DNS para o item de linha esse poderia ser o motivo do problema. Seguir as instruções fornecidas em Resolução para resolver ele.

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 usando o peered-dns-domains create do gcloud. Observe que o 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.
  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:
    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

É 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 projeto do Google 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