Le richieste API non riescono con errore TARGET_CONNECT_HOST_NOT_REACHABLE

Stai visualizzando la documentazione relativa a Apigee e Apigee ibrido.
Non esiste una documentazione Apigee Edge equivalente per questo argomento.

Sintomi

Le richieste API non riescono con TARGET_CONNECT_HOST_NOT_REACHABLE errore.

Messaggi di errore

Se si verifica questo problema, le richieste API non andranno a buon fine e verranno visualizzati il codice di stato della risposta HTTP 503 e il seguente errore:

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

Possibili cause

Sono state identificate le seguenti potenziali cause per il sintomo indicato in precedenza:

Causa Descrizione Piattaforma
L'host del server di destinazione specificato non è corretto o contiene caratteri non validi Questo problema può verificarsi nel caso in cui l'host del server di destinazione designato specificato nel proxy API non sia corretto o contenga caratteri non validi. Apigee, Apigee ibrido
Il peering DNS non è configurato Questo problema potrebbe verificarsi quando Apigee non è in grado di risolvere il nome di dominio se il peering DNS non è configurato nei deployment Apigee. Apigee

Causa: l'host del server di destinazione specificato non è corretto o contiene caratteri non validi

Diagnosi

  1. Invia una richiesta API al proxy API pertinente:

    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 controlla il messaggio di risposta:

    {"fault":{"faultstring":
    "Unable to resolve host invalid-target-host","detail":
    {"errorcode":"protocol.http.NoResolvedHost","reason":
    "TARGET_CONNECT_HOST_NOT_REACHABLE"}}}
  2. Se la risposta contiene il motivo dell'errore TARGET_CONNECT_HOST_NOT_REACHABLE, è correlato a questo motivo.

Risoluzione

  1. Controlla la definizione del proxy API e trova il nome host di destinazione definito:
  2. Se il nome host di destinazione specificato non è valido o contiene caratteri non validi, correggilo di conseguenza, crea una nuova revisione del proxy ed esegui il deployment del proxy.

Causa: il peering DNS non è configurato

Diagnosi

  1. Controlla se l'organizzazione Apigee è connessa in peering con una rete VPC richiamando la seguente API Apigee:
    TOKEN=$(gcloud auth print-access-token)
    curl -H "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/$ORG" | jq .authorizedNetwork

    Ad esempio:

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

    Risposta:

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

    Se l'organizzazione Apigee non è in peering con un VPC e utilizza Private Service Connect (PSC), questo scenario non si applica per questa organizzazione Apigee.

  2. Verifica con lo sviluppatore del proxy API dal lato clienti se questo nome di dominio del server di destinazione è configurato internamente. In caso contrario, questo scenario non è applicabile.
  3. Trova l'ID progetto e la rete in cui è ospitato l'endpoint di destinazione.
  4. Elenca i peering DNS creati nella rete indicata sopra eseguendo il comando peered-dns-domains list:
    gcloud services peered-dns-domains list --network=NETWORK --project=PROJECT-ID

    Il comando precedente potrebbe restituire un risultato vuoto se non sono disponibili domini DNS in peering o elencare domini DNS in peering simili ai seguenti:

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

    Se il comando precedente non riporta una voce di peering DNS per il suffisso DNS pertinente, il problema potrebbe essere dovuto a questo. Segui le istruzioni fornite nella sezione Risoluzione per risolverlo.

Risoluzione

  1. Prendi nota del suffisso DNS, dell'ID progetto e della rete in cui è ospitato l'endpoint di destinazione.
  2. Crea un dominio DNS in peering per il suffisso DNS utilizzando il comando gcloud peered-dns-domains create. Tieni presente che il suffisso DNS deve contenere un punto finale alla fine del suffisso DNS.
    gcloud services peered-dns-domains create NAME --network=NETWORK --dns-suffix=DNS-SUFFIX. --project=PROJECT-ID

    Ad esempio:

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

    Risposta:

    Operation "operations/cpdd.p25-1064980322781-fafa5fe4-b5fe-487e-830d-fff0f9a6200d" finished successfully.
  3. Ora, invia una richiesta API all'endpoint del proxy API e verifica se il proxy API è riuscito a risolvere il nome di dominio del server di destinazione e a comunicare con il server di destinazione:
    gcloud services peered-dns-domains create orders-service --network="shared-vpc1" --dns-suffix="orders.service.internal." --project=service-project

    Risposta:

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

Raccogliere dati diagnostici

Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni diagnostiche e contatta l'assistenza clienti Google Cloud.

  1. ID progetto Google Cloud
  2. Organizzazione Apigee
  3. Revisione e proxy API
  4. Rete in cui è stato creato il dominio privato
  5. Suffisso DNS del dominio privato
  6. L'output completo del comando di creazione del dominio DNS in peering