Conectividad con servicios alojados en un entorno sin servidor

En esta página se describe cómo puede configurar Integration Connectors para conectarse a servicios alojados en entornos sin servidor, como Cloud Run en Google Cloud.

En la siguiente imagen se muestra una configuración de conectividad de red privada de Integration Connectors a un servicio alojado en el entorno de Cloud Run en Google Cloud:

En esta página se da por hecho que conoces los siguientes conceptos:

Cuestiones importantes

Cuando crees un adjunto de servicio de PSC, ten en cuenta los siguientes puntos clave:

  • La vinculación de servicio de PSC y el balanceador de carga se crean en subredes diferentes de la misma VPC. En concreto, el adjunto de servicio siempre se crea en una subred NAT.
  • El tráfico del balanceador de carga y la comprobación de estado deben enviarse al mismo puerto.
  • Configura las reglas de cortafuegos para facilitar el flujo de tráfico.

    Reglas de entrada

    El tráfico de la subred del adjunto de servicio de PSC debe llegar a tu servicio de backend.

    Reglas de salida

    El tráfico de salida está habilitado de forma predeterminada en un proyecto de Google Cloud, a menos que se configuren reglas de denegación específicas.

  • Todos tus componentes de Google Cloud, como el adjunto de servicio de PSC y el balanceador de carga, deben estar en la misma región.

Crear una vinculación de servicio de PSC

Para establecer una conectividad privada desde Integration Connectors, tu servicio debe exponerse a Integration Connectors mediante una vinculación de servicio de PSC. Un acoplamiento de servicio siempre usa un balanceador de carga. Por lo tanto, si tu servicio no está detrás de un balanceador de carga, debes configurarlo.

  1. Crea un balanceador de carga. Si ya tienes un balanceador de carga, puedes saltarte este paso.

    Para crear un balanceador de carga de aplicaciones que use un NEG sin servidor como backend, sigue las instrucciones que se indican en el artículo Configurar un balanceador de carga de aplicaciones interno regional con Cloud Run.

  2. Crea la vinculación de servicio.
    1. Crea una subred para NAT de PSC. Con el siguiente comando se crea una subred con el nombre psc-nat-subnet1 y el propósito PRIVATE_SERVICE_CONNECT.
      gcloud compute networks subnets create psc-nat-subnet1 \
                --network=VPC_NETWORK --range=SUBNET_RANGE_1 \
                --purpose=PRIVATE_SERVICE_CONNECT
    2. Crea una regla de cortafuegos para permitir el tráfico de la NAT de PSC al balanceador de carga.
      gcloud compute network-firewall-policies rules create PRIORITY --firewall-policy FIREWALL_POLICY_NAME_SA \
          --direction=INGRESS  --network=VPC_NETWORK \
          --action=allow --allow=tcp:BACKEND_SERVER_PORT --src-ip-ranges=SUBNET_RANGE_1
    3. Crea una vinculación de servicio con la aprobación explícita.
      gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME  --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=psc-nat-subnet1

      En este comando, LIMIT es el límite de conexiones del proyecto. El límite de conexiones es el número de endpoints de PSC de consumidor que pueden conectarse a este servicio. Para obtener el SERVICE_DIRECTORY_PROJECT_ID, sigue estos pasos:

      • Puedes crear el adjunto de servicio de PSC de forma que solo acepte solicitudes de los proyectos de Google Cloud especificados. Sin embargo, para hacerlo, necesitas el ID del proyecto del directorio de servicios asociado a tu proyecto de Google Cloud. Para obtener el ID del proyecto del directorio de servicios, puedes usar la API List Connections, como se muestra en el siguiente ejemplo.

        Sintaxis

        curl -X GET \
            -H "authorization: Bearer $(gcloud auth print-access-token)" \
            -H "Content-Type: application/json" \
            "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

        Haz los cambios siguientes:

        • CONNECTORS_PROJECT_ID: el ID de tu proyecto de Google Cloud en el que has creado la conexión.

        Ejemplo

        En este ejemplo se obtiene el ID de proyecto del directorio de servicios del proyecto de Google Cloud connectors-test.

        curl -X GET \
            -H "authorization: Bearer $(gcloud auth print-access-token)" \
            -H "Content-Type: application/json" \
            "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

        Al ejecutar este comando en el terminal, se muestra un resultado similar al siguiente:

        .....
        {
          "connections": [
            {
              "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
              "createTime": "2022-10-07T09:02:31.905048520Z",
              "updateTime": "2022-10-07T09:22:39.993778690Z",
              "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
              "status": {
                "state": "ACTIVE"
              },
              "configVariables": [
                {
                  "key": "project_id",
                  "stringValue": "connectors-test"
                },
                {
                  "key": "dataset_id",
                  "stringValue": "testDataset"
                }
              ],
              "authConfig": {},
              "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
              "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
              "nodeConfig": {
                "minNodeCount": 2,
                "maxNodeCount": 50
              }
            },
        ....
        

        En la salida de ejemplo, para el proyecto de Google Cloud connectors-test, el ID del proyecto del directorio de servicios es abcdefghijk-tp.

Crear una vinculación de endpoint para consumir la vinculación de servicio de PSC

Vinculación de endpoint como dirección IP

Para obtener instrucciones sobre cómo crear un adjunto de endpoint como dirección IP, consulta Crear un adjunto de endpoint como dirección IP.

Endpoint adjunto como nombre de host

En algunos casos, como los back-ends con TLS habilitado, el destino requiere que uses nombres de host en lugar de IPs privadas para realizar la validación de TLS. En los casos en los que se utilice un DNS privado en lugar de una dirección IP para el host de destino, además de crear una conexión de endpoint como dirección IP, también debes configurar zonas gestionadas. Para obtener instrucciones sobre cómo crear un adjunto de endpoint como nombre de host, consulta Crear un adjunto de endpoint como nombre de host.

Más adelante, cuando configures la conexión para usar el endpoint, podrás seleccionar este endpoint.

Configurar una conexión para usar el adjunto de endpoint

Ahora que has creado un adjunto de endpoint, úsalo en tu conexión. Cuando cree una conexión o actualice una que ya tenga, vaya a la sección Destinos, seleccione Endpoint attachment (Endpoint adjunto) como Destination Type (Tipo de destino) y elija el endpoint adjunto que haya creado en la lista Endpoint Attachment (Endpoint adjunto).

Si has creado una zona gestionada, selecciona Dirección de host como Tipo de destino y usa el registro A que has creado al crear la zona gestionada.

Consejos para solucionar problemas

Sigue las directrices que se indican en esta sección para evitar problemas habituales: