El intercambio de tráfico entre redes de nube privada virtual (VPC) te permite transmitir actualizaciones de captura de datos modificados (CDC) desde una base de datos de MongoDB Atlas a Datastream a través de una red privada. Debido a que el intercambio de tráfico entre VPC no es transitivo, enrutas el tráfico a través de una máquina virtual (VM) de traducción de direcciones de red (NAT) de Compute Engine con reglas de firewall. También crearás un usuario de MongoDB, agregarás la dirección IP de la VM de NAT a tu lista de entidades permitidas de MongoDB Atlas y crearás un perfil de conexión. Esta configuración no proporciona alta disponibilidad. Si un nodo de MongoDB falla en la prueba del perfil de conexión, debes ejecutar de forma manual la secuencia de comandos de inicio en la VM de NAT.
Configura un usuario de la base de datos de MongoDB
Para usar Datastream con una instancia de MongoDB Atlas, primero debes crear un usuario de la base de datos y otorgarle privilegios de acceso:
- En el panel de MongoDB Atlas, en Seguridad, haz clic en Acceso a la base de datos.
- Haz clic en Usuario de base de datos nuevo y selecciona el método de autenticación de contraseña para tu usuario.
- Ingresa el nombre de usuario y la contraseña de tu usuario de Datastream.
- En Privilegios de usuario de la base de datos, selecciona Otorgar privilegios de usuario específicos.
- En Privilegios específicos, agrega el siguiente rol:
readAnyDatabase
- Haz clic en Agregar usuario.
Configura tu red de nube privada virtual
Identifica la red de nube privada virtual en tu proyecto de Google Cloud para intercambiar tráfico con Datastream y MongoDB Atlas. En esta página, se supone que usas la
VPC predeterminada y su subred, por ejemplo, la subred predeterminada en la región
us-central1.
- Asegúrate de que la red que identificaste no tenga rangos de direcciones IP superpuestos con tus redes de Datastream o MongoDB Atlas.
- Crea una configuración de conectividad privada
para intercambiar tráfico de Datastream con tu red de nube privada virtual:
- Asegúrate de seleccionar Intercambio de tráfico entre VPC en el menú desplegable Método de conectividad privada.
- Selecciona tu red de VPC
default. - Proporciona un rango de direcciones IP sin usar, por ejemplo,
10.0.0.0/29, para que Datastream lo use. - Toma nota del rango de IP asignado para tu regla de firewall de entrada.
- Configura una conexión de intercambio de tráfico de red en MongoDB Atlas para intercambiar tráfico de tu
red de nube privada virtual con tu red de MongoDB Atlas. Para obtener más información,
consulta Configura una conexión de intercambio de tráfico entre redes en la
documentación de MongoDB:
- Proporciona tu ID del proyecto de Google Cloud y el nombre de tu VPC predeterminada en MongoDB Atlas.
- Anota el ID del proyecto y el nombre de la VPC que te proporciona MongoDB Atlas para completar el intercambio de tráfico en el lado de Google Cloud .
- Después de crear la conexión, en tu proyecto de MongoDB Atlas, ve a la pestaña Acceso a la red > Intercambio de tráfico entre VPC y toma nota del bloque de enrutamiento entre dominios sin clases (CIDR) para tu regla de firewall de salida.
Crea una VM de NAT
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en Crear instancia.
En el campo Nombre, ingresa un nombre para la VM, por ejemplo,
mongo-nat-gateway.En el campo Región, selecciona una región dentro de tu VPC predeterminada, por ejemplo,
us-central1.En el menú de navegación, haz clic en Herramientas de redes.
En el campo Etiquetas de red, agrega una etiqueta, como
mongo-nat-vm. Las reglas de firewall usan esta etiqueta.En Reenvío de IP, selecciona la casilla de verificación Habilitar.
En Interfaces de red, selecciona tu VPC predeterminada y su subred, por ejemplo,
defaultenus-central1.En el menú de navegación, haz clic en Opciones avanzadas.
En la sección Automatización, pega la siguiente secuencia de comandos en el campo Secuencia de comandos de inicio. Reemplaza PRIVATE_SRV_RECORD por el registro SRV privado de tu clúster de MongoDB Atlas, por ejemplo,
my-cluster-pri.abcde.mongodb.net.#!/bin/bash # --- Startup script for MongoDB Atlas NAT gateway --- # This script has two main functions: # 1. Resolves the IP address of a MongoDB Atlas node from its SRV record. # 2. Configures iptables to forward traffic to the resolved MongoDB IP. # -------------------------------------------------------------------------- # --- Part 1: Resolve MongoDB node IP address --- # # EDIT THIS LINE to match your Mongo Atlas private SRV record # export SRV_RECORD=PRIVATE_SRV_RECORD echo "Resolving SRV record for: $SRV_RECORD" # Function to install DNS utilities if needed install_dns_tools() { echo "'dig' not found. Attempting to install DNS utilities..." if command -v apt-get &> /dev/null; then # Wait for any existing apt processes to finish before trying to install packages. # This is common on VM startup where the system might be running automatic updates. echo "Checking for and waiting on existing apt-get processes..." while fuser /var/lib/apt/lists/lock /var/lib/dpkg/lock /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do echo "Another apt process is running. Waiting 10 seconds..." sleep 10 done echo "Apt lock is free. Proceeding with installation." apt-get update && apt-get install -y dnsutils else echo "Error: Could not find apt-get to install DNS utilities." exit 1 fi # Verify that dig is now available if ! command -v dig &> /dev/null; then echo "Error: Failed to install DNS utilities." exit 1 fi } # Check if 'dig' is installed. If not, install it. if ! command -v dig &> /dev/null; then install_dns_tools fi echo "Using 'dig' for DNS resolution." # The `+short` option provides a concise output. # We use `awk` to grab the 4th column (the hostname) and `head` to get the first one. NODE_HOSTNAME=$(dig +short SRV "_mongodb._tcp.${SRV_RECORD}" | awk '{print $4}' | head -n 1) if [ -n "$NODE_HOSTNAME" ]; then NODE_IP=$(dig +short A "$NODE_HOSTNAME") fi # Check if the SRV lookup was successful and we got a hostname. if [ -z "$NODE_HOSTNAME" ]; then echo "Error: Could not resolve SRV record. Check the hostname and your network connection." exit 1 fi echo "Found node hostname: $NODE_HOSTNAME" # Check if the A record lookup was successful. if [ -z "$NODE_IP" ]; then echo "Error: Could not resolve the IP address for node: $NODE_HOSTNAME" exit 1 fi # 3. Print the final result of the lookup. echo "Successfully resolved IP address of a node: $NODE_IP" # --- Part 2: Configure iptables for NAT --- # Substitute the resolved IP address into the DB_ADDR variable. export DB_ADDR=$NODE_IP export DB_PORT=27017 # 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 MongoDB 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 echo "Startup script completed successfully. iptables rules are configured and saved."
Haz clic en Crear para iniciar la VM.
Después de que se ejecute la VM, anota su dirección IP interna, por ejemplo,
10.128.0.2.
Crea reglas de firewall de entrada y salida
Debes crear dos reglas de firewall en tu red de VPC.
Crea una regla de firewall de entrada con estas características:
- Nombre: INGRESS_RULE_NAME.
- Dirección: entrada
- Acción: permitir
- Parámetro de destino: la etiqueta de destino
mongo-nat-vm - Parámetro de origen: Es el rango de direcciones IP que usa la configuración de conectividad privada de Datastream, por ejemplo,
10.0.0.0/29 - Protocolo: TCP
- Puerto:
27017
Crea una regla de firewall de salida con estas características:
- Nombre: EGRESS_RULE_NAME.
- Dirección: Salida
- Acción: permitir
- Parámetro de destino: la etiqueta de destino
mongo-nat-vm - Parámetro de destino: el bloque CIDR de MongoDB Atlas, por ejemplo,
192.168.240.0/21 - Protocolo: TCP
- Puerto:
27017
Configura listas de IPs permitidas en MongoDB Atlas
Permite la dirección IP interna de la VM de NAT en la configuración de seguridad de MongoDB Atlas:
- Accede a tu cuenta de MongoDB Atlas.
- En el menú de navegación, haz clic en Seguridad y, luego, en Acceso a la red.
- Haz clic en Agregar dirección IP.
- En el campo Entrada de la lista de acceso, ingresa la dirección IP interna de la instancia de VM de NAT que creaste en tu red de VPC.
- Haz clic en Confirmar y espera a que el estado cambie a Activo.
Crea el perfil de conexión
Crea un perfil de conexión de Datastream para tu base de datos.
Ve a la página Perfiles de conexión en la consola de Google Cloud .
Haz clic en Crear perfil y selecciona MongoDB.
En el campo Nombre de host, ingresa la dirección IP interna de la instancia de VM de NAT que creaste en tu red de VPC.
En el campo Puerto, escribe
27017.Ingresa el nombre de usuario y la contraseña de tu usuario de base de datos.
Agrega las etiquetas
tlsytls_allow_invalid_hostnames, y establece sus valores entrue. Para obtener más información sobre cómo configurar etiquetas, consulta Crea un perfil de conexión para una base de datos de MongoDB.Selecciona Conectividad privada como tu método de conectividad.
Selecciona la configuración de conectividad privada que creaste.
Haz clic en Crear para guardar el perfil de conexión.
Ejecuta una prueba para verificar la conexión a tu base de datos.