Configuración de la dirección IP flotante de Azure Load Balancer

Load Balancer proporciona varias funcionalidades para las aplicaciones UDP y TCP.

Dirección IP flotante

Algunos escenarios de aplicación prefieren o requieren que varias instancias de la aplicación usen el mismo puerto en una única VM en el grupo back-end. Entre los ejemplos comunes de reutilización de puertos se incluyen la agrupación en clústeres para alta disponibilidad, dispositivos de red virtuales y la exposición de varios puntos de conexión TLS sin volver a cifrar.

Estado de IP flotante Resultado
IP flotante habilitada Azure cambia la asignación de direcciones IP a la dirección IP de front-end del equilibrador de carga
IP flotante deshabilitada Azure expone la dirección IP de las instancias de máquina virtual

Si quiere reutilizar el puerto de back-end en varias reglas, debe habilitar la IP flotante en la definición de la regla. La habilitación de IP flotante permite una mayor flexibilidad.

En los diagramas, se observa cómo funciona la asignación de direcciones IP antes y después de habilitar la IP flotante: Este diagrama muestra el tráfico de red a través de un equilibrador de carga antes de habilitar la IP flotante.

Este diagrama muestra el tráfico de red a través de un equilibrador de carga después de habilitar la IP flotante.

La dirección IP flotante se configura en una regla del equilibrador de carga mediante Azure Portal, la API REST, la CLI, PowerShell u otro cliente. Además de la configuración de la regla, también debe configurar el sistema operativo invitado de la máquina virtual para utilizar la dirección IP flotante.

Diagrama del tráfico del equilibrador de carga de varias direcciones IP de front-end con IP flotante.

En este escenario, cada máquina virtual del grupo back-end tiene tres interfaces de red:

  • IP de back-end: una NIC virtual asociada a la máquina virtual (configuración IP del recurso NIC de Azure).
  • Front-end 1 (FIP1): una interfaz de bucle invertido en el sistema operativo invitado que está configurada con la dirección IP de FIP1.
  • Front-end 2 (FIP2): una interfaz de bucle invertido en el sistema operativo invitado que está configurada con la dirección IP de FIP2.

Se asume que la configuración front-end es la misma que en el escenario anterior:

Front-end Dirección IP protocol port
front-end verde 1 65.52.0.1 TCP 80
front-end violeta 2 65.52.0.2 TCP 80

Definimos dos reglas de IP flotante:

Regla Front-end Asignar a grupo de servidores back-end
1 regla verde FIP1:80 back-end verde FIP1:80 (en VM1 y VM2)
2 regla violeta FIP2:80 back-end violeta FIP2:80 (en VM1 y VM2)

En la tabla siguiente se muestra la asignación completa en el equilibrador de carga:

Regla Dirección IP del front-end protocol port Destination port
regla verde 1 65.52.0.1 TCP 80 igual que el front-end (65.52.0.1) igual que el front-end (80)
regla púrpura 2 65.52.0.2 TCP 80 igual que el front-end (65.52.0.2) igual que el front-end (80)

El destino del flujo de entrada ahora es la dirección IP de front-end en la interfaz de bucle invertido de la máquina virtual. Cada regla debe generar un flujo con una combinación única de dirección IP de destino y puerto de destino. Es posible la reutilización del puerto en la misma máquina virtual cambiando la dirección IP de destino del flujo por la dirección IP de front-end del flujo. El servicio se expone al equilibrador de carga mediante su enlace a la dirección IP del front-end y al puerto de la interfaz de bucle invertido correspondiente.

Se puede ver que el puerto de destino no cambia en el ejemplo. En los escenario de IP flotante, Azure Load Balancer también admite la definición de una regla de equilibrio de carga para cambiar el puerto de destino de back-end y para que sea diferente del puerto de destino de front-end.

El tipo de regla de dirección IP flotante es el fundamento de varios modelos de configuración del equilibrador de carga. Un ejemplo que está disponible actualmente es la configuración de uno o varios agentes de escucha de grupo de disponibilidad Always On. Con el tiempo, se documentarán más escenarios de este tipo. Para obtener información más detallada sobre las configuraciones específicas del sistema operativo invitado necesarias para habilitar la dirección IP flotante, consulte Configuración de IP flotante de Azure Load Balancer en la sección siguiente.

Configuración del sistema operativo invitado para la dirección IP flotante

Para que el sistema operativo invitado de la máquina virtual funcione correctamente, debe configurarse para que pueda recibir todo el tráfico que se enlace a la IP y el puerto de front-end del equilibrador de carga. La configuración de VM requiere:

  • Agregar una interfaz de red de bucle invertido.
  • configurar el bucle invertido con la dirección IP de front-end del equilibrador de carga.
  • asegurarse de que el sistema pueda enviar o recibir paquetes en interfaces que no tienen la dirección IP asignada a esa interfaz. Los sistemas Windows requieren establecer interfaces para usar el modelo de "host débil". En el caso de los sistemas Linux, este modelo se usa normalmente de manera predeterminada.
  • Configurar el firewall de host para permitir el tráfico en el puerto IP de front-end.

Nota

En los ejemplos siguientes se usa el protocolo IPv4. Para usar IPv6, sustituya "ipv6" por "ipv4". Tenga en cuenta también que las IP flotantes para IPv6 no funcionan con los equilibradores de carga internos.

Windows Server

Expandir

Ejecute los siguientes comandos en un símbolo del sistema Windows en el servidor una vez por cada VM del grupo de back-end.

Para obtener la lista de nombres de interfaz que tiene en la máquina virtual, escriba este comando:

netsh interface ipv4 show interface 

En el caso de las conexiones de interfaz de red de VM (administradas por Azure), escriba el siguiente comando.

netsh interface ipv4 set interface "interfacename" weakhostreceive=enabled

(reemplace "interfacename" por el nombre de esta interfaz)

Para cada interfaz de bucle invertido que agregue, repita estos comandos:

netsh interface ipv4 add addr floatingipaddress floatingip floatingipnetmask
netsh interface ipv4 set interface floatingipaddress weakhostreceive=enabled  weakhostsend=enabled 

(reemplace loopbackinterface por el nombre de esta interfaz de bucle invertido y, además, reemplace floatingip y floatingipnetmask por los valores que correspondan a la IP de front-end del equilibrador de carga)

Por último, si el host invitado usa un firewall, asegúrese de que haya configurada una regla para que el tráfico pueda llegar a la VM a través de los puertos adecuados.

En esta configuración de ejemplo se supone que existe una configuración de la IP de front-end del equilibrador de carga de 1.2.3.4 y una regla de equilibrio de carga para el puerto 80:

netsh int ipv4 set int "Ethernet" weakhostreceive=enabled
netsh int ipv4 add addr "Loopback Pseudo-Interface 1" 1.2.3.4 255.255.255.0
netsh int ipv4 set int "Loopback Pseudo-Interface 1" weakhostreceive=enabled weakhostsend=enabled
netsh advfirewall firewall add rule name="http" protocol=TCP localport=80 dir=in action=allow enable=yes

Ubuntu

Expandir

Ejecute los siguientes comandos, mediante una sesión SSH, una vez por cada VM del grupo de back-end.

Para obtener la lista de nombres de interfaz que tiene en la máquina virtual, escriba este comando:

ip addr

Repita estos siguientes comandos en cada interfaz de bucle invertido para asignar la IP flotante al alias de cada uno de estos:

sudo ip addr add floatingip/floatingipnetmask dev lo:0

(reemplace floatingip y floatingipnetmask por los valores que correspondan a la IP de front-end del equilibrador de carga)

Por último, si el host invitado usa un firewall, asegúrese de que haya configurada una regla para que el tráfico pueda llegar a la VM a través de los puertos adecuados.

En esta configuración de ejemplo se supone que existe una configuración de la IP de front-end del equilibrador de carga de 1.2.3.4 y una regla de equilibrio de carga para el puerto 80. En este ejemplo también se supone el uso de un UFW (firewall sin complicaciones) en Ubuntu.

sudo ip addr add 1.2.3.4/24 dev lo:0
sudo ufw allow 80/tcp

Limitaciones

  • Con la IP flotante habilitada en una regla de equilibrio de carga, la aplicación debe usar la configuración IP principal de la interfaz de red para la salida.
  • No puede usar IP flotantes en las configuraciones de IPv4 secundarias de los escenarios de equilibrio de carga. Esta limitación no se aplica a los equilibradores de carga públicos con configuraciones de pila doble (IPv4 e IPv6) o a arquitecturas que usan una puerta de enlace NAT para la conectividad saliente.
  • Si la aplicación se enlaza a la dirección IP de front-end configurada en la interfaz de bucle invertido en el sistema operativo invitado, entonces la traducción de direcciones de red saliente de Azure no volverá a escribir el flujo de salida y, por tanto, se producirá un error en el flujo. Revise los escenarios salientes.

Pasos siguientes