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

    Par exemple, pour déterminer si l'appairage de VPC est activé, vérifiez si l'attribut de réponse authorizedNetwork est présent et défini sur une valeur. Si ce n'est pas le cas, l'appairage VPC n'est pas activé:

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

    Cet exemple de réponse indique que l'association de VPC est activée:

    "projects/example-org/global/networks/shared-vpc1"
  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. Suivez les étapes ci-dessous en fonction de l'appairage de l'organisation Apigee à un réseau VPC ou non.

    Appairage de VPC activé

    Si l'appairage de VPC est activé dans votre organisation, utilisez la commande peered-dns-domains list:

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

    Le résultat peut être vide si aucun domaine DNS appairé n'est disponible, ou bien une liste des domaines DNS appairés. Exemple :

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

    L'appairage de VPC n'est pas activé

    Si l'appairage de VPC n'est pas activé dans votre organisation, utilisez l'API Apigee suivante:

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

    ORGANIZATION est le nom de votre organisation Apigee.

    Exemple de réponse, où le nom de l'organisation est 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"
        }
      ]
    }

    Si la réponse n'inclut 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.

    Appairage de VPC activé

    Si l'appairage de VPC est activé dans votre organisation, utilisez 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.

    L'appairage de VPC n'est pas activé

    Si l'appairage VPC n'est pas activé dans votre organisation, créez une zone d'appairage DNS avec la zone DNS privée de votre projet:

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

    Où :

    • ORGANIZATION est le nom de votre organisation Apigee.
    • DNS_ZONE_ID est le nom de la zone DNS que vous souhaitez créer.
    • DOMAIN est le nom DNS de cette zone gérée (example.com, par exemple).
    • DESCRIPTION est une brève description de la zone DNS. Nombre maximal de caractères: 1 024
    • PRODUCER_PROJECT_ID est le projet qui contient le réseau VPC du producteur.
    • PRODUCER_VPC_NETWORK est le réseau VPC du projet client.
  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.

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 projetGoogle 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é