Conectividad de red en la VPC de Google Cloud

En esta página, se describe cómo configurar la conectividad privada de Integration Connectors a tu servicio de backend como MySQL, Postgres y SQL Server alojados en la VPC de Google Cloud.

En esta página, se supone que estás familiarizado con los siguientes conceptos:

La conectividad privada a la VPC de Google Cloud puede pertenecer a cualquiera de las siguientes categorías:

  • El servicio de backend y el adjunto de servicio de PSC están en el mismo proyecto de Google Cloud o VPC.
  • Tanto el servicio de backend como el adjunto de servicio de PSC se encuentran en diferentes proyectos o VPC de Google Cloud.

Consideraciones

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

  • El adjunto de servicio de PSC y el balanceador de cargas se crean en subredes diferentes. dentro de la misma VPC. En concreto, el adjunto de servicio siempre se crea en una subred NAT.
  • El tráfico del balanceador de cargas y del sondeo de verificación de estado debe enviarse al mismo puerto.
  • Configurar las reglas de firewall 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 sea específico se configuren las reglas de denegación.

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

Conectividad privada a un servicio de backend en una VPC de Google Cloud

En esta sección, se describe cómo establecer conectividad privada cuando el servicio de backend y el archivo adjunto del servicio de PSC se encuentran en el mismo proyecto de Google Cloud.

En la siguiente imagen, se muestra la configuración de conectividad de red privada desde los conectores de integración a un servicio alojado en una VPC de Google Cloud:

Para configurar la conectividad privada a un servicio de backend en una VPC de Google Cloud, completa los siguientes pasos:

Crea un adjunto de servicio de PSC

Para establecer conectividad privada desde Integration Connectors, tu servicio debe exponerse a Integration Connectors con un adjunto de servicio de PSC. Un adjunto de servicio siempre usa un balanceador de cargas. Por lo tanto, si tu servicio no se encuentra detrás de un balanceador de cargas, se debe configurar uno.

  1. Crea un sondeo de verificación de estado y permite el tráfico de la sonda.
    1. Crea el sondeo de verificación de estado.
      gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port BACKEND_SERVER_PORT --region=REGION

      En este comando, establece BACKEND_SERVER_PORT en 3306, que es el puerto predeterminado en el que se ejecuta el servidor MySQL.

    2. Crea una regla de firewall para permitir el tráfico desde el sondeo.
      gcloud compute firewall-rules create VPC_NETWORK-allow-health-check --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT --source-ranges=35.191.0.0/16,130.211.0.0/22
  2. Crea un balanceador de cargas interno de L4 y permite el tráfico desde el balanceador de cargas.
    1. Crea un servicio de backend.
      gcloud compute backend-services create BACKEND_SERVICE --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME --health-checks-region=REGION 
    2. Agrega un grupo de instancias al servicio de backend.
      gcloud compute backend-services add-backend BACKEND_SERVICE --instance-group=INSTANCE_GROUP_NAME --instance-group-zone=ZONE
    3. Crea una regla de reenvío.
      gcloud compute forwarding-rules create FORWARDING_RULE_NAME --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE --backend-service-region=REGION
    4. Crea una regla de firewall para permitir el tráfico interno del balanceador de cargas al grupo de instancias.
      gcloud compute firewall-rules create VPC_NETWORK-allow-internal --direction=INGRESS --priority=1000 --network=VPC_NETWORK --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
  3. Crea el adjunto de servicio
    1. Crea una subred para PSC NAT. El siguiente comando crea una subred con el nombre psc-nat-subnet1. y el propósito es 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 firewall para permitir el tráfico de la NAT de PSC al balanceador de cargas.
      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 un adjunto de servicio con 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 la cantidad de usuarios Extremos de PSC que se pueden conectar a este servicio. Para obtener el SERVICE_DIRECTORY_PROJECT_ID, haz lo siguiente:

      • Puedes crear el adjunto de servicio de PSC para que solo acepte solicitudes de los proyectos de Google Cloud especificados. Sin embargo, para hacerlo, necesitarás 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 de 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"

        Reemplaza lo siguiente:

        • CONNECTORS_PROJECT_ID: Es el ID del proyecto de Google Cloud en el que creaste la conexión.

        Ejemplo

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

        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"

        Si ejecutas este comando en la terminal, se mostrará 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 el resultado de muestra, para el proyecto connectors-test de Google Cloud, el ID del proyecto del directorio de servicios es abcdefghijk-tp.

Después de crear un adjunto de servicio de PSC, crea un adjunto de extremo para consumirlo. Para obtener más información, consulta Cómo crear un archivo adjunto de extremo.

Conectividad privada para diferentes proyectos de Google Cloud

En esta sección, se describe cómo establecer conectividad privada cuando el servicio de backend y el adjunto de servicio de PSC se encuentran en diferentes proyectos o VPC de Google Cloud.

En la siguiente imagen, se muestra la configuración de conectividad de red privada en la que el adjunto de servicio de PSC y el servicio de backend están en diferentes proyectos de Google Cloud:

Para configurar la conectividad privada para diferentes proyectos de Google Cloud, completa los siguientes pasos:

Configura la conectividad privada

Para configurar la conectividad privada, sigue estos pasos:

  1. Crear un balanceador de cargas. Si ya tienes un balanceador de cargas, omite este paso.
    1. Crea un NEG zonal. Para obtener más información, consulta Cómo crear un NEG zonal.
    2. Agrega el NEG zonal como backend y crea las siguientes reglas:
      1. Crea una regla de reenvío.
        gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
        --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 \
        --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE \
        --backend-service-region=REGION
      2. Crea una regla de firewall para permitir el tráfico interno del balanceador de cargas al grupo de instancias.
        gcloud compute firewall-rules create FIREWALL_RULE_NAME_INTERNAL \
        --direction=INGRESS --priority=1000 --network=VPC_NETWORK \
        --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
  2. Crea el adjunto de servicio
    1. Crea una subred para PSC NAT. El siguiente comando crea una subred con el nombre psc-nat-subnet1. y el propósito es 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 firewall para permitir el tráfico de la NAT de PSC al balanceador de cargas.
      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 un adjunto de servicio con 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 la cantidad de usuarios Extremos de PSC que se pueden conectar a este servicio. Para obtener SERVICE_DIRECTORY_PROJECT_ID, sigue estos pasos:

      • Puedes crear el adjunto de servicio de PSC para 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 con tu proyecto de Google Cloud. Para obtener el ID del proyecto del directorio de servicios, puedes usar la API de 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"

        Reemplaza lo siguiente:

        • CONNECTORS_PROJECT_ID: Es el ID del proyecto de Google Cloud en el que creaste la conexión.

        Ejemplo

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

        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"

        Si ejecutas este comando en la terminal, se mostrará 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 el resultado de muestra, para el proyecto de Google Cloud connectors-test, el ID del proyecto del directorio de servicios es abcdefghijk-tp.

Agrega a la lista de entidades permitidas el proyecto de Integration Connectors en un archivo adjunto de servicio

Puedes crear el adjunto de servicio de PSC para 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 con tu proyecto de Google Cloud. Para obtener el ID del proyecto del directorio de servicios, puedes usar la API de List Connections, como se muestra a continuación 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"

Reemplaza lo siguiente:

  • CONNECTORS_PROJECT_ID: Es el ID del proyecto de Google Cloud en el que creaste la conexión.

Ejemplo

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

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"

Si ejecutas este comando en la terminal, se mostrará 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 el resultado de muestra, para el proyecto connectors-test de Google Cloud, el ID del proyecto del directorio de servicios es abcdefghijk-tp.

Después de incluir en la lista de entidades permitidas el proyecto de Integration Connectors en un adjunto de servicio de PSC, crea un adjunto de extremo para consumir el adjunto de servicio de PSC. Para obtener más información, consulta Cómo crear un archivo adjunto de extremo.

Crea un adjunto de extremo

Adjunto de extremo como dirección IP

Si necesitas instrucciones para crear un adjunto de extremo como una dirección IP, consulta Crea un adjunto de extremo como una dirección IP.

Adjunto de extremo como nombre de host

En algunos casos, como los backends habilitados con TLS, el destino requiere que uses de host en lugar de IP privadas para realizar la validación de TLS. En los casos en que un dominio Se usa un DNS en lugar de una dirección IP para el destino del host, además de crear un extremo como una dirección IP, también debes configurar zonas administradas. Para obtener instrucciones sobre cómo crear un adjunto de extremo como nombre de host consulta Crea un adjunto de extremo como nombre de host.

Más adelante, cuando configures tu conexión para usar el adjunto de extremo, podrás seleccionarlo.

Configura una conexión para usar el adjunto de extremo

Ahora que creaste un adjunto de extremo, úsalo en tu conexión. Cuando crees una conexión nueva o actualices una existente, en la sección Destinos, selecciona Adjunto de extremo como Tipo de destino y selecciona el archivo adjunto de extremo que creaste en la lista Adjunto de extremo.

Si creaste una zona administrada, selecciona Dirección de host como Tipo de destino y usa el registro A que creaste cuando creaste la zona administrada.

Sugerencias para solucionar problemas

Si tienes problemas con la conectividad privada, sigue los lineamientos que se enumeran en esta sección para evitar problemas habituales.

  • Para verificar que el archivo adjunto del extremo esté configurado correctamente y que se haya establecido la conexión de PSC, verifica el estado de la conexión. Para obtener más información, consulta Verifica la conexión del adjunto de extremo.
  • Asegúrate de que las reglas de firewall tengan la siguiente configuración:
    • Se debe permitir que el tráfico de la subred del adjunto de servicio de PSC llegue a tu servicio de backend.
    • El balanceador de cargas debe poder enviar tráfico a tu servicio de backend.
      • Balanceadores de cargas de transferencia (ILB TCP/UDP de L4) Las solicitudes de las IP de NAT del archivo adjunto del servicio de PSC deben poder llegar a tu backend. Estas IP de NAT se asignan automáticamente desde el rango de subred de NAT de la PSC. Por lo tanto, debes permitir todo el rango de IP de la subred de NAT en la que reside el archivo adjunto de tu servicio. Para encontrar la subred de NAT de PSC, usa el siguiente comando:
        gcloud compute networks subnets list --project=PROJECT_ID --region=REGION --filter="purpose=PRIVATE_SERVICE_CONNECT"
      • Balanceadores de cargas basados en proxy o HTTP(S) (balanceador de cargas de proxy de L4, balanceador de cargas de L7) Las solicitudes de un balanceador de cargas de proxy provienen de la subred de solo proxy de la región. Por lo tanto, tus reglas de firewall deben configurarse para permitir que las solicitudes de los rangos de subred de solo proxy lleguen a tu backend. Cómo encontrar el proxy solamente la subred, usa el siguiente comando:
        gcloud compute networks subnets list --project=PROJECT_ID --region=REGION --filter="purpose=REGIONAL_MANAGED_PROXY"
      • Si quieres obtener información para solucionar problemas relacionados con el balanceador de cargas, consulta Cómo solucionar problemas relacionados con balanceadores de cargas de aplicaciones internos.

      • El sondeo de verificación de estado debe poder acceder a tu sistema de backend. Los sondeos de verificación de estado de Google Cloud tienen un rango de IP fijo (35.191.0.0/16, 130.211.0.0/22). De esta manera, estas direcciones IP deben tener permiso para enviar tráfico a tu servidor de backend.
    • La prueba de conectividad de Google Cloud se puede usar para identificar cualquier brecha en la configuración de tu red. Para obtener más información, consulta Crea y ejecuta pruebas de conectividad.