Problemas de conectividad de Apigee con destinos de PSC de salida

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

Síntoma

Problemas de conectividad de red entre Apigee y un servicio de destino de salida conectado mediante Private Service Connect (PSC).

Mensaje de error

Si se produce un problema de conexión de red o un tiempo de espera de TCP entre Apigee y el servicio de destino, se mostrará una respuesta de error 503 y un error similar al siguiente si crea 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
Regiones diferentes entre el adjunto de servicio y la instancia de Apigee La región de la instancia de Apigee y la de ServiceAttachment son diferentes.
Falta una regla de cortafuegos de entrada para la subred de PSC en el proyecto de destino En el proyecto de destino, asegúrate de que haya una regla de cortafuegos de entrada que permita la dirección IP y el puerto del intervalo de subredes de PSC.
Configuración incorrecta del archivo adjunto del servicio en el proyecto de destino Verifica el adjunto de servicio en el proyecto de destino.
Estado incorrecto del archivo adjunto del endpoint en Apigee Verifica el Endpoint attachment en Apigee.
Discordancia entre el puerto configurado en TargetEndpoint y el ILB Asegúrate de que TargetEndpoint del proxy de API use el mismo puerto que expone el balanceador de carga interno (ILB) en el proyecto de destino.

Causa: las regiones de la vinculación de servicio y la instancia de Apigee son diferentes

Diagnóstico

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

    1. Para usar la interfaz de usuario clásica de Apigee, sigue estos pasos:
      1. Inicia sesión en la interfaz de usuario de Apigee.
      2. Haga clic en Administrar > Instancias.
      3. Haz clic en una instancia.
      4. Consulta la ubicación de alojamiento del tiempo de ejecución en el panel Detalles de la instancia.
    2. Usar la interfaz de Apigee en la Google Cloud consola:
      1. En la Google Cloud consola, ve a la página Instancias de Apigee.

        Ir a Instancias de Apigee

      2. Haz clic en una instancia.
      3. Consulta la ubicación de alojamiento del tiempo 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)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/instances"
      

      Donde ORG_NAME es el nombre de la organización. Por ejemplo, example-apigee-support.

      Se devuelve algo similar a lo siguiente. La ubicación del alojamiento en tiempo de ejecución es el valor que se muestra en 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. Consulta la región Endpoint attachment (Asociación de endpoint) 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"

    Donde:

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

    Se devuelve algo similar a lo siguiente. La región de adjuntos de endpoint es el valor que se muestra en 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. Comprueba la región del adjunto de servicio en la consola de Cloud:
    1. En la Google Cloud consola, ve a la página Private Service Connect .

      Ir a Private Service Connect

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

Resolución

Asegúrate de que las regiones de la instancia de Apigee, el EndpointAttachment y el ServiceAttachment sean las mismas. Por ejemplo, asia-northeast1.

Tal como se describe en la sección Limitaciones, no se admite el acceso global. Esto significa que los adjuntos de servicio y los adjuntos de endpoint 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, se producirán problemas de conectividad entre Apigee y el servicio de destino.

Causa: falta la regla de cortafuegos de entrada de la subred de PSC en el proyecto de destino

Diagnóstico

Busca una regla de cortafuegos en el proyecto de destino que permita que la dirección IP del intervalo de subredes de PSC se conecte al servicio de destino:

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

    Ir a Cortafuegos

  2. En el panel Reglas de cortafuegos de VPC, comprueba que haya una regla como la del ejemplo siguiente:
    • Dirección: entrada
    • Acción tras coincidencia: permitir
    • Filtro de origen: intervalos de IPv4 o IPv6
    • Intervalos de IP: intervalo de direcciones IP de la subred de 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

      Donde:

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

      Se devuelve algo similar a lo 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: deben aparecer en función de la configuración del servicio de destino.
  3. Por ejemplo:

Resolución

Si la regla de firewall no está configurada, crea una subred de PSC tal como se describe en el paso 2 del artículo Crear un adjunto de servicio.

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

Diagnóstico

Comprueba la región del Service attachment (Adjunto de servicio) mediante uno de los siguientes métodos:

  1. Usar la consola de Cloud:
    1. En la Google Cloud consola, 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. Consulta la fila Región para ver la ubicación.

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

    Donde:

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

    Se devuelve algo similar a lo 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

Resolución

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

    Donde ORG_NAME es el nombre de la organización. Por ejemplo, example-apigee-support.

    Se devuelve algo similar a lo siguiente. El ID se encuentra 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 el adjunto de servicio tenga conectividad con el adjunto de endpoint, tal como se describe en Patrones de redes de salida, comprobar y gestionar la conectividad de los adjuntos. En la interfaz de usuario del paso 1 , asegúrate de que:
    1. La fila Subredes hace referencia a la subred de PSC. Por ejemplo, pscsub.
    2. La fila Destino hace referencia al balanceador de carga interno correcto de los back-ends de destino.

Causa: estado incorrecto del archivo adjunto del endpoint en Apigee

Diagnóstico

Consulta el endpoint adjunto en Apigee 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"

Donde:

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

Se devuelve algo similar a lo 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"
  }

Resolución

Asegúrate de lo siguiente:

  • state es ACTIVE
  • connectionState es ACCEPTED
  • serviceAttachment hace referencia al proyecto de destino correcto y al nombre de la vinculación de servicio.

Causa: no coinciden el puerto configurado en TargetEndpoint y el ILB

Diagnóstico

  1. En el proyecto de destino, busca el puerto que expone la regla de reenvío mediante la consola de Cloud:
    1. En la Google Cloud consola, 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, se expone el puerto 80.

Resolución

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

Para comprobarlo, ve al proxy de la API y verifica la URL TargetEndpoint:

  1. Para usar la interfaz de usuario clásica de Apigee, haz lo siguiente:
    1. Inicia sesión en la interfaz de usuario de Apigee.
    2. Haga clic en Desarrollar > Proxies de API.
    3. Haz clic en un proxy.
    4. Haz clic en Desarrollar.
    5. En el panel XML, comprueba lo siguiente:
      <HTTPTargetConnection>
        <URL>http://7.0.4.2:80</URL>
      </HTTPTargetConnection>
  2. Usar la interfaz de usuario de Apigee en la Google Cloud consola:
    1. En la Google Cloud consola, ve a la página Apigee.

      Ir a Apigee

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

Debe recoger información de diagnóstico

Si el problema persiste incluso después de seguir las instrucciones anteriores, recoge la siguiente información de diagnóstico y ponte en contacto con el equipo de Asistencia de Google Cloud:

  • Organización de Apigee
  • Entorno y proxy de API que presentan el problema
  • Sesión de depuración descargada (proporcionará toda la información anterior)
  • Se está usando un archivo adjunto de endpoint
  • Vinculación de proyectos y servicios de destino