Problemi di connettività di Apigee con i target PSC southbound

Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Non esiste una documentazione Apigee Edge equivalente per questo argomento.

Sintomo

Problemi di connettività di rete tra Apigee e un servizio di destinazione in uscita connesso tramite Private Service Connect (PSC).

Messaggio di errore

Un problema di connessione di rete o un timeout TCP tra Apigee e il servizio di destinazione verrebbe visualizzato come risposta di errore 503 e mostrerebbe un errore simile a quello riportato di seguito se crei una sessione di debug.

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

Possibili cause

Causa Descrizione
Regioni diverse tra il collegamento del servizio e l'istanza Apigee La regione dell'istanza Apigee e quella dell'allegato di servizio sono diverse.
Regola firewall in entrata mancante per la subnet PSC nel progetto di destinazione Nel progetto di destinazione, assicurati che esista una regola firewall in entrata per consentire l'indirizzo IP e la porta dell'intervallo di subnet PSC.
Configurazione errata del collegamento al servizio nel progetto di destinazione Verifica l'allegato di servizio nel progetto di destinazione.
Stato errato del collegamento dell'endpoint in Apigee Verifica l'allegato dell'endpoint su Apigee.
Mancata corrispondenza tra la porta configurata in TargetEndpoint e il bilanciamento del carico interno Assicurati che TargetEndpoint nel proxy API utilizzi la stessa porta esposta dal bilanciatore del carico interno (ILB) nel progetto di destinazione.

Causa: regioni diverse tra il collegamento del servizio e l'istanza Apigee

Diagnosi

  1. Controlla la regione dell'istanza Apigee utilizzando uno dei seguenti metodi:

    1. Utilizzo della UI Apigee classica:
      1. Accedi alla UI Apigee.
      2. Fai clic su Amministratore > Istanze.
      3. Fai clic su un'istanza.
      4. Controlla la posizione di hosting del runtime nel riquadro Dettagli istanza.
    2. Utilizzo della UI Apigee nella console Google Cloud :
      1. Nella console Google Cloud , vai alla pagina Istanze Apigee.

        Vai a Istanze Apigee

      2. Fai clic su un'istanza.
      3. Controlla la posizione di hosting del runtime nel riquadro Dettagli istanza.
    3. Utilizzo di una chiamata API:
      curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/instances"
      

      Dove ORG_NAME è il nome dell'organizzazione. Ad esempio, example-apigee-support.

      Viene restituito un risultato simile al seguente. La posizione di hosting del runtime è il valore mostrato per location di seguito. Ad esempio: 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. Controlla la regione Endpoint attachment utilizzando una chiamata API:
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/endpointAttachments/ENDPOINT_ATTACHMENT_NAME"

    Dove:

    • ORG_NAME è il nome dell'organizzazione. Ad esempio, example-apigee-support.
    • ENDPOINT_ATTACHMENT_NAME è il nome dell'allegato dell'endpoint. Ad esempio, example-ea.

    Viene restituito un risultato simile al seguente. La regione di collegamento dell'endpoint è il valore mostrato per location di seguito. Ad esempio: 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. Controlla la regione del collegamento al servizio utilizzando la console Google Cloud:
    1. Nella console Google Cloud , vai alla pagina Private Service Connect .

      Vai a Private Service Connect

    2. Controlla la colonna Regione per la località.

Risoluzione

Assicurati che le regioni dell'istanza Apigee, del collegamento endpoint e del collegamento del servizio siano le stesse. Ad esempio, asia-northeast1.

Come descritto in Limitazioni, l'accesso globale non è supportato. Ciò significa che i collegamenti del servizio e i collegamenti dell'endpoint devono trovarsi nella stessa regione. Ad esempio, se la tua istanza Apigee si trova nella regione us-west1, non puoi connettervi servizi che si trovano in us-east2 o in qualsiasi altra regione.

Se le regioni sono diverse, si verificano problemi di connettività tra Apigee e il servizio di destinazione.

Causa: regola firewall in entrata mancante per la subnet PSC nel progetto di destinazione

Diagnosi

Controlla se nel progetto di destinazione esiste una regola firewall che consenta all'indirizzo IP dell'intervallo di subnet PSC di connettersi al servizio di destinazione:

  1. Nella console Google Cloud , vai alla pagina Firewall.

    Vai a Firewall

  2. Nel riquadro Regole firewall VPC, verifica che esista una regola come l'esempio seguente:
    • Direzione:in entrata
    • Azione in caso di corrispondenza: Consenti
    • Filtro di origine:intervalli IPv4/IPv6
    • Intervalli IP:intervallo di indirizzi IP della subnet PSC (ipCidrRange) che puoi ottenere con il seguente comando gcloud per descrivere la subnet PSC:
      gcloud compute networks subnets describe PSC_SUBNET_NAME --region=REGION

      Dove:

      • PSC_SUBNET_NAME è il nome della subnet PCS. Ad esempio, pscsub.
      • REGION è la posizione. Ad esempio, asia-northeast1.

      Viene restituito un risultato simile al seguente:

      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
      ....
    • Protocolli e porte:devono essere elencati in base alla configurazione del servizio di destinazione.
  3. Ad esempio:

Risoluzione

Se la regola firewall non è presente, crea una subnet PSC come descritto in Crea un collegamento del servizio, passaggio 2.

Causa: configurazione errata del collegamento al servizio nel progetto di destinazione

Diagnosi

Controlla la regione dell'allegato di servizio utilizzando uno dei seguenti metodi:

  1. Utilizzo di Cloud Console:
    1. Nella console Google Cloud , vai alla pagina Private Service Connect .

      Vai a Private Service Connect

    2. Fai clic su Servizi pubblicati.
    3. Fai clic su un servizio.
    4. Controlla la riga Regione per la località.

  2. Utilizzo di un gcloud command:
      gcloud compute service-attachments describe SERVICE_ATTACHMENT --region=REGION

    Dove:

    • SERVICE_ATTACHMENT è il nome del collegamento al servizio. Ad esempio, gkebackend.
    • REGION è la posizione. Ad esempio, asia-northeast1.

    Viene restituito un risultato simile al seguente:

    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

Risoluzione

  1. Assicurati che il valore di connectedEndpoints.endpoint faccia riferimento al progetto tenant di Apigee e che il suo stato sia ACCEPTED. Puoi trovare il progetto tenant utilizzando l' API Apigee Organizations:
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME"

    Dove ORG_NAME è il nome dell'organizzazione. Ad esempio, example-apigee-support.

    Viene restituito un risultato simile al seguente. L'ID si trova in un campo denominato apigeeProjectId. Ad esempio, 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. Assicurati che il collegamento del servizio abbia la connettività con il collegamento endpoint, come descritto in Modelli di networking in uscita, Controlla e gestisci la connettività dei collegamenti. Nell'interfaccia utente del passaggio 1 , assicurati che:
    1. La riga Subnet fa riferimento alla subnet PSC. Ad esempio, pscsub.
    2. La riga Target fa riferimento al bilanciatore del carico interno corretto per i backend di destinazione.

Causa: stato errato del collegamento dell'endpoint in Apigee

Diagnosi

Visualizza l'allegato dell'endpoint su Apigee utilizzando una chiamata API:

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

Dove:

  • ORG_NAME è il nome dell'organizzazione. Ad esempio, example-apigee-support.
  • ENDPOINT_ATTACHMENT_NAME è il nome dell'allegato dell'endpoint. Ad esempio, example-ea.

Viene restituito un risultato simile al seguente:

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

Risoluzione

Assicurati che:

  • state è ACTIVE
  • connectionState è ACCEPTED
  • serviceAttachment si riferisce al progetto target corretto e al nome del collegamento al servizio

Causa: mancata corrispondenza della porta configurata in TargetEndpoint e nel bilanciatore del carico interno

Diagnosi

  1. Nel progetto di destinazione, trova la porta che la regola di forwarding espone utilizzando la console Google Cloud:
    1. Nella console Google Cloud , vai alla pagina Private Service Connect .

      Vai a Private Service Connect

    2. Fai clic su Servizi pubblicati.
    3. Fai clic su un servizio. Come mostrato nell'esempio seguente, la porta 80 è esposta.

Risoluzione

Assicurati che la stessa porta 80 sia la porta in TargetEndpoint del proxy API.

Per verificarlo, vai al proxy API e controlla l'URL TargetEndpoint:

  1. Utilizzo della UI Apigee classica:
    1. Accedi alla UI Apigee.
    2. Fai clic su Sviluppa > Proxy API.
    3. Fai clic su un proxy.
    4. Fai clic su Sviluppa.
    5. Controlla il riquadro XML per verificare quanto segue:
      <HTTPTargetConnection>
        <URL>http://7.0.4.2:80</URL>
      </HTTPTargetConnection>
  2. Utilizzo della UI Apigee nella console Google Cloud :
    1. Nella console Google Cloud , vai alla pagina Apigee.

      Vai ad Apigee

    2. Nell'area Sviluppo proxy, fai clic su Proxy API.
    3. Fai clic su un proxy.
    4. Fai clic su Sviluppa.
    5. Controlla il riquadro XML per verificare quanto segue:
        <HTTPTargetConnection>
          <URL>http://7.0.4.2:80</URL>
        </HTTPTargetConnection>

Deve raccogliere informazioni diagnostiche

Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni diagnostiche e poi contatta l'assistenza clienti Google Cloud:

  • Organizzazione Apigee
  • Ambiente e proxy API in cui si verifica il problema
  • Sessione di debug scaricata (fornisce tutte le informazioni riportate sopra)
  • Collegamento endpoint utilizzato
  • Progetto di destinazione e collegamento al servizio