Gestionar la superposición de destinos
En esta página se describe cómo pueden gestionar los administradores de redes de productores la superposición de destinos en una red de nube privada virtual (VPC) que utiliza una interfaz de Private Service Connect.
Google Cloud asegura que los intervalos de direcciones IP de las subredes asignadas a las interfaces de red de la misma instancia de máquina virtual no puedan tener intervalos de direcciones IP superpuestos. Sin embargo, las subredes de las redes de VPC del consumidor y del productor pueden superponerse, como se muestra en la figura 1. Cuando se usa una interfaz de Private Service Connect con intervalos de direcciones IP de destino superpuestos, es necesario realizar una configuración adicional para asegurarse de que el tráfico llegue al destino correcto en la red prevista.
Los comandos descritos en esta página muestran cómo actualizar temporalmente el enrutamiento de una máquina virtual que usa el sistema operativo Debian. Para actualizar la VM de forma permanente o configurar una VM que tenga un sistema operativo diferente, consulta la documentación pública del sistema operativo.
Subnet-a
de una red de VPC de productor se solapa con subnet-c
de una red de VPC de consumidor porque ambas subredes usan el mismo intervalo de direcciones IP. Una VM de productor debe poder acceder a 10.0.1.5
en ambas redes.Puede gestionar los intervalos de direcciones IP de destino superpuestos de las siguientes formas, que se describen en detalle en esta página:
- Usa espacios de nombres de red para crear tablas de enrutamiento independientes para cada aplicación.
- Aplica el enrutamiento basado en políticas a la VM de tu interfaz para dirigir el tráfico en función de los puertos de destino.
También se pueden usar los siguientes métodos para gestionar el solapamiento de destinos, pero no se describen en esta página:
- Usa una biblioteca de sockets y
bind()
para controlar el enrutamiento. - Usa un espacio de direcciones IP que no se solape en absoluto con la red del productor.
- Si las direcciones IP superpuestas del lado del productor solo son para los endpoints de las APIs propias, puedes configurar Acceso privado de Google para hosts on-premise.
- Usa el enrutamiento y reenvío virtuales (VRF) para aislar espacios de direcciones IP que se solapan. Asigna una instancia de VRF a cada interfaz de Private Service Connect. Configura las rutas predeterminadas de cada instancia de VRF para asegurarte de que el tráfico llegue al destino previsto.
- Usa eBPF para personalizar reglas de enrutamiento avanzadas en función de criterios distintos de la dirección IP. Este método se recomienda en los casos en los que las opciones anteriores no son viables.
Gestionar la superposición de direcciones de destino mediante espacios de nombres de red
Puedes gestionar la superposición de direcciones de destino mediante espacios de nombres de red. Este enfoque funciona bien cuando algunas aplicaciones de una VM de productor solo necesitan acceder a cargas de trabajo de consumidor y otras aplicaciones de la VM de productor solo necesitan acceder a cargas de trabajo de productor.
Para gestionar la superposición de direcciones de destino mediante espacios de nombres de red, sigue estos pasos:
Conéctate a la VM que tiene tu interfaz de Private Service Connect.
Busca el nombre del SO invitado de tu interfaz de Private Service Connect.
Para crear un espacio de nombres de red para el tráfico enlazado al consumidor, usa el siguiente comando:
sudo ip netns add consumer-ns
Mueve la interfaz de Private Service Connect al espacio de nombres de la red del consumidor. Ejecuta los siguientes comandos por separado:
sudo ip link set OS_INTERFACE_NAME netns consumer-ns
sudo ip netns exec consumer-ns ip link set OS_INTERFACE_NAME up
Sustituye
OS_INTERFACE_NAME
por el nombre del SO invitado de tu interfaz Private Service Connect que encontraste en un paso anterior.Restaura la dirección IP de la interfaz de Private Service Connect:
sudo ip netns exec consumer-ns ip addr add INTERFACE_IP/32 dev OS_INTERFACE_NAME
Sustituye
INTERFACE_IP
por la dirección IP de tu interfaz Private Service Connect.Valida los cambios en tu interfaz de Private Service Connect:
sudo ip netns exec consumer-ns ip a
Verifica que el nombre del SO invitado de tu interfaz de Private Service Connect aparezca en el resultado del comando. Comprueba que la interfaz tiene la dirección IP correcta.
Añade una ruta a la dirección IP de la pasarela:
sudo ip netns exec consumer-ns ip route add GATEWAY_IP dev OS_INTERFACE_NAME scope link
Sustituye
GATEWAY_IP
por la dirección IP de la pasarela predeterminada de la subred de tu interfaz de Private Service Connect.Añade una ruta predeterminada para tu interfaz Private Service Connect:
sudo ip netns exec consumer-ns ip route add default via GATEWAY_IP dev OS_INTERFACE_NAME
Valida la tabla de rutas del espacio de nombres
consumer-ns
:sudo ip netns exec consumer-ns ip route
Asegúrate de que la tabla de enrutamiento tenga una entrada con el siguiente formato:
default via GATEWAY_IP dev OS_INTERFACE_NAME
Para verificar que tu interfaz puede acceder a las VMs de cada parte del intervalo de direcciones IP superpuesto, haz lo siguiente:
Asegúrate de que las reglas de cortafuegos estén configuradas para permitir el tráfico de entrada
ICMP
a tus VMs de destino.Envía un ping
ICMP
desde la VM de tu interfaz a una VM de consumidor que esté en el intervalo de direcciones IP superpuesto. Usa tu espacio de nombres de consumidor:sudo ip netns exec consumer-ns ping CONSUMER_IP_ADDRESS
Sustituye
CONSUMER_IP_ADDRESS
por la dirección IP de una VM de consumidor del intervalo de direcciones IP superpuesto.Envía un ping
ICMP
desde la máquina virtual de tu interfaz a una máquina virtual de productor que esté en el intervalo de direcciones IP superpuesto. Usa el espacio de nombres predeterminado:ping PRODUCER_IP_ADDRESS
Sustituye
PRODUCER_IP_ADDRESS
por la dirección IP de una máquina virtual de productor del intervalo de direcciones IP superpuesto.
Gestionar la superposición de direcciones de destino con el enrutamiento basado en políticas
Puedes gestionar la superposición de direcciones de destino configurando el enrutamiento basado en políticas en el sistema operativo de la máquina virtual de tu interfaz. Este método funciona bien cuando la misma aplicación necesita acceder a cargas de trabajo que están en las redes de VPC del consumidor y del productor, pero debes repetir el procedimiento para cada puerto diferente al que quieras acceder en el intervalo de IP superpuesto.
Cuando configuras el enrutamiento basado en políticas para gestionar la superposición de destinos, eliges los puertos de destino que se van a usar en las aplicaciones de consumidor. El tráfico destinado a uno de estos puertos fluye a través de tu interfaz de Private Service Connect a la subred del consumidor, mientras que el resto del tráfico fluye a través de la interfaz predeterminada a la subred del productor.
Conéctate a la VM de tu interfaz de Private Service Connect.
Si el comando
iproute2
no está disponible, instálalo.Asegúrate de que puedes escribir en el siguiente archivo:
/etc/iproute2/rt_tables
Crea una tabla de rutas. Añade una ruta predeterminada para tu interfaz de Private Service Connect:
echo "200 pscnet" >> /etc/iproute2/rt_tables \ sudo ip route add default dev OS_INTERFACE_NAME table pscnet
Sustituye
OS_INTERFACE_NAME
por el nombre del SO invitado de tu interfaz de Private Service Connect. Por ejemplo,ens5
.Añade una ruta al intervalo de subredes de consumidor superpuesto a través de tu pasarela predeterminada:
sudo ip route add CONSUMER_SUBNET_RANGE via GATEWAY_IP dev OS_INTERFACE_NAME table pscnet
Haz los cambios siguientes:
CONSUMER_SUBNET_RANGE
: el intervalo de direcciones IP de tu subred de consumidor.GATEWAY_IP
: la dirección IP de la pasarela predeterminada de la subred de tu interfaz de Private Service Connect.
Actualiza la tabla de rutas para que los paquetes de salida de esta VM usen la dirección IP de tu interfaz como dirección IP de origen:
sudo ip route add GATEWAY_IP src INTERFACE_IP dev OS_INTERFACE_NAME table pscnet
Sustituye
INTERFACE_IP
por la dirección IP de tu interfaz Private Service Connect.Añade una regla de IP que se aplique a todo el tráfico destinado al puerto de destino de tu aplicación de consumidor:
sudo ip rule add dport CONSUMER_PORT table pscnet
Sustituye
CONSUMER_PORT
por el puerto que has configurado para el tráfico a tu VM de consumidor.Para comprobar que un paquete se enruta a la VM correcta en función de su puerto de destino, haz lo siguiente:
- Crea máquinas virtuales de prueba en las redes del productor y del consumidor que usen la misma dirección IP del intervalo superpuesto.
- Configura un servidor HTTP en cada VM de prueba. Configura la VM de prueba del consumidor para que escuche en el puerto que has configurado para la aplicación de consumidor. Configura la VM de prueba del productor para que escuche en un puerto diferente al que has configurado para la aplicación de consumidor.
- Asegúrate de que las reglas de cortafuegos estén configuradas para permitir el tráfico HTTP a tus VMs de prueba.
Con el puerto que has configurado para tu aplicación de consumidor, haz una solicitud
GET
a la dirección IP de prueba y, a continuación, comprueba que has llegado a la instancia correcta:curl TEST_IP_ADDRESS:CONSUMER_PORT
Haz los cambios siguientes:
TEST_IP_ADDRESS
: la dirección IP de tus máquinas virtuales de prueba.CONSUMER_PORT
: el puerto de tu aplicación de consumidor.
Con el puerto que has configurado para tu máquina virtual de prueba de producción, haz una solicitud
GET
a la dirección IP de prueba y, a continuación, comprueba que has llegado a la instancia correcta:curl IP_ADDRESS:PRODUCER_PORT
Haz los cambios siguientes:
IP_ADDRESS
: la dirección IP de tus máquinas virtuales de prueba.PRODUCER_PORT
: el puerto que has configurado para tu VM de prueba de producción.