En este instructivo, se describe cómo usar el intercambio de tráfico entre redes de VPC para implementar una arquitectura de concentrador y radio.
Este instructivo está destinado a ingenieros de redes de nube y profesionales de operaciones que desean implementar una arquitectura de concentrador y radio en sus entornos de Google Cloud mediante dispositivos centralizados que consisten en máquinas virtuales de Compute Engine. En este instructivo, implementarás estas máquinas virtuales como puertas de enlace de NAT, pero puedes usar el mismo enfoque para otras funciones, como firewalls de última generación. Además, se supone que estás familiarizado con las redes de VPC y con Compute Engine.
Arquitectura
En esta arquitectura, un conjunto de redes de VPC de radio se comunican con el exterior a través de una red de VPC de concentrador en la que el tráfico se enruta a través de un grupo centralizado de dispositivos, en este caso, puertas de enlace de traducción de direcciones de red (NAT). Las rutas relevantes se exportan desde la red de VPC del concentrador hacia las redes de VPC del radio. Las puertas de enlace de NAT se configuran como backends de un balanceador de cargas interno con una ruta predeterminada nueva, que tiene el balanceador de cargas de red de transferencia interno de Cloud Load Balancing como próximo salto.
Puedes lograr el mismo tipo de distribución de cargas y alta disponibilidad mediante el uso de múltiples rutas con enrutamiento de varias rutas de igual costo (ECMP). Sin embargo, usar el balanceador de cargas de red de transferencia interno tiene las siguientes ventajas:
- El tráfico solo se reenvía a instancias en buen estado cuando dependes de las verificaciones de estado. Con ECMP, el tráfico se reenvía a todas las instancias activas a las que apunta la ruta; el uso del balanceador de cargas de red de transferencia interno elimina la posibilidad de que haya rutas no usadas. Además, no es necesario limpiar las rutas cuando se finalizan o se reinician las instancias.
- Hay una conmutación por error potencialmente más rápida, ya que puedes ajustar los cronómetros de la verificación de estado. Si usas grupos de instancias administrados y reparación automática, puedes personalizar los cronómetros de la verificación de estado, pero se usan para volver a crear la instancia, no para enrutar el tráfico.
Google también ofrece Cloud NAT como un servicio administrado, lo que proporciona alta disponibilidad sin intervención ni administración de los usuarios. Sin embargo, Cloud NAT no se admite en este caso de uso porque la configuración de NAT no se importa a una red de intercambio de tráfico.
En el siguiente diagrama, se muestra la topología que compilaste en este instructivo.
La topología consiste en una red de VPC de concentrador y dos redes de VPC de radio que se vinculan con la red de VPC de concentrador mediante el intercambio de tráfico entre redes de VPC. La red de VPC de concentrador tiene dos instancias de puerta de enlace de NAT detrás de un balanceador de cargas de red de transferencia interno.
Una ruta estática predeterminada (0/0 NAT-GW-ILB
) apunta al balanceador de cargas de red de transferencia interno como el próximo salto. Esta ruta estática predeterminada se exporta a través del intercambio de tráfico entre redes de VPC mediante rutas personalizadas.
Objetivos
- Crear varias redes de VPC e intercambiarlas mediante una arquitectura de concentrador y radio
- Crear y configurar puertas de enlace NAT en la red de VPC del concentrador.
- Establece y configura el balanceador de cargas de red de transferencia interno como el próximo salto.
- Verificar la conectividad de las redes de VPC de radio a la Internet pública
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
En este instructivo, ejecutarás todos los comandos desde Cloud Shell.
Configura tu entorno
En Cloud Shell, asegúrate de estar trabajando en el proyecto de Google Cloud que creaste o que seleccionaste. Reemplaza
project-id
por tu proyecto de Google Cloud.gcloud config set project project-id export PROJECT_ID=`gcloud config list --format="value(core.project)"`
Establece la región y la zona de procesamiento predeterminadas.
gcloud config set compute/region us-central1 gcloud config set compute/zone us-central1-c export REGION=us-central1 export ZONE=us-central1-c
En este instructivo, la región es
us-central1
, y la zona esus-central1-c
.
Crea redes y subredes de VPC
En Cloud Shell, crea la red y la subred de VPC de concentrador:
gcloud compute networks create hub-vpc --subnet-mode custom gcloud compute networks subnets create hub-subnet1 \ --network hub-vpc --range 10.0.0.0/24
Crea las redes de VPC de radio, llamadas
spoke1-vpc
yspoke2-vpc
, y una subred en cada una:gcloud compute networks create spoke1-vpc --subnet-mode custom gcloud compute networks create spoke2-vpc --subnet-mode custom gcloud compute networks subnets create spoke1-subnet1 \ --network spoke1-vpc --range 192.168.1.0/24 gcloud compute networks subnets create spoke2-subnet1 \ --network spoke2-vpc --range 192.168.2.0/24
Crea reglas de firewall en la red de VPC de concentrador y en las redes de VPC de radio. Estas reglas permiten el tráfico interno (TCP/80 y 443, ICMP y UDP/53) de los rangos de RFC 1918 especificados:
gcloud compute firewall-rules create hub-vpc-web-ping-dns \ --network hub-vpc --allow tcp:80,tcp:443,icmp,udp:53 \ --source-ranges 10.0.0.0/24,192.168.1.0/24,192.168.2.0/24 gcloud compute firewall-rules create spoke1-vpc-web-ping-dns \ --network spoke1-vpc --allow tcp:80,tcp:443,icmp,udp:53 \ --source-ranges 10.0.0.0/24,192.168.1.0/24 gcloud compute firewall-rules create spoke2-vpc-web-ping-dns \ --network spoke2-vpc --allow tcp:80,tcp:443,icmp,udp:53 \ --source-ranges 10.0.0.0/24,192.168.2.0/24
Crea reglas de firewall en la red de VPC de concentrador y en las redes de VPC de radio a fin de permitir que IAP para la conexión SSH acceda a todas tus máquinas virtuales:
gcloud compute firewall-rules create hub-vpc-iap \ --network hub-vpc --allow tcp:22 \ --source-ranges 35.235.240.0/20 gcloud compute firewall-rules create spoke1-vpc-iap \ --network spoke1-vpc --allow tcp:22 \ --source-ranges 35.235.240.0/20 gcloud compute firewall-rules create spoke2-vpc-iap \ --network spoke2-vpc --allow tcp:22 \ --source-ranges 35.235.240.0/20
En este instructivo, se usa Identity-Aware Proxy (IAP) para la conexión SSH. Para obtener más información, consulta Conéctate a instancias que no tienen direcciones IP externas.
Crea una regla de firewall para permitir las verificaciones de estado de grupos de instancias de reparación automática en la red de VPC de concentrador:
gcloud compute firewall-rules create hub-vpc-health-checks \ --network hub-vpc --allow tcp:443 --target-tags nat-gw \ --source-ranges 130.211.0.0/22,35.191.0.0/16
Crea las instancias y las rutas requeridas
En Cloud Shell, crea la plantilla de instancias para la puerta de enlace de NAT que tiene una secuencia de comandos de inicio que configura la puerta de enlace de NAT:
gcloud compute instance-templates create \ hub-nat-gw-ilbnhop-template \ --network hub-vpc \ --subnet hub-subnet1 \ --machine-type n1-standard-2 --can-ip-forward \ --tags nat-gw --scopes default,compute-rw \ --metadata startup-script='#! /bin/bash apt-get update # Enable IP forwarding: echo 1 > /proc/sys/net/ipv4/ip_forward echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/20-example.conf # Read VM network configuration: md_vm="http://metadata.google.internal/computeMetadata/v1/instance/" md_net="$md_vm/network-interfaces" nic0_gw="$(curl $md_net/0/gateway -H "Metadata-Flavor:Google")" nic0_mask="$(curl $md_net/0/subnetmask -H "Metadata-Flavor:Google")" nic0_addr="$(curl $md_net/0/ip -H "Metadata-Flavor:Google")" nic0_id="$(ip addr show | grep $nic0_addr | tail -c 5)" # Use a web server to pass the health check for this example. # In production, use a more complete test. sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo a2enmod ssl echo "Example web page to pass health check" | \ tee /var/www/html/index.html sudo systemctl restart apache2 # Enable IP masquerading iptables -t nat -A POSTROUTING -o $nic0_id -j MASQUERADE'
En este instructivo, se usa
n1-standard-2
como el tipo de instancia, pero puedes usar cualquier otro número o tamaño de puerta de enlace que desees. Asegúrate de tener en cuenta factores como el ancho de banda de salida máximo por VM.Crea una verificación de estado de HTTP:
gcloud compute health-checks create http nat-gw-ilbnhop-health-check \ --region us-central1 \ --port 80
Crea un grupo de instancias regional con dos instancias que se distribuyen en una sola región:
gcloud compute instance-groups managed create \ hub-nat-gw-ilbnhop-mig \ --region us-central1 --size=2 \ --template=hub-nat-gw-ilbnhop-template \ --health-check nat-gw-ilbnhop-health-check \ --initial-delay 15
En este instructivo, la demora inicial se establece en 15 segundos. En una implementación de producción, personaliza esta configuración de acuerdo con tus requisitos. En este instructivo, no se usan las políticas de ajuste de escala automático.
Crea un servicio de backend y agrega el siguiente grupo de instancias:
gcloud compute backend-services create hub-nat-gw-ilbnhop-backend \ --load-balancing-scheme=internal \ --protocol=tcp \ --health-checks=nat-gw-ilbnhop-health-check gcloud compute backend-services add-backend \ hub-nat-gw-ilbnhop-backend \ --instance-group=hub-nat-gw-ilbnhop-mig \ --instance-group-region=us-central1
Crea una regla de reenvío:
gcloud compute forwarding-rules create \ hub-nat-gw-ilbnhop \ --load-balancing-scheme=internal \ --network=hub-vpc \ --subnet=hub-subnet1 \ --address=10.0.0.10 \ --ip-protocol=TCP \ --ports=all \ --backend-service=hub-nat-gw-ilbnhop-backend \ --backend-service-region=us-central1 \ --service-label=hub-nat-gw-ilbnhop
Aunque la regla de reenvío se define solo con TCP, cuando usas el balanceador de cargas de red de transferencia interno como el próximo salto, la regla de reenvío reenvía todo el tráfico a todos los puertos en las VMs de backend. El balanceador de cargas de red de transferencia interno es un balanceador de cargas regional.
Crea una ruta nueva con la regla de reenvío como siguiente salto:
gcloud compute routes create hub-nat-gw-ilbnhop \ --network=hub-vpc \ --destination-range=0.0.0.0/0 \ --next-hop-ilb=hub-nat-gw-ilbnhop \ --next-hop-ilb-region=us-central1 \ --priority=800
Puedes especificar etiquetas de red para que la ruta del siguiente salto solo se aplique a las instancias de cliente que se configuraron con la etiqueta, pero las etiquetas no se exportan ni se importan a través del intercambio de tráfico entre redes de VPC.
Borra la ruta predeterminada de la VPC de concentrador:
export hub_default_route=$(gcloud compute routes list \ --format="value(name)" --filter="network:hub-vpc AND \ nextHopGateway:default-internet-gateway" | head -n 1) gcloud compute routes delete $hub_default_route -q
Crea una nueva ruta etiquetada para permitir el tráfico solo desde las puertas de enlace NAT:
gcloud compute routes create hub-default-tagged \ --network hub-vpc --destination-range 0.0.0.0/0 \ --next-hop-gateway default-internet-gateway \ --priority 700 --tags nat-gw
Borra las rutas predeterminadas a Internet de la VPC de cada radio:
export spoke1_default_route=$(gcloud compute routes list \ --format="value(name)" --filter="network:spoke1-vpc AND \ nextHopGateway:default-internet-gateway") gcloud compute routes delete $spoke1_default_route -q export spoke2_default_route=$(gcloud compute routes list \ --format="value(name)" \ --filter="network:spoke2-vpc AND nextHopGateway:default-internet-gateway") gcloud compute routes delete $spoke2_default_route -q
Cuando hay un conflicto entre las rutas locales y las importadas, las locales siempre tienen prioridad. Para obtener más información, consulta Orden de enrutamiento.
Crea VMs de cliente:
gcloud compute instances create spoke1-client \ --subnet=spoke1-subnet1 --no-address \ --metadata startup-script='#! /bin/bash apt-get update apt-get install dnsutils -y' gcloud compute instances create spoke2-client \ --subnet=spoke2-subnet1 --no-address \ --metadata startup-script='#! /bin/bash apt-get update apt-get install dnsutils -y'
Crea las conexiones de intercambio de tráfico entre redes de VPC
El intercambio de tráfico entre redes de VPC es bidireccional y, por lo tanto, debe definirse en ambos extremos. Una red de VPC puede intercambiarse con varias redes de VPC, pero se aplican limitaciones. Para llegar a la ruta predeterminada mediante el intercambio de tráfico entre redes de VPC, usa la función de importación y exportación de rutas personalizadas por medio del intercambio de tráfico entre redes de VPC.
Para este instructivo, debes crear todas las redes de VPC en el mismo proyecto de Google Cloud.
En Cloud Shell, crea las conexiones de intercambio de tráfico entre redes de VPC desde la red de VPC del concentrador hacia las redes de VPC de radio con la marca de exportación de ruta habilitada:
gcloud compute networks peerings create hub-to-spoke1 \ --network hub-vpc --peer-network spoke1-vpc \ --peer-project $PROJECT_ID \ --export-custom-routes gcloud compute networks peerings create hub-to-spoke2 \ --network hub-vpc --peer-network spoke2-vpc \ --peer-project $PROJECT_ID \ --export-custom-routes
Crea una conexión de intercambio de tráfico entre redes de VPC desde la red de VPC
spoke1
hacia la red de VPC del concentrador con la marca de importación de ruta habilitada:gcloud compute networks peerings create spoke1-to-hub \ --network spoke1-vpc --peer-network hub-vpc \ --peer-project $PROJECT_ID \ --import-custom-routes
Crea una conexión de intercambio de tráfico entre redes de VPC desde la red de VPC
spoke2
hacia la red de VPC del concentrador con la marca de importación de ruta habilitada:gcloud compute networks peerings create spoke2-to-hub \ --network spoke2-vpc --peer-network hub-vpc \ --peer-project $PROJECT_ID \ --import-custom-routes
Verifica la propagación de las rutas y la conectividad
En Cloud Shell, verifica que las rutas estáticas se hayan creado de forma correcta como parte de las secuencias de comandos de inicio:
gcloud compute routes list --filter="network:hub-vpc"
Asegúrate de que las rutas
hub-default-tagged
yhub-nat-gw-ilbanhop
estén presentes en el resultado:NAME NETWORK DEST_RANGE NEXT_HOP PRIORITY default-route-13a4b635b5eab48c hub-vpc 10.0.0.0/24 hub-vpc 1000 hub-default-tagged hub-vpc 0.0.0.0/0 default-internet-gateway 700 hub-nat-gw-ilbanhop hub-vpc 0.0.0.0/0 10.0.0.10 800 peering-route-3274f1257a9842a0 hub-vpc 192.168.2.0/24 hub-to-spoke2 1000 peering-route-798c5777f13094bc hub-vpc 192.168.1.0/24 hub-to-spoke1 1000
Verifica la tabla de enrutamiento
spoke1-vpc
para asegurarte de que la ruta predeterminada se haya importado de forma correcta:gcloud compute routes list --filter="network:spoke1-vpc"
Asegúrate de que haya una ruta que comience con
peering-route
, en la que0.0.0.0/0
sea el valorDEST_RANGE
en el resultado:NAME NETWORK DEST_RANGE NEXT_HOP PRIORITY default-route-75f6ea8f5fc54813 spoke1-vpc 192.168.1.0/24 spoke1-vpc 1000 peering-route-6c7f130b860bfd39 spoke1-vpc 10.0.0.0/24 spoke1-to-hub 1000 peering-route-9d44d362f98afbd8 spoke1-vpc 0.0.0.0/0 spoke1-to-hub 800
Conéctate a uno de los clientes mediante SSH a través de IAP:
gcloud compute ssh spoke1-client --tunnel-through-iap
Para verificar la conectividad, prueba el DNS público de Google a través de la puerta de enlace de NAT:
sudo hping3 -S -p 80 -c 3 dns.google
Debido a que el balanceador de cargas de red de transferencia interno es compatible con TCP y UDP, no puedes verificar la conectividad a Internet mediante un ping basado en ICMP. Por lo tanto, debes usar una herramienta como hping3.
El resultado es similar a este:
HPING dns.google (eth0 8.8.4.4): S set, 40 headers + 0 data bytes len=44 ip=8.8.4.4 ttl=126 DF id=0 sport=80 flags=SA seq=0 win=65535 rtt=4.6 ms len=44 ip=8.8.4.4 ttl=126 DF id=0 sport=80 flags=SA seq=1 win=65535 rtt=4.4 ms len=44 ip=8.8.4.4 ttl=126 DF id=0 sport=80 flags=SA seq=2 win=65535 rtt=4.3 ms --- dns.google hping statistic --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 4.3/4.4/4.6 ms
Verifica la dirección IP pública que usas para comunicarte con Internet:
curl ifconfig.co
El resultado muestra una dirección IP pública de una de las instancias de la puerta de enlace NAT. Si vuelves a ejecutar el comando, el resultado podría mostrar una dirección IP pública diferente porque las conexiones se distribuyen mediante la afinidad de sesiones del balanceo de cargas interno configurado (de forma predeterminada, la IP, el protocolo y el puerto de cliente).
El intercambio de tráfico entre redes de VPC no es transitivo, por lo que no hay conectividad entre las redes de VPC de radio a través del intercambio de tráfico entre redes de VPC.
Consideraciones para un entorno de producción
La configuración que debes crear en este instructivo proporciona dos puertas de enlace NAT en una sola región. Sin embargo, el balanceo de cargas de ECMP no es perfecto, y un flujo individual no se distribuye entre varios vínculos, que es lo que se necesita cuando se usan dispositivos con estado, como firewalls de nueva generación.
Para implementar esta configuración en el entorno de producción, ten en cuenta los siguientes puntos:
- Esta configuración es la más adecuada para los vínculos de salida efímeros o sin estado. Si el tamaño del grupo de puertas de enlace de NAT cambia, es posible que se vuelvan a equilibrar las conexiones TCP, lo que podría provocar el restablecimiento de una conexión establecida.
- Los nodos no se actualizan de forma automática, por lo que si una instalación predeterminada de Debian tiene una vulnerabilidad de seguridad, debes actualizar la imagen manualmente.
- Si tienes VMs en varias regiones, debes configurar puertas de enlace de NAT en cada región.
- El ancho de banda por puerta de enlace puede variar según el tipo de hardware. Asegúrate de tener en cuenta factores como el ancho de banda de salida máximo por VM. Durante una falla de la puerta de enlace, el tráfico se distribuye a las puertas de enlace restantes. Debido a que los flujos de ejecución no se reprograman, el tráfico no se restablece de forma inmediata cuando la puerta de enlace vuelve a estar en línea. Así que asegúrate de permitir suficiente sobrecarga para el dimensionamiento.
- Para recibir alertas de resultados inesperados, usa Cloud Monitoring para supervisar los grupos de instancias administrados y el tráfico de red.
Limpia
La manera más fácil de eliminar la facturación es borrar el proyecto de Google Cloud que creaste para el instructivo. Como alternativa, puedes borrar los recursos individuales.
Borra el proyecto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Borra los recursos individuales
Si deseas conservar el proyecto de Google Cloud, puedes borrar los recursos que creaste para este instructivo.
Borra las conexiones de intercambio de tráfico entre redes de VPC:
gcloud compute networks peerings delete spoke2-to-hub \ --network spoke2-vpc -q gcloud compute networks peerings delete spoke1-to-hub \ --network spoke1-vpc -q gcloud compute networks peerings delete hub-to-spoke1 \ --network hub-vpc -q gcloud compute networks peerings delete hub-to-spoke2 \ --network hub-vpc -q
Borra instancias, recursos del balanceador de cargas, plantillas y rutas:
gcloud compute instances delete spoke1-client \ --zone=us-central1-c -q gcloud compute instances delete spoke2-client \ --zone=us-central1-c -q gcloud compute routes delete hub-nat-gw-ilbnhop -q gcloud compute forwarding-rules delete hub-nat-gw-ilbnhop -q gcloud compute backend-services delete -q hub-nat-gw-ilbnhop-backend -q gcloud compute instance-groups managed delete hub-nat-gw-ilbnhop-mig \ --region us-central1 -q gcloud compute health-checks delete nat-gw-ilbnhop-health-check -q gcloud compute instance-templates delete hub-nat-gw-ilbnhop-template -q gcloud compute routes delete hub-default-tagged -q
Borra las reglas de firewall, las subredes y las redes de VPC:
gcloud compute firewall-rules delete spoke2-vpc-iap -q gcloud compute firewall-rules delete spoke2-vpc-web-ping-dns -q gcloud compute firewall-rules delete spoke1-vpc-iap -q gcloud compute firewall-rules delete spoke1-vpc-web-ping-dns -q gcloud compute firewall-rules delete hub-vpc-iap -q gcloud compute firewall-rules delete hub-vpc-web-ping-dns -q gcloud compute firewall-rules delete hub-vpc-health-checks -q gcloud compute networks subnets delete spoke1-subnet1 \ --region us-central1 -q gcloud compute networks subnets delete spoke2-subnet1 \ --region us-central1 -q gcloud compute networks subnets delete hub-subnet1 \ --region us-central1 -q gcloud compute networks delete spoke1-vpc -q gcloud compute networks delete spoke2-vpc -q gcloud compute networks delete hub-vpc -q
¿Qué sigue?
- Lee sobre las prácticas recomendadas y las arquitecturas de referencia para el diseño de VPC.
- Revisa la documentación de intercambio de tráfico entre redes de VPC y de balanceadores de cargas de red de transferencia internos como próximos saltos.
- Lee sobre las configuraciones especiales para instancias de VM.