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

Wenn dieses Problem auftritt, schlagen die API-Anfragen mit dem Antwortstatuscode HTTP 503 und dem folgenden Fehler fehl:

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

Mögliche Ursachen

Die folgenden potenziellen Ursachen wurden für das oben genannte Symptom 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 Host des Zielservers falsch ist oder ungültige Zeichen enthält. Apigee, Apigee Hybrid
DNS-Peering ist nicht konfiguriert Dieses Problem kann auftreten, wenn Apigee den Domainnamen nicht auflösen kann, weil in Apigee-Bereitstellungen kein DNS-Peering 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üfen Sie 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 das mit diesem Grund zusammen.

Lösung

  1. Prüfen Sie die API-Proxy-Definition und suchen Sie nach dem definierten Zielhostnamen:
  2. Wenn der angegebene Zielhostname ungültig ist oder ungültige Zeichen enthält, korrigieren Sie ihn entsprechend, erstellen Sie eine neue Revision des Proxys und stellen Sie den Proxy bereit.

Ursache: DNS-Peering ist nicht konfiguriert

Diagnose

  1. Prüfen Sie, ob die Apigee-Organisation mit einem VPC-Netzwerk verbunden 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 VPC-Peering aktiviert ist, prüfen Sie, ob das Antwortattribut authorizedNetwork vorhanden und auf einen Wert festgelegt ist. Wenn nicht, ist 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

    Diese Beispielantwort gibt an, dass VPC-Peering aktiviert ist:

    "projects/example-org/global/networks/shared-vpc1"
  2. Fragen Sie den API-Proxy-Entwickler auf Kundenseite, ob dieser Domainname des Zielservers intern konfiguriert ist. Andernfalls trifft dieses Szenario nicht zu.
  3. Suchen Sie die Projekt-ID und das Netzwerk, in dem der Zielendpunkt gehostet wird.
  4. Listen Sie die im oben genannten Netzwerk erstellten DNS-Peerings auf. Führen Sie die folgenden Schritte aus, je nachdem, ob die Apigee-Organisation mit einem VPC-Netzwerk per Peering verbunden 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 per Peering verbundenen DNS-Domains verfügbar sind, oder die per Peering verbundenen DNS-Domains auflisten. 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, in der der Name der Organisation dns-peering-int-4 ist:

    {
      "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 gcloud-Befehl peered-dns-domains create. Beachten Sie, dass das DNS-Suffix mit einem Punkt enden sollte:

    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 von 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 der per Peering verbundenen DNS-Domain