Problèmes de connectivité Apigee avec les cibles PSC Southbound

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

Symptôme

Problèmes de connectivité réseau entre Apigee et un service cible Southbound connecté par Private Service Connect (PSC).

Message d'erreur

Un problème de connexion réseau ou l'expiration d'un délai TCP entre Apigee et le service cible renverrait une erreur 503 et ressemblerait à l'erreur ci-dessous dans une session de débogage.

{"fault":{"faultstring":"The Service is temporarily unavailable","detail":{"errorcode":"messaging.adaptors.http.flow.ServiceUnavailable","reason":"TARGET_CONNECT_TIMEOUT"}}}

Causes possibles :

Cause Description
Régions différentes entre le rattachement de service et l'instance Apigee La région de l'instance Apigee et celle du rattachement de service sont différentes.
Règle de pare-feu d'entrée manquante pour le sous-réseau PSC dans le projet cible Dans le projet cible, assurez-vous qu'il existe une règle de pare-feu d'entrée autorisant l'adresse IP et le port de la plage de sous-réseau PSC.
Configuration incorrecte du rattachement de service dans le projet cible Vérifiez le rattachement de service dans le projet cible.
État incorrect du rattachement de point de terminaison dans Apigee Vérifiez le rattachement de point de terminaison sur Apigee.
Incohérence au niveau du port configuré entre le TargetEndpoint et l'ILB Assurez-vous que le TargetEndpoint dans le proxy d'API utilise le même port que celui exposé par l'équilibreur de charge interne (ILB) dans le projet cible.

Cause : régions différentes entre le rattachement de service et l'instance Apigee

Diagnostic

  1. Vérifiez la région de l'instance Apigee à l'aide de l'une des méthodes suivantes :

    1. Avec l'interface utilisateur classique d'Apigee :
      1. Connectez-vous à l'interface utilisateur Apigee.
      2. Cliquez sur Administrateur > Instances.
      3. Cliquez sur une instance.
      4. Vérifiez l'emplacement d'hébergement de l'environnement d'exécution dans le volet Détails de l'instance.
    2. Avec l'interface utilisateur Apigee dans la console Google Cloud :
      1. Dans la console Google Cloud, accédez à la page Instances Apigee.

        Accéder à la page "Instances Apigee"

      2. Cliquez sur une instance.
      3. Vérifiez l'emplacement d'hébergement de l'environnement d'exécution dans le volet Détails de l'instance.
    3. Avec un appel d'API :
      curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/instances"
      

      ORG_NAME est le nom de l'organisation. Exemple :example-apigee-support

      Un résultat semblable au suivant s'affiche. L'emplacement d'hébergement de l'environnement d'exécution correspond à la valeur indiquée pour location ci-dessous. Exemple : asia-northeast1.

      "instances": [
        {
          "name": "asia-northeast1",
          "location": "asia-northeast1",
          "host": "10.117.0.2",
          "port": "443",
          "createdAt": "1628150049760",
          "lastModifiedAt": "1682139265367",
          "diskEncryptionKeyName": "projects/apigee-x-support-apac-05/locations/asia-northeast1/keyRings/phanim-disk-key-1/cryptoKeys/phanim-disk-key-ring-1",
          "state": "ACTIVE",
          "peeringCidrRange": "SLASH_20",
          "runtimeVersion": "1-9-0-apigee-25",
          "consumerAcceptList": [
            "example-apigee-support",
            "example-neg-project"
          ],
          "serviceAttachment": "projects/xb363132eb41cb643p-tp/regions/asia-northeast1/serviceAttachments/apigee-asia-northeast1-yp9o"
        }
  2. Vérifiez la région du rattachement du point de terminaison à l'aide d'un appel d'API :
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/endpointAttachments/ENDPOINT_ATTACHMENT_NAME"

    Où :

    • ORG_NAME est le nom de l'organisation. Exemple :example-apigee-support
    • ENDPOINT_ATTACHMENT_NAME correspond au nom du rattachement de point de terminaison. Exemple :example-ea

    Un résultat semblable au suivant s'affiche. La région du rattachement de point de terminaison correspond à la valeur indiquée pour location ci-dessous. Exemple :asia-northeast1

    {
      "name": "organizations/example-apigee-support/endpointAttachments/example-ea",
      "location": "asia-northeast1",
      "host": "7.0.4.2",
      "state": "ACTIVE",
      "connectionState": "ACCEPTED",
      "serviceAttachment": "projects/target-project/regions/asia-northeast1/serviceAttachments/gkebackend"
    }
  3. Vérifiez la région du rattachement de service à l'aide de la console Cloud :
    1. Dans la console Google Cloud, accédez à la page Private Service Connect.

      Accéder à Private Service Connect

    2. Vérifiez l'emplacement dans la colonne Région.

Solution

Assurez-vous que les régions de l'instance Apigee, du rattachement de point de terminaison et du rattachement de service sont identiques. Par exemple, asia-northeast1.

Comme décrit dans la section Limites, l'accès mondial n'est pas pris en charge. Cela signifie que les rattachements de service et de point de terminaison doivent se trouver dans la même région. Par exemple, si votre instance Apigee se trouve dans la région us-west1, vous ne pouvez pas y connecter des services qui se trouvent dans us-east2 ou dans une autre région.

Si les régions sont différentes, vous rencontrerez des problèmes de connectivité entre Apigee et le service cible.

Cause : règle de pare-feu d'entrée manquante pour le sous-réseau PSC dans le projet cible

Diagnostic

Dans le projet cible, vérifiez qu'il existe une règle de pare-feu qui autorise les adresses IP de la plage du sous-réseau PSC à se connecter au service cible :

  1. Dans Google Cloud Console, accédez à la page Pare-feu.

    Accéder à la page "Pare-feu"

  2. Dans le volet Règles de pare-feu VPC, vérifiez qu'il existe une règle semblable à l'exemple suivant :
    • Direction : entrée
    • Action en cas de correspondance : autoriser
    • Filtre source : plages IPv4/IPv6
    • Plages d'adresses IP : plage d'adresses IP du sous-réseau PSC (ipCidrRange), que vous pouvez obtenir avec la commande gcloud suivante (qui sert à décrire le sous-réseau PSC) :
      gcloud compute networks subnets describe PSC_SUBNET_NAME --region=REGION

      Où :

      • PSC_SUBNET_NAME correspond au nom du sous-réseau PCS. Par exemple, pscsub.
      • REGION correspond à l'emplacement. Par exemple, asia-northeast1.

      Un résultat semblable au suivant s'affiche :

      creationTimestamp: '2023-04-19T03:33:29.371-07:00'
      fingerprint: 1JPKY66teTg=
      gatewayAddress: 10.10.0.1
      id: '5645967773396008342'
      ipCidrRange: 10.10.0.0/24
      kind: compute#subnetwork
      name: pscsub
      network: https://www.googleapis.com/compute/v1/projects/target-project/global/networks/default
      privateIpGoogleAccess: false
      privateIpv6GoogleAccess: DISABLE_GOOGLE_ACCESS
      purpose: PRIVATE_SERVICE_CONNECT
      ....
    • Protocoles et ports : ils doivent être répertoriés en fonction de la configuration de votre service cible.
  3. Exemple :

Solution

Si la règle de pare-feu n'est pas en place, créez un sous-réseau PSC comme décrit dans la section Créer un rattachement de service, étape 2.

Cause : configuration incorrecte du rattachement de service dans le projet cible

Diagnostic

Vérifiez la région du rattachement de service à l'aide de l'une des méthodes suivantes :

  1. Avec la console Cloud :
    1. Dans la console Google Cloud, accédez à la page Private Service Connect.

      Accéder à Private Service Connect

    2. Cliquez sur Services publiés.
    3. Cliquez sur un service.
    4. Vérifiez l'emplacement dans la ligne Région.

  2. Avec une gcloud command :
      gcloud compute service-attachments describe SERVICE_ATTACHMENT --region=REGION

    Où :

    • SERVICE_ATTACHMENT est le nom du rattachement de service. Par exemple, gkebackend.
    • REGION correspond à l'emplacement. Exemple : asia-northeast1.

    Un résultat semblable au suivant s'affiche :

    connectedEndpoints:
    - endpoint: https://www.googleapis.com/compute/v1/projects/xb363132eb41cb643p-tp/regions/asia-northeast1/forwardingRules/example-ea
      pscConnectionId: '6816512648152066'
      status: ACCEPTED
    connectionPreference: ACCEPT_AUTOMATIC
    creationTimestamp: '2023-04-19T05:09:09.941-07:00'
    description: ''
    enableProxyProtocol: false
    fingerprint: 0BZDAZ3zDCs=
    id: '4503680255626733322'
    kind: compute#serviceAttachment
    name: gkebackend
    natSubnets:
    - https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1/subnetworks/pscsub
    pscServiceAttachmentId:
      high: '21570167574103266'
      low: '4503680255626733322'
    region: https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1
    selfLink: https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1/serviceAttachments/gkebackend
    targetService: https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1/forwardingRules/k8s2-tcp-b65prv8v-default-ilb-svc-tv2s6klz

Solution

  1. Assurez-vous que la valeur connectedEndpoints.endpoint fait référence au projet locataire d'Apigee et vérifiez que son état est ACCEPTED. Vous pouvez trouver le projet locataire à l'aide de l'API Apigee Organizations :
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME"

    ORG_NAME est le nom de l'organisation. Exemple : example-apigee-support.

    Un résultat semblable au suivant s'affiche. L'ID se trouve dans un champ nommé apigeeProjectId. Exemple : xb363132eb41cb643p-tp.

    {
      "name": "example-apigee-support",
      "createdAt": "1628148440954",
      "lastModifiedAt": "1650563608527",
      "environments": [
      "dev"
      ],
      "properties": {
        "property": [
          {
            "name": "features.mart.connect.enabled",
            "value": "true"
          },
          {
            "name": "features.hybrid.enabled",
            "value": "true"
          }
        ]
      },
        "analyticsRegion": "asia-northeast1",
        "authorizedNetwork": "default",
        "runtimeType": "CLOUD",
        "subscriptionType": "PAID",
        "caCertificate": "CERTIFICATE_NUMBER",
        "runtimeDatabaseEncryptionKeyName": "projects/example-apigee-support/locations/asia-northeast1/keyRings/phanim-key-ring-1/cryptoKeys/phanim-app-key-1",
        "projectId": "example-apigee-support",
        "state": "ACTIVE",
        "billingType": "SUBSCRIPTION",
        "addonsConfig": {
        "advancedApiOpsConfig": {},
        "integrationConfig": {},
        "monetizationConfig": {}
        },
    "apigeeProjectId": "xb363132eb41cb643p-tp"
    }
  2. Vérifiez que le rattachement de service possède une connectivité avec le rattachement de point de terminaison comme décrit dans Modèles de réseau Southbound, Vérifier et gérer la connectivité des rattachements. Dans l'interface utilisateur de l'étape 1, vérifiez les points suivants :
    1. La ligne Sous-réseaux fait référence au sous-réseau PSC. Par exemple, pscsub.
    2. La ligne Cible fait référence à l'équilibreur de charge interne approprié pour les backends cibles.

Cause : état incorrect du rattachement de point de terminaison dans Apigee

Diagnostic

Affichez le rattachement de point de terminaison sur Apigee à l'aide d'un appel d'API :

  curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/endpointAttachments/ENDPOINT_ATTACHMENT_NAME"

Où :

  • ORG_NAME est le nom de l'organisation. Exemple : example-apigee-support.
  • ENDPOINT_ATTACHMENT_NAME correspond au nom du rattachement de point de terminaison. Exemple :example-ea

Un résultat semblable au suivant s'affiche :

  {
    "name": "organizations/example-apigee-support/endpointAttachments/example-ea",
    "location": "asia-northeast1",
    "host": "7.0.4.2",
    "state": "ACTIVE",
    "connectionState": "ACCEPTED",
    "serviceAttachment": "projects/target-project/regions/asia-northeast1/serviceAttachments/gkebackend"
  }

Solution

Vérifiez les éléments suivants :

  • state correspond à ACTIVE.
  • connectionState correspond à ACCEPTED.
  • serviceAttachment fait référence au projet cible et au nom du rattachement de service appropriés.

Cause : incohérence au niveau du port configuré entre le TargetEndpoint et l'ILB

Diagnostic

  1. Dans le projet cible, utilisez la console Cloud pour rechercher le port exposé par la règle de transfert :
    1. Dans la console Google Cloud, accédez à la page Private Service Connect.

      Accéder à Private Service Connect

    2. Cliquez sur Services publiés.
    3. Cliquez sur un service. Comme le montre l'exemple suivant, c'est le port 80 qui est exposé.

Solution

Vérifiez que le port 80 est bien celui figurant dans le TargetEndpoint du proxy d'API.

Pour vérifier cela, accédez au proxy d'API et vérifiez l'URL TargetEndpoint :

  1. Avec l'interface utilisateur classique d'Apigee :
    1. Connectez-vous à l'interface utilisateur Apigee.
    2. Cliquez sur Développer > Proxys d'API.
    3. Cliquez sur un proxy.
    4. Cliquez sur Développer.
    5. Consultez le volet XML pour obtenir les éléments suivants :
      <HTTPTargetConnection>
        <URL>http://7.0.4.2:80</URL>
      </HTTPTargetConnection>
  2. Avec l'interface utilisateur Apigee dans la console Google Cloud :
    1. Dans la console Google Cloud, accédez à la page Apigee.

      Accéder à Apigee

    2. Dans la zone Développement de proxys, cliquez sur Proxys d'API.
    3. Cliquez sur un proxy.
    4. Cliquez sur Développer.
    5. Consultez le volet XML pour obtenir les éléments suivants :
        <HTTPTargetConnection>
          <URL>http://7.0.4.2:80</URL>
        </HTTPTargetConnection>

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 :

  • Organisation Apigee
  • Environnement et proxy d'API où survient le problème
  • Session de débogage téléchargée (fournissant toutes les informations ci-dessus)
  • Rattachement de point de terminaison utilisé
  • Projet cible et rattachement de service