Problemas de conectividad de Apigee con destinos de PSC descendente

Estás viendo la documentación de Apigee y Apigee hybrid.
No hay documentación de Apigee Edge equivalente para este tema.

Síntoma

Problemas de conectividad de red entre Apigee y un servicio de destino descendente conectados por Private Service Connect (PSC).

Mensaje de error

Un problema de conexión de red o un tiempo de espera de TCP entre Apigee y el servicio de destino se mostraría como una respuesta de error 503 y mostraría un error similar al siguiente si creas una sesión de depuración.

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

Causas posibles

Causa Descripción
Diferentes regiones entre el adjunto de servicio y la instancia de Apigee La región de la instancia de Apigee y la región del adjunto de servicio son diferentes.
Falta la regla de firewall de entrada para la subred PSC en el proyecto de destino En el proyecto de destino, asegúrate de que exista una regla de firewall de entrada que permita la dirección IP y el puerto del rango de subred de PSC.
Configuración incorrecta del adjunto de servicio en el proyecto de destino Verifica el Adjunto de servicio en el proyecto de destino.
Estado incorrecto del adjunto de extremo en Apigee Verifica el adjunto de extremo en Apigee.
Coincidencias en el puerto configurado en TargetEndpoint y el ILB Asegúrate de que el TargetEndpoint en el proxy de API use el mismo puerto que expone el balanceador de cargas interno (ILB) en el proyecto de destino.

Causa: Diferentes regiones entre el adjunto del servicio y la instancia de Apigee

Diagnóstico

  1. Verifica la región de la instancia de Apigee mediante uno de los siguientes métodos:

    1. Usa la IU clásica de Apigee:
      1. Accede a la IU de Apigee.
      2. Haz clic en Administrador > Instancias.
      3. Haz clic en una instancia.
      4. Verifica la ubicación de hosting del entorno de ejecución en el panel Detalles de la instancia.
    2. Usa la IU de Apigee en la consola de Google Cloud:
      1. En la consola de Google Cloud, ve a la página Instancias de Apigee.

        Ir a Instancias de Apigee

      2. Haz clic en una instancia.
      3. Verifica la ubicación de hosting del entorno de ejecución en el panel Detalles de la instancia.
    3. Mediante una llamada a la API:
      curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "https://apigee.googleapis.com/v1/organizations/ORG_NAME/instances"
      

      En el que ORG_NAME es el nombre de la migración. Por ejemplo, example-apigee-support

      Se mostrará un resultado similar al siguiente. La ubicación de hosting del entorno de ejecución es el valor que se muestra para location a continuación. Por ejemplo, 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. Verifica la región del adjunto de extremo mediante una llamada a la API:
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/endpointAttachments/ENDPOINT_ATTACHMENT_NAME"
    

    Aquí:

    • ORG_NAME es el nombre de la organización. Por ejemplo, example-apigee-support
    • ENDPOINT_ATTACHMENT_NAME es el nombre del adjunto del extremo. Por ejemplo, example-ea

    Se mostrará un resultado similar al siguiente. La región del adjunto de extremo es el valor que se muestra para location a continuación. Por ejemplo, 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. Verifica la región Adjunto de servicio mediante Cloud Console:
    1. En la consola de Google Cloud, ve a la página Private Service Connect.

      Ir a Private Service Connect

    2. Verifica la columna Región para ver la ubicación.

Solución

Asegúrate de que las regiones Instancia de Apigee, Adjunto de extremo y Adjunto de servicio sean las mismas. Por ejemplo: asia-northeast1.

Como se describe en Limitaciones, el acceso global no es compatible. Esto significa que los adjuntos del servicio y los adjuntos del extremo deben estar en la misma región. Por ejemplo, si tu instancia de Apigee está en la región us-west1, no puedes conectar servicios que estén en us-east2 ni en ninguna otra región.

Si las regiones son diferentes, verás problemas de conectividad entre Apigee y el servicio de destino.

Causa: Falta la regla de firewall de entrada para la subred PSC en el proyecto de destino

Diagnóstico

Busca una regla de firewall en el proyecto de destino que permita que las direcciones IP del rango de subred de PSC se conecten al servicio de destino:

  1. En la consola de Google Cloud, ve a la página Firewall.

    Ir a Firewall

  2. En el panel Reglas de firewall de VPC, verifica que exista una regla como la del siguiente ejemplo:
    • Dirección Entrada
    • Acción en caso de coincidencia: Permitir
    • Filtro de fuente: Rangos de IPv4/IPv6
    • Rangos de IP: Es el rango de direcciones IP de la subred PSC (ipCidrRange) que puedes obtener con el siguiente comando de gcloud para describir la subred de PSC:
      gcloud compute networks subnets describe PSC_SUBNET_NAME --region=REGION

      Aquí:

      • PSC_SUBNET_NAME es el nombre de la subred de PCS. Por ejemplo, pscsub
      • REGION es la ubicación. Por ejemplo, asia-northeast1.

      Se mostrará un resultado similar al siguiente:

      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
      ....
    • Protocolos y puertos: Estos se deben enumerar según la configuración del servicio de destino.
  3. Por ejemplo:

Solución

Si no se aplica la regla de firewall, crea una subred de PSC como se describe en Crea un adjunto de servicio, paso 2.

Causa: Configuración incorrecta del adjunto de servicio en el proyecto de destino

Diagnóstico

Verifica la región del adjunto de servicio mediante uno de los siguientes métodos:

  1. Usar la consola de Cloud:
    1. En la consola de Google Cloud, ve a la página Private Service Connect.

      Ir a Private Service Connect

    2. Haz clic en Servicios publicados.
    3. Haz clic en un servicio.
    4. Verifica la fila Región para ver la ubicación.

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

    Aquí:

    • SERVICE_ATTACHMENT es el nombre del adjunto del servicio. Por ejemplo, gkebackend
    • REGION es la ubicación. Por ejemplo, asia-northeast1.

    Se mostrará un resultado similar al siguiente:

    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

Solución

  1. Asegúrate de que el valor connectedEndpoints.endpoint haga referencia al proyecto de usuario de Apigee y asegúrate de que su estado sea ACCEPTED. Puedes encontrar el proyecto de usuario con la API de Organizations de Apigee:
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME"

    En el que ORG_NAME es el nombre de la migración. Por ejemplo, example-apigee-support.

    Se mostrará un resultado similar al siguiente. El ID está en un campo llamado apigeeProjectId. Por ejemplo, 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. Asegúrate de que Adjunto de servicio tiene conectividad con el Adjunto de extremo como se describe en Patrones de herramientas de redes descendentes, comprueba y administra la conectividad de adjuntos. En la IU del paso 1, asegúrate de que se cumpla lo siguiente:
    1. La fila Subredes hace referencia a la subred PSC. Por ejemplo: pscsub.
    2. En la fila Destino, se hace referencia al balanceador de cargas interno correcto para los backends de destino.

Causa: El estado del adjunto de extremo es incorrecto en Apigee

Diagnóstico

Visualiza el adjunto del extremo en Apigee con una llamada a la API:

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

Aquí:

  • ORG_NAME es el nombre de la organización. Por ejemplo, example-apigee-support.
  • ENDPOINT_ATTACHMENT_NAME es el nombre del adjunto del extremo. Por ejemplo, example-ea

Se mostrará un resultado similar al siguiente:

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

Solución

Asegúrate de que se cumpla lo siguiente:

  • state es ACTIVE
  • connectionState es ACCEPTED
  • serviceAttachment se refiere al proyecto de destino y al nombre del adjunto de servicio correctos.

Causa: Discrepancia en el puerto configurado en TargetEndpoint y en el ILB

Diagnóstico

  1. En el proyecto de destino, busca el puerto que expone la regla de reenvío mediante laconsola de Cloud:
    1. En la consola de Google Cloud, ve a la página Private Service Connect.

      Ir a Private Service Connect

    2. Haz clic en Servicios publicados.
    3. Haz clic en un servicio. Como se muestra en el siguiente ejemplo, el puerto 80 está expuesto.

Solución

Asegúrate de que el mismo puerto 80 sea el puerto en el TargetEndpoint del proxy de API.

Para verificarlo, navega al proxy de API y verifica la URL TargetEndpoint:

  1. Con la IU clásica de Apigee, haz lo siguiente:
    1. Accede a la IU de Apigee.
    2. Haz clic en Desarrollar > Proxies de API
    3. Haz clic en un proxy.
    4. Haz clic en Develop.
    5. Verifica en el panel XML lo siguiente:
      <HTTPTargetConnection>
        <URL>http://7.0.4.2:80</URL>
      </HTTPTargetConnection>
  2. Usa la IU de Apigee en la consola de Google Cloud:
    1. En la consola de Google Cloud, ve a la página Apigee.

      Ir a Apigee

    2. En el área Desarrollo de proxy, haz clic en Proxies de API.
    3. Haz clic en un proxy.
    4. Haz clic en Develop.
    5. Verifica en el panel XML lo siguiente:
        <HTTPTargetConnection>
          <URL>http://7.0.4.2:80</URL>
        </HTTPTargetConnection>

Se debe recopilar información de diagnóstico

Si el problema persiste incluso después de seguir las instrucciones anteriores, recopila la siguiente información de diagnóstico y, luego, comunícate con Asistencia de Apigee:

  • Organización de Apigee
  • Entorno y proxy de API que ven el problema
  • Sesión de depuración descargada (esto proporcionará toda la información anterior)
  • Adjunto de extremo que se usa
  • Proyecto de destino y adjunto de servicio