API-Anfragen schlagen mit dem Fehler TARGET_CONNECT_HOST_NOT_REACHABLE fehl

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Für dieses Thema gibt es keine entsprechende Apigee Edge-Dokumentation.

Symptome

API-Anfragen schlagen mit dem Fehler TARGET_CONNECT_HOST_NOT_REACHABLE fehl.

Fehlermeldungen

In diesem Fall schlagen die API-Anfragen mit dem Antwortstatuscode HTTP 503 und der folgenden Fehlermeldung fehl:

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

Mögliche Ursachen

Für das oben genannte Symptom wurden die folgenden möglichen Ursachen ermittelt:

Ursache Beschreibung Plattform
Der angegebene Zielserverhost ist falsch oder enthält ungültige Zeichen. Dieses Problem kann auftreten, wenn der im API-Proxy angegebene Zielserverhost falsch ist oder ungültige Zeichen enthält. Apigee, Apigee Hybrid
DNS-Peering nicht konfiguriert Dieses Problem kann auftreten, wenn Apigee den Domainnamen nicht auflösen kann, wenn das DNS-Peering in Apigee-Bereitstellungen nicht konfiguriert ist. Apigee

Ursache: Der angegebene Zielserverhost ist falsch oder enthält ungültige Zeichen.

Diagnose

  1. Senden Sie eine API-Anfrage an den entsprechenden API-Proxy:

    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

    und prüfe die Antwortnachricht:

    {"fault":{"faultstring":
    "Unable to resolve host invalid-target-host","detail":
    {"errorcode":"protocol.http.NoResolvedHost","reason":
    "TARGET_CONNECT_HOST_NOT_REACHABLE"}}}
  2. Wenn die Antwort den Fehlergrund TARGET_CONNECT_HOST_NOT_REACHABLE enthält, hängt der Fehler damit zusammen.

Lösung

  1. Prüfen Sie die API-Proxy-Definition und suchen Sie nach dem definierten Zielhostnamen:
  2. Wenn der angegebene Ziel-Hostname ungültig ist oder ungültige Zeichen enthält, beheben Sie das Problem, erstellen Sie eine neue Version des Proxys und stellen Sie den Proxy bereit.

Ursache: DNS-Peering nicht konfiguriert

Diagnose

  1. Prüfen Sie, ob die Apigee-Organisation mit einem VPC-Netzwerk gepeert ist, indem Sie die folgende Apigee API aufrufen:
    TOKEN=$(gcloud auth print-access-token)
    curl -H "Authorization: Bearer $TOKEN" \
      "https://apigee.googleapis.com/v1/organizations/$ORG" | jq .authorizedNetwork

    Wenn Sie beispielsweise feststellen möchten, ob das VPC-Peering aktiviert ist, prüfen Sie, ob das Antwortattribut authorizedNetwork vorhanden ist und einen Wert hat. Ist das nicht der Fall, ist das VPC-Peering nicht aktiviert:

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

    In dieser Beispielantwort wird angegeben, dass das VPC-Peering aktiviert ist:

    "projects/example-org/global/networks/shared-vpc1"
  2. Erkundige dich beim API-Proxy-Entwickler auf Kundenseite, ob dieser Domainname des Zielservers intern konfiguriert ist. Andernfalls gilt dieses Szenario nicht für Sie.
  3. Ermitteln Sie die Projekt-ID und das Netzwerk, in dem der Zielendpunkt gehostet wird.
  4. Liste der DNS-Peerings, die im obigen Netzwerk erstellt wurden. Führen Sie die folgenden Schritte aus, je nachdem, ob die Apigee-Organisation mit einem VPC-Netzwerk gepeert ist oder nicht.

    VPC-Peering aktiviert

    Wenn in Ihrer Organisation VPC-Peering aktiviert ist, verwenden Sie den Befehl peered-dns-domains list:

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

    Das Ergebnis kann entweder leer sein, wenn keine Peer-DNS-Domains verfügbar sind, oder die Peer-DNS-Domains enthalten. Beispiel:

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

    VPC-Peering nicht aktiviert

    Wenn in Ihrer Organisation kein VPC-Peering aktiviert ist, verwenden Sie die folgende Apigee API:

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type:application/json" \
      "https://apigee.googleapis.com/v1/organizations/ORGANIZATION/dnsZones"

    Dabei ist ORGANIZATION der Name Ihrer Apigee-Organisation.

    Beispielantwort, bei der der Name der Organisation dns-peering-int-4 lautet:

    {
      "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"
        }
      ]
    }

    Wenn die Antwort keinen DNS-Peering-Eintrag für das entsprechende DNS-Suffix enthält, könnte das der Grund für das Problem sein. Folgen Sie der Anleitung unter Lösung, um das Problem zu beheben.

Lösung

  1. Notieren Sie sich das DNS-Suffix, die Projekt-ID und das Netzwerk, in dem der Zielendpunkt gehostet wird.
  2. Erstellen Sie eine Peering-DNS-Domain für das DNS-Suffix.

    VPC-Peering aktiviert

    Wenn in Ihrer Organisation VPC-Peering aktiviert ist, verwenden Sie den Befehl peered-dns-domains create gcloud. Das DNS-Suffix muss am Ende einen Punkt enthalten:

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

    Beispiel:

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

    Response:

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

    VPC-Peering nicht aktiviert

    Wenn in Ihrer Organisation kein VPC-Peering aktiviert ist, erstellen Sie eine DNS-Peering-Zone mit der privaten DNS-Zone in Ihrem Projekt:

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

    Wobei:

    • ORGANIZATION ist der Name Ihrer Apigee-Organisation.
    • DNS_ZONE_ID ist der Name der DNS-Zone, die Sie erstellen möchten.
    • DOMAIN ist der DNS-Name dieser verwalteten Zone, z. B. example.com.
    • DESCRIPTION ist eine kurze Beschreibung der DNS-Zone. Maximale Anzahl Zeichen: 1.024
    • PRODUCER_PROJECT_ID ist das Projekt, das das VPC-Netzwerk des Erstellers enthält.
    • PRODUCER_VPC_NETWORK ist das VPC-Netzwerk im Kundenprojekt.
  3. Senden Sie nun eine API-Anfrage an den API-Proxy-Endpunkt und prüfen Sie, ob der API-Proxy den Domainnamen des Zielservers auflösen und mit dem Zielserver kommunizieren kann.

Erfassen von Diagnoseinformationen erforderlich

Wenn das Problem auch nach Befolgen der obigen Anweisungen weiterhin besteht, sammeln Sie die folgenden Diagnoseinformationen und wenden Sie sich dann an den Google Cloud Customer Care:

  1. Google Cloud -Projekt-ID
  2. Apigee-Organisation
  3. API-Proxy und Version
  4. Netzwerk, in dem die private Domain erstellt wird
  5. DNS-Suffix der privaten Domain
  6. Die vollständige Ausgabe des Befehls zum Erstellen einer per Peering verbundenen DNS-Domain