Les requêtes API échouent en renvoyant l'erreur TARGET_CONNECT_HOST_NOT_REACHABLE

Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Il n'existe pas de documentation Apigee Edge équivalente pour ce sujet.

Symptômes

Les requêtes API échouent en renvoyant l'erreur TARGET_CONNECT_HOST_NOT_REACHABLE.

Messages d'erreur

Si ce problème se produit, les requêtes API échouent en renvoyant le code d'état de réponse HTTP 503 et l'erreur suivante :

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

Causes possibles :

Les éléments suivants ont été identifiés comme des causes potentielles du symptôme susmentionné :

Cause Description Plate-forme
L'hôte du serveur cible spécifié est incorrect ou comporte des caractères non valides Ce problème peut se produire si l'hôte du serveur cible désigné, spécifié dans le proxy d'API, est incorrect ou contient des caractères non valides. Apigee, Apigee hybrid
L'appairage DNS n'est pas configuré Ce problème peut survenir lorsque Apigee ne parvient pas à résoudre le nom de domaine si l'appairage DNS n'est pas configuré dans les déploiements Apigee. Apigee

Cause : l'hôte du serveur cible spécifié est incorrect ou comporte des caractères non valides

Diagnostic

  1. Envoyez une requête API au proxy d'API approprié :

    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

    Et vérifiez le message de réponse :

    {"fault":{"faultstring":
    "Unable to resolve host invalid-target-host","detail":
    {"errorcode":"protocol.http.NoResolvedHost","reason":
    "TARGET_CONNECT_HOST_NOT_REACHABLE"}}}
  2. Si la réponse contient le motif d'erreur TARGET_CONNECT_HOST_NOT_REACHABLE, cela signifie que l'erreur est liée à ce motif.

Solution

  1. Vérifiez la définition du proxy d'API et recherchez le nom d'hôte cible défini :
  2. Si le nom d'hôte cible indiqué n'est pas valide ou contient des caractères non valides, corrigez-le, créez une nouvelle révision du proxy et déployez le proxy.

Cause : l'appairage DNS n'est pas configuré

Diagnostic

  1. Vérifiez si l'organisation Apigee est appairée à un réseau VPC en appelant l'API Apigee suivante :
    TOKEN=$(gcloud auth print-access-token)
    curl -H "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/$ORG" | jq .authorizedNetwork

    Exemple :

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

    Réponse :

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

    Si l'organisation Apigee n'est pas appairée à un VPC et si elle utilise Private Service Connect (PSC), ce scénario ne s'applique pas à cette organisation Apigee.

  2. Vérifiez auprès du développeur du proxy d'API côté client si ce nom de domaine du serveur cible est configuré en interne. Si ce n'est pas le cas, ce scénario ne s'applique pas.
  3. Recherchez l'ID de projet et le réseau sur lequel le point de terminaison cible est hébergé.
  4. Listez les appairages DNS créés dans le réseau ci-dessus en exécutant la commande peered-dns-domains list :
    gcloud services peered-dns-domains list --network=NETWORK --project=PROJECT-ID

    La commande ci-dessus peut renvoyer un résultat vide si aucun domaine DNS appairé n'est disponible, ou bien une liste des domaines DNS appairés, semblable à celle-ci :

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

    Si la commande ci-dessus ne liste pas d'entrée d'appairage DNS pour le suffixe DNS concerné, cela peut être la raison de ce problème. Suivez les instructions fournies dans la section Solution pour le résoudre.

Solution

  1. Notez le suffixe DNS, l'ID de projet et le réseau sur lequel le point de terminaison cible est hébergé.
  2. Créez un domaine DNS appairé pour le suffixe DNS, à l'aide de la commande gcloud peered-dns-domains create. Notez que le suffixe DNS doit se terminer par un point.
    gcloud services peered-dns-domains create NAME --network=NETWORK --dns-suffix=DNS-SUFFIX. --project=PROJECT-ID

    Exemple :

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

    Réponse :

    Operation "operations/cpdd.p25-1064980322781-fafa5fe4-b5fe-487e-830d-fff0f9a6200d" finished successfully.
  3. Envoyez maintenant une requête API au point de terminaison du proxy d'API, et vérifiez que le proxy d'API parvient à résoudre le nom de domaine du serveur cible et à communiquer avec le serveur cible :
    gcloud services peered-dns-domains create orders-service --network="shared-vpc1" --dns-suffix="orders.service.internal." --project=service-project

    Réponse :

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

Vous devez collecter des informations de diagnostic

Si le problème persiste, même après avoir suivi les instructions ci-dessus, rassemblez les informations de diagnostic suivantes, puis contactez Google Cloud Customer Care :

  1. ID de projet Google Cloud
  2. Organisation Apigee
  3. Proxy d'API et son numéro de révision
  4. Réseau dans lequel le domaine privé est créé
  5. Suffixe DNS du domaine privé
  6. Résultat complet de la commande de création de domaine DNS appairé