Administra la superposición de destino

En esta página, se describe cómo los administradores de red del productor pueden administrar la superposición de destino en una red de nube privada virtual (VPC) que usa una interfaz de Private Service Connect.

Google Cloud garantiza que los rangos de direcciones IP de las subredes asignadas a las interfaces de red en la misma instancia de máquina virtual (VM) no puedan tener rangos de direcciones IP superpuestos. Sin embargo, las subredes de las redes de VPC de consumidores y productores pueden superponerse, como se muestra en la figura 1. Cuando se usa una interfaz de Private Service Connect con rangos de direcciones IP de destino superpuestos, se necesita una configuración adicional para garantizar que el tráfico alcance el destino correcto en la red deseada.

En los comandos que se describen en esta página, se muestra cómo actualizar de forma temporal el enrutamiento de una VM 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.

Figura 1. Subnet-a en una red de VPC de productor se superpone con subnet-c en una red de VPC del consumidor porque ambas subredes usan el mismo rango de direcciones IP. Una VM de productor debe poder alcanzar 10.0.1.5 en ambas redes.

Puedes administrar los rangos de direcciones IP de destino superpuestos de las siguientes maneras, que se describen en detalle en esta página:

Los siguientes enfoques también se pueden usar para administrar la superposición de destino, 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 no superpuesto para la red del productor.
  • Si las direcciones IP superpuestas en el lado del productor son solo para los extremos de la API de origen, puedes configurar el acceso privado a Google para los hosts locales.
  • Usa el enrutamiento y reenvío virtuales (VRF) para aislar espacios de direcciones IP superpuestos. Asigna una instancia de VRF a cada interfaz de Private Service Connect. Configura las rutas predeterminadas para cada instancia de VRF para garantizar que el tráfico alcance el destino previsto.
  • Usa eBPF para personalizar las reglas de enrutamiento avanzadas según criterios distintos de la dirección IP. Se recomienda este enfoque para los casos en los que las opciones anteriores no son posibles.

Administra la superposición de direcciones de destino mediante espacios de nombres de red

Puedes administrar la superposición de direcciones de destino mediante los espacios de nombres de red. Este enfoque funciona bien cuando algunas aplicaciones en una VM de productor solo necesitan acceder a las cargas de trabajo de consumidor, y otras aplicaciones en la VM de productor solo necesitan acceder a las cargas de trabajo de productor.

Para administrar la superposición de direcciones de destino mediante espacios de nombres de red, haz lo siguiente:

  1. Conéctate a la VM que tiene tu interfaz de Private Service Connect.

  2. Ejecuta el siguiente comando:

    ip address
    

    En la lista de interfaces de red, busca y anota el nombre del SO invitado para la interfaz de Private Service Connect, por ejemplo, ens5. Este nombre está asociado con la dirección IP de tu interfaz de Private Service Connect.

  3. Crea un espacio de nombres de red para el tráfico vinculado al consumidor:

    sudo ip netns add consumer-ns
    
  4. Mueve la interfaz de Private Service Connect al espacio de nombres de la red del consumidor. Ejecuta los siguientes comandos de forma individual:

    sudo ip link set OS_INTERFACE_NAME netns consumer-ns
    
    sudo ip netns exec consumer-ns ip link set OS_INTERFACE_NAME up
    

    Reemplaza OS_INTERFACE_NAME por el nombre del SO invitado para la interfaz de Private Service Connect que encontraste en el paso 2, por ejemplo, ens5.

  5. Restablece 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
    

    Reemplaza INTERFACE_IP por la dirección IP de tu interfaz de Private Service Connect.

  6. Valida los cambios en tu interfaz de Private Service Connect:

    sudo ip netns exec consumer-ns ip a
    

    Asegúrate de que el nombre del SO invitado de tu interfaz de Private Service Connect aparezca en el resultado del comando. Asegúrate de que la interfaz tenga la dirección IP correcta.

  7. Agrega una ruta a la dirección IP de la puerta de enlace:

    sudo ip netns exec consumer-ns ip route add GATEWAY_IP dev OS_INTERFACE_NAME scope link
    

    Reemplaza GATEWAY_IP por la dirección IP de la puerta de enlace predeterminada para la subred de la interfaz de Private Service Connect.

  8. Agrega una ruta predeterminada para tu interfaz de Private Service Connect:

    sudo ip netns exec consumer-ns ip route add default via GATEWAY_IP dev OS_INTERFACE_NAME
    
  9. Valida la tabla de enrutamiento para el 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
    
  10. Para verificar que tu interfaz pueda acceder a las VMs en cada parte del rango de direcciones IP superpuesta, haz lo siguiente:

    1. Asegúrate de que las reglas de firewall estén configuradas para permitir el tráfico de entrada ICMP a tus VMs de destino.

    2. Envía un ping ICMP desde la VM de tu interfaz a una VM de consumidor que se encuentre en el rango de direcciones IP superpuesto. Usa tu espacio de nombres del consumidor:

      sudo ip netns exec consumer-ns ping CONSUMER_IP_ADDRESS
      

      Reemplaza CONSUMER_IP_ADDRESS por la dirección IP de una VM de consumidor del rango de direcciones IP superpuesto.

    3. Envía un ping ICMP desde la VM de tu interfaz a una VM de productor que está en el rango de direcciones IP superpuesto. Usa el espacio de nombres predeterminado:

      ping PRODUCER_IP_ADDRESS
      

      Reemplaza PRODUCER_IP_ADDRESS por la dirección IP de una VM de productor del rango de direcciones IP superpuesto.

Administra la superposición de la dirección de destino con el enrutamiento basado en políticas

Puedes administrar la superposición de direcciones de destino mediante la configuración del enrutamiento basado en políticas en el sistema operativo de la VM de la interfaz. Este enfoque funciona bien cuando la misma aplicación necesita acceder a las 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 llegar en el rango de IP superpuesto.

Cuando configuras el enrutamiento basado en políticas para administrar la superposición de destino, eliges los puertos de destino que se usarán para las aplicaciones de consumidor. El tráfico que está vinculado a uno de estos puertos fluye a través de tu interfaz de Private Service Connect a la subred del consumidor, mientras que el otro tráfico fluye a través de la interfaz predeterminada hacia la subred del productor.

  1. Conéctate a la VM de tu interfaz de Private Service Connect.

  2. Si el comando iproute2 no está disponible, instálalo.

  3. Asegúrate de poder escribir en el siguiente archivo: /etc/iproute2/rt_tables

  4. Crea una tabla de ruta. Agrega 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
    

    Reemplaza OS_INTERFACE_NAME por el nombre de SO invitado de la interfaz de Private Service Connect, por ejemplo, ens5.

  5. Agrega una ruta al rango de subred del consumidor superpuesto a través de la puerta de enlace predeterminada:

    sudo ip route add CONSUMER_SUBNET_RANGE via GATEWAY_IP dev OS_INTERFACE_NAME table pscnet
    

    Reemplaza lo siguiente:

  6. Actualiza la tabla de ruta para que los paquetes de salida de esta VM usen la dirección IP de tu interfaz como su dirección IP de origen:

    sudo ip route add GATEWAY_IP src INTERFACE_IP dev OS_INTERFACE_NAME table pscnet
    

    Reemplaza INTERFACE_IP por la dirección IP de tu interfaz de Private Service Connect.

  7. Agrega una regla IP que se aplique a todo el tráfico destinado al puerto de destino de la aplicación para consumidores:

    sudo ip rule add dport CONSUMER_PORT table pscnet
    

    Reemplaza CONSUMER_PORT por el puerto que configuraste para el tráfico a la VM de consumidor.

  8. Para verificar que un paquete se enrute a la VM correcta según su puerto de destino, haz lo siguiente:

    1. Crea VMs de prueba en las redes de productores y consumidores que usan la misma dirección IP del rango superpuesto.
    2. Configura un servidor HTTP en cada VM de prueba. Configura la VM de prueba del consumidor para que escuche en el puerto que configuraste para la aplicación del consumidor. Configura la VM de prueba del productor a fin de que escuche en un puerto diferente del que configuraste para la aplicación de consumidor.
    3. Asegúrate de que las reglas de firewall estén configuradas para permitir el tráfico HTTP a las VMs de prueba.
    4. Con el puerto que configuraste para la aplicación de consumidor, realiza una solicitud GET a la dirección IP de prueba y, luego, verifica que alcanzaste la instancia correcta:

      curl TEST_IP_ADDRESS:CONSUMER_PORT
      

      Reemplaza lo siguiente:

      • TEST_IP_ADDRESS: Es la dirección IP de las VMs de prueba.
      • CONSUMER_PORT: El puerto de la aplicación de consumidor.
    5. Con el puerto que configuraste para la VM de prueba de producción, realiza una solicitud GET a la dirección IP de prueba y, luego, verifica que alcanzaste la instancia correcta:

      curl IP_ADDRESS:PRODUCER_PORT
      

      Reemplaza lo siguiente:

      • IP_ADDRESS: Es la dirección IP de las VMs de prueba.
      • PRODUCER_PORT: el puerto que configuraste para la VM de prueba de producción.