Configura el intercambio de tráfico de VPC

Puedes usar el intercambio de tráfico entre redes de VPC para permitir que Datastream se comunique de forma privada con los recursos de tu red de nube privada virtual (VPC).

El intercambio de tráfico entre redes de VPC es una conexión entre tu red de VPC y la red privada de Datastream, lo que permite que Datastream se comunique con los recursos internos a través de direcciones IP internas. El uso de la conectividad privada establece una conexión exclusiva en la red de Datastream, lo que significa que ningún otro cliente puede compartirla.

La conexión de intercambio de tráfico entre tu red de VPC y la red de VPC de Datastream permite que Datastream se conecte a lo siguiente:

La conexión de intercambio de tráfico entre redes de VPC entre tu red de VPC y la red de VPC de Datastream no permite que Datastream se conecte a lo siguiente:

Para establecer la conectividad entre Datastream y un recurso al que solo se puede acceder desde tu red de VPC, puedes usar una VM de traducción de direcciones de red (NAT) en tu red de VPC. Un caso de uso común para una VM de NAT es cuando Datastream necesita conectarse a una instancia de Cloud SQL.

En esta página, se describe un ejemplo de configuración de VM de NAT que permite que Datastream se conecte de forma privada a una instancia de Cloud SQL.

Diagrama de flujo de usuarios de Datastream

Requisitos previos del intercambio de tráfico entre VPC

Antes de crear una configuración de conectividad privada, debes realizar los siguientes pasos para que Datastream pueda crear la conexión de intercambio de tráfico de VPC a tu proyecto:

  • Debes tener una red de VPC que pueda intercambiar tráfico con la red privada de Datastream y que cumpla con los requisitos que se describen en la página Intercambio de tráfico entre redes de VPC. Para obtener más información sobre cómo crear esta red, consulta Usa el intercambio de tráfico entre redes de VPC.
  • Identifica un rango de IP disponible (con un bloque CIDR de /29) en la red de VPC. No puede ser un rango de IP que ya exista como una subred, un rango de IP preasignado de acceso a servicios privados ni ninguna ruta (que no sea la ruta predeterminada 0.0.0.0) que incluya el rango de IP. Datastream usa este rango de IP para crear una subred y poder comunicarse con la base de datos de origen. En la siguiente tabla, se describen los rangos de IP válidos.
Rango Descripción
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
Direcciones IP privadas RFC 1918
100.64.0.0/10 Espacio de direcciones compartidas RFC 6598
192.0.0.0/24 Asignaciones de protocolo IETF RFC 6890
192.0.2.0/24 (TEST-NET-1)
198.51.100.0/24 (TEST-NET-2)
203.0.113.0/24 (TEST-NET-3)
Documentación RFC 5737
192.88.99.0/24 Retransmisión de IPv6 a IPv4 (obsoleta) RFC 7526
198.18.0.0/15 Pruebas comparativas RFC 2544
  • Verifica que Google Cloud y el firewall local permitan el tráfico del rango de IP seleccionado. Si no es así, crea una regla de firewall de entrada que permita el tráfico en el puerto de la base de datos de origen y asegúrate de que el rango de direcciones IPv4 en la regla de firewall sea el mismo que el rango de direcciones IP asignado cuando creaste el recurso de conectividad privada:

    gcloud compute firewall-rules create FIREWALL-RULE-NAME \
      --direction=INGRESS \
      --priority=PRIORITY \
      --network=PRIVATE_CONNECTIVITY_VPC \
      --project=VPC_PROJECT \
      --action=ALLOW \
      --rules=FIREWALL_RULES \
      --source-ranges=IP-RANGE
      

    Reemplaza lo siguiente:

    • FIREWALL-RULE-NAME: Es el nombre de la regla de firewall que se creará.
    • PRIORITY: Es la prioridad de la regla, expresada como un número entero entre 0 y 65535, incluidos ambos números. El valor debe ser inferior al valor establecido para la regla de tráfico de bloqueo, si existe. Los valores de prioridad más bajos implican una precedencia más alta.
    • PRIVATE_CONNECTIVITY_VPC: Es la red de VPC que puede intercambiar tráfico con la red privada de Datastream y que cumple con los requisitos que se describen en la página Intercambio de tráfico entre redes de VPC. Esta es la VPC que especificas cuando creas tu configuración de conectividad privada.
    • VPC_PROJECT: Es el proyecto de la red de VPC.
    • FIREWALL_RULES: Es la lista de protocolos y puertos a los que se aplica la regla de firewall, por ejemplo, tcp:80. La regla debe permitir el tráfico de TCP a la dirección IP y el puerto de la base de datos de origen o del proxy. Dado que la conectividad privada puede admitir varias bases de datos, la regla debe tener en cuenta el uso real de tu configuración.
    • IP-RANGE: Es el rango de direcciones IP que Datastream usa para comunicarse con la base de datos de origen. Este es el mismo rango que indicas en el campo Asigna un rango de IP cuando creas tu configuración de conectividad privada.

      También es posible que debas crear una regla de firewall de salida idéntica para permitir que el tráfico regrese a Datastream.

  • Se les asigna un rol que contiene el permiso compute.networks.list. Este permiso te otorga los permisos de IAM necesarios para enumerar las redes de VPC en tu proyecto. Puedes ver qué roles contienen este permiso en la referencia de permisos de IAM.

Requisitos previos de la VPC compartida

Si usas la VPC compartida, debes completar las siguientes acciones además de los pasos que se describen en la sección Requisitos previos de la VPC:

  1. En el proyecto de servicio, haz lo siguiente:

    1. Habilita la API de Datastream.
    2. Obtén la dirección de correo electrónico que se usa para la cuenta de servicio de Datastream. Las cuentas de servicio de Datastream se crean cuando realizas una de las siguientes acciones:

      • Creas un recurso de Datastream, como un perfil de conexión o una transmisión.
      • Crea una configuración de conectividad privada, selecciona tu VPC compartida y haz clic en Crear cuenta de servicio de Datastream. La cuenta de servicio se crea en el proyecto host.

      Para obtener la dirección de correo electrónico que se usa en la cuenta de servicio de Datastream, busca el número de proyecto en la página principal de la consola de Google Cloud . La dirección de correo electrónico de la cuenta de servicio es service-[project_number]@gcp-sa-datastream.iam.gserviceaccount.com.

  2. En el proyecto host, haz lo siguiente:

    1. Otorga el permiso del rol de Identity and Access Management (IAM) compute.networkAdmin a la cuenta de servicio de Datastream. Este rol solo es necesario cuando creas el intercambio de tráfico de VPC. Una vez que se establece el intercambio de tráfico, ya no necesitas el rol.

      Si tu organización no permite otorgar el permiso, crea un rol personalizado con los siguientes permisos mínimos para crear y borrar recursos de conexión privada:

    Para obtener más información sobre los roles personalizados, consulta Crea y administra roles personalizados.

Configura una VM de NAT

  1. Identifica la dirección IP de la instancia de Cloud SQL a la que Datastream debe conectarse.

  2. Identifica tu red de VPC. Esta es la red de VPC que está conectada a la red de VPC de Datastream a través del intercambio de tráfico entre redes de VPC.

  3. Si aún no lo hiciste, crea una configuración de conectividad privada en Datastream. Esto crea la conexión de intercambio de tráfico entre redes de VPC que conecta tu red de VPC y la red de VPC de Datastream. Toma nota del rango de direcciones IP que usa la configuración de conectividad privada de Datastream.

  4. Elige un tipo de máquina para la VM de NAT que crearás en el siguiente paso. Google Cloud aplica un límite máximo de ancho de banda de salida por instancia, para los paquetes enrutados por los siguientes saltos dentro de una red de VPC, según el tipo de máquina de la instancia de VM. Para obtener más información, consulta Salida a destinos a los que se puede enrutar dentro de una red de VPC y Ancho de banda máximo de salida por instancia.

  5. Crea la VM con NAT en tu red de VPC. Si tu red de VPC es una red de VPC compartida, puedes crear la VM de NAT en el proyecto host o en cualquier proyecto de servicio, siempre y cuando la interfaz de red de la VM de NAT esté en la red de VPC compartida.

    • Para minimizar el tiempo de ida y vuelta de la red, crea la VM de NAT en la misma región que Datastream.
    • En este ejemplo, se supone que la VM de NAT tiene una sola interfaz de red.
    • Ejecuta la secuencia de comandos en una distribución de Linux, por ejemplo, Debian 12.
    • Usa el siguiente script de inicio. La secuencia de comandos de inicio se ejecuta como raíz cada vez que se inicia la VM. Esta secuencia de comandos incluye comentarios que explican lo que hace cada línea. En la secuencia de comandos, reemplaza CLOUD_SQL_INSTANCE_IP por la dirección IP de la instancia de Cloud SQL y DATABASE_PORT por el puerto de destino que usa el software de la base de datos.
    #! /bin/bash
    
    export DB_ADDR=CLOUD_SQL_INSTANCE_IP
    export DB_PORT=DATABASE_PORT
    
    # Enable the VM to receive packets whose destinations do
    # not match any running process local to the VM
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    # Ask the Metadata server for the IP address of the VM nic0
    # network interface:
    md_url_prefix="http://169.254.169.254/computeMetadata/v1/instance"
    vm_nic_ip="$(curl -H "Metadata-Flavor: Google" ${md_url_prefix}/network-interfaces/0/ip)"
    
    # Clear any existing iptables NAT table entries (all chains):
    iptables -t nat -F
    
    # Create a NAT table entry in the prerouting chain, matching
    # any packets with destination database port, changing the destination
    # IP address of the packet to the SQL instance IP address:
    iptables -t nat -A PREROUTING \
         -p tcp --dport $DB_PORT \
         -j DNAT \
         --to-destination $DB_ADDR
    
    # Create a NAT table entry in the postrouting chain, matching
    # any packets with destination database port, changing the source IP
    # address of the packet to the NAT VM's primary internal IPv4 address:
    iptables -t nat -A POSTROUTING \
         -p tcp --dport $DB_PORT \
         -j SNAT \
         --to-source $vm_nic_ip
    
    # Save iptables configuration:
    iptables-save
  6. Crea una regla de firewall de permiso de entrada (o una regla en una política de firewall de red global, una política de firewall de red regional o una política de firewall jerárquica) con las siguientes características:

    • Dirección: entrada
    • Acción: Permitir
    • Parámetro de destino: Al menos la VM de NAT
    • Parámetro de origen: Es el rango de direcciones IP que usa la configuración de conectividad privada de Datastream.
    • Protocolo: TCP
    • Puerto: Debe incluir al menos el DATABASE_PORT
  7. La regla de firewall de permiso de salida implícita permite que la VM de NAT envíe paquetes a cualquier destino. Si tu red de VPC usa reglas de firewall de denegación de salida, es posible que debas crear una regla de firewall de permiso de salida para permitir que la VM de NAT envíe paquetes a la instancia de Cloud SQL. Si es necesaria una regla de permiso de salida, usa estos parámetros:

    • Dirección: salida
    • Acción: Permitir
    • Parámetro de destino: Al menos la VM de NAT
    • Parámetro de destino: Dirección IP de la instancia de Cloud SQL
    • Protocolo: TCP
    • Puerto: Debe incluir al menos el DATABASE_PORT
  8. Asegúrate de haber configurado tu instancia de Cloud SQL para que acepte conexiones desde la dirección IPv4 interna principal que usa la interfaz de red de tu VM de NAT. Para obtener instrucciones, consulta Autoriza con redes autorizadas en la documentación de Cloud SQL.

  9. Crea un perfil de conexión en Datastream. En los detalles de conexión del perfil, especifica la dirección IPv4 interna principal de la VM de NAT que creaste. Ingresa el puerto de la base de datos de origen en el campo de puerto del perfil de conexión.

Configura un par de VMs de NAT y un balanceador de cargas de red de transferencia interno

Para mejorar la confiabilidad de una solución de VM de NAT, considera la siguiente arquitectura, que usa un par de VMs de NAT y un balanceador de cargas de red de transferencia interno:

  1. Crea dos VMs de NAT en diferentes zonas de la misma región. Sigue las instrucciones para configurar una VM de NAT y crear cada VM, y coloca cada VM en su propio grupo de instancias no administrado zonal.

    Como alternativa, puedes crear un grupo de instancias administrado regional. En la plantilla del grupo de instancias administrado, incluye una secuencia de comandos de inicio como la secuencia de comandos de inicio de ejemplo en las instrucciones para configurar una VM de NAT.

  2. Crea un balanceador de cargas de red de transferencia interno cuyo servicio de backend use el grupo o los grupos de instancias del paso anterior como sus backends. Para ver un ejemplo de un balanceador de cargas de red de transferencia interno, consulta Configura un balanceador de cargas de red de transferencia interno con backends de grupos de instancias de VM.

    Cuando configures la verificación de estado del balanceador de cargas, puedes usar una verificación de estado de TCP que use un puerto TCP de destino que coincida con DATABASE_PORT. Los paquetes de verificación de estado se enrutan a CLOUD_SQL_INSTANCE_IP según la configuración de la VM de NAT. Como alternativa, puedes ejecutar un proceso local en la VM de NAT que responda a una verificación de estado de TCP o HTTP en un puerto personalizado.

  3. Crea reglas de firewall y configura redes autorizadas de Cloud SQL como se describe en las instrucciones para configurar una VM de NAT. Asegúrate de que las redes autorizadas de Cloud SQL incluyan la dirección IPv4 interna principal de ambas VMs de NAT.

  4. Cuando crees un perfil de conexión de Datastream, especifica la dirección IP de la regla de reenvío del balanceador de cargas de red de transferencia interno en los detalles de conexión del perfil.

¿Qué sigue?