Le richieste API non vanno a buon fine con l'errore TARGET_CONNECT_HOST_NOT_REACHABLE

Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Non esiste documentazione equivalente di Apigee Edge per questo argomento.

Sintomi

Le richieste API non riescono con l'errore TARGET_CONNECT_HOST_NOT_REACHABLE.

Messaggi di errore

Se si verifica questo problema, le richieste API non andranno a buon fine con il codice di stato di 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

Per il sintomo sopra indicato sono state identificate le seguenti potenziali cause:

Causa Descrizione Piattaforma
L'host del server di destinazione specificato è scorretto o contiene caratteri non validi Questo problema potrebbe verificarsi nel caso in cui l'host del server di destinazione designato specificato nel proxy API sia errato o contenga caratteri non validi. Apigee, Apigee hybrid
Il peering DNS non è configurato Questo problema può verificarsi quando Apigee non è in grado di risolvere il nome di dominio se il peering DNS non è configurato nei deployment di 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, significa che è correlato a questo motivo.

Risoluzione

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

Causa: il peering DNS non è configurato

Diagnosi

  1. Verifica se l'organizzazione Apigee è in peering con una rete VPC invocando 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, per determinare se il peering VPC è abilitato, controlla se l'attributo risposta authorizedNetwork è presente e impostato su un valore. In caso contrario, il peering VPC non è abilitato:

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

    Questa risposta di esempio indica che il peering VPC è abilitato:

    "projects/example-org/global/networks/shared-vpc1"
  2. Verifica con lo sviluppatore del proxy API lato cliente 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 sopra indicata. Segui la procedura riportata di seguito a seconda che l'organizzazione Apigee sia in peering con una rete VPC o meno.

    Peering VPC abilitato

    Se il peering VPC è abilitato per la tua organizzazione, utilizza il comando peered-dns-domains list:

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

    Il risultato può essere vuoto se non sono disponibili domini DNS connessi in peer o elencare i domini DNS connessi in peer. Ad esempio:

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

    Il peering VPC non è abilitato

    Se il peering VPC non è abilitato nella tua organizzazione, utilizza la seguente 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"

    Dove: ORGANIZATION è il nome della tua organizzazione Apigee.

    Risposta di esempio, in cui il nome dell'organizzazione è 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 la risposta non include una voce di peering DNS per il suffisso DNS pertinente, questo potrebbe essere il motivo del problema. Segui le istruzioni riportate nella sezione Risoluzione per risolvere il problema.

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 accoppiato per il suffisso DNS.

    Peering VPC abilitato

    Se nella tua organizzazione è attivato il peering VPC, utilizza il comando peered-dns-domains create gcloud. Tieni presente che il suffisso DNS deve contenere un punto finale:

    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.

    Il peering VPC non è abilitato

    Se il peering VPC non è abilitato per la tua organizzazione, crea una zona di peering DNS con la zona DNS privata nel progetto:

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

    Dove:

    • ORGANIZATION è il nome della tua organizzazione Apigee.
    • DNS_ZONE_ID è il nome della zona DNS che vuoi creare.
    • DOMAIN è il nome DNS di questa zona gestita, ad esempio example.com.
    • DESCRIPTION è una breve descrizione della zona DNS. Caratteri massimi: 1024
    • PRODUCER_PROJECT_ID è il progetto che contiene la rete VPC del producer.
    • PRODUCER_VPC_NETWORK è la rete VPC nel progetto del cliente.
  3. Ora invia una richiesta API all'endpoint del proxy API e verifica se il proxy API è in grado di risolvere il nome di dominio del server di destinazione e di comunicare con il server di destinazione.

Deve raccogliere informazioni di diagnostica

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

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