Solución de problemas comunes de conectividad de salida con Azure Load Balancer
Obtenga información sobre la solución de problemas de las conexiones salientes en Azure Load Balancer. Esto incluye comprender la traducción de direcciones de red de origen (SNAT) y su impacto en las conexiones, el uso de direcciones IP públicas individuales en máquinas virtuales (VMs) y el diseño de aplicaciones para la eficacia de la conexión para evitar el agotamiento de puertos SNAT. La mayoría de los problemas con la conectividad saliente que experimentan los clientes se deben al agotamiento de puertos SNAT y a tiempos de espera de conexión agotados que generan pérdida de paquetes.
Para más información sobre los puertos SNAT, consulte Uso de traducción de direcciones de red de origen (SNAT) con las conexiones salientes.
Descripción del uso del puerto SNAT
Siga Diagnóstico del equilibrador de carga estándar con métricas, alertas y estado de los recursos para supervisar el uso y la asignación de puertos SNAT del equilibrador de carga existente. Supervise para confirmar o determinar el riesgo de agotamiento de SNAT. Si tiene problemas para comprender el comportamiento de la conexión de salida, use las estadísticas de la pila IP (netstat) o recopile capturas de paquetes. Estas capturas de paquetes se pueden realizar en el sistema operativo invitado de la instancia o se puede usar Network Watcher para la captura de paquetes. En la mayoría de los escenarios, Azure recomienda usar una puerta de enlace NAT para la conectividad saliente para reducir el riesgo de agotamiento de SNAT. Se recomienda una puerta de enlace NAT si el servicio inicia conexiones salientes TCP o UDP repetidas al mismo destino.
Optimización de las implementaciones de Azure para la conectividad saliente
Es importante optimizar las implementaciones de Azure para la conectividad saliente. La optimización puede evitar o aliviar los problemas con la conectividad saliente.
Implementación de la puerta de enlace NAT para la conectividad saliente a Internet
Azure NAT Gateway es un servicio de Azure altamente resistente y escalable que proporciona conectividad saliente a Internet desde la red virtual. El método único de una puerta de enlace NAT para consumir puertos SNAT ayuda a resolver problemas comunes de conexión y agotamiento de SNAT. Para más información sobre Azure NAT Gateway, consulte ¿Qué es Azure NAT Gateway?.
¿Cómo reduce una puerta de enlace NAT el riesgo de agotamiento de puertos SNAT?
Azure Load Balancer asigna cantidades fijas de puertos SNAT a cada instancia de máquina virtual de un grupo de back-end. Este método de asignación puede provocar el agotamiento de SNAT, especialmente si los patrones de tráfico desiguales dan lugar a que una máquina virtual específica envíe un mayor volumen de conexiones salientes. A diferencia del equilibrador de carga, una puerta de enlace NAT asigna dinámicamente puertos SNAT en todas las instancias de máquina virtual dentro de una subred.
Una puerta de enlace NAT hace que los puertos SNAT disponibles sean accesibles para cada instancia de una subred. Esta asignación dinámica permite que las instancias de máquina virtual usen el número de puertos SNAT que cada una necesite del grupo de puertos disponibles para las nuevas conexiones. La asignación dinámica reduce el riesgo de agotamiento de SNAT.
Comportamiento de selección y reutilización de puertos.
Una puerta de enlace NAT selecciona los puertos de forma aleatoria del grupo de puertos disponibles. Si no hay puertos disponibles, los puertos SNAT se reutilizan siempre y cuando no haya ninguna conexión existente con la misma dirección IP pública y puerto de destino. Este comportamiento para la selección y reutilización de puertos de una puerta de enlace NAT hace que sea menos probable experimentar tiempos de espera de conexión.
Para más información sobre cómo funciona SNAT y el uso de puertos para la puerta de enlace NAT, consulte Aspectos básicos de SNAT. Hay algunas condiciones en las que no se puede usar la puerta de enlace NAT para las conexiones salientes. Para más información sobre las limitaciones de NAT Gateway, consulte Limitaciones de NAT Gateway.
Si no puede usar una puerta de enlace NAT para la conectividad saliente, consulte las otras opciones de migración que se describen en este artículo.
Configuración de reglas de salida del equilibrador de carga para maximizar los puertos SNAT por cada máquina virtual
Si usa un equilibrador de carga estándar público y experimenta errores de conexión o agotamiento de SNAT, asegúrese de que usa reglas de salida con asignación manual de puertos. De lo contrario, es probable que esté confiando en la asignación de puertos predeterminada del equilibrador de carga. La asignación de puertos predeterminada asigna automáticamente un número conservador de puertos, que se basa en el número de instancias de su grupo de back-end. La asignación de puertos predeterminada no es un método recomendado para habilitar las conexiones salientes. Cuando el grupo de back-end se escala, las conexiones se pueden ver afectadas si es necesario reasignar los puertos.
Para más información sobre la asignación de puertos predeterminada, consulte Traducción de direcciones de red de origen para conexiones salientes.
Para aumentar el número de puertos SNAT disponibles por cada máquina virtual, configure reglas de salida con asignación manual de puertos en el equilibrador de carga. Por ejemplo, si sabe que tiene un máximo de 10 máquinas virtuales en el grupo de back-end, puede asignar hasta 6400 puertos SNAT por máquina virtual en lugar del valor predeterminado de 1024. Si necesita más puertos SNAT, puede agregar varias direcciones IP de front-end para las conexiones salientes para multiplicar el número de puertos SNAT disponibles. Asegúrese de comprender por qué se agotan los puertos SNAT antes de agregar más direcciones IP de front-end.
Para obtener instrucciones detalladas, consulte Diseño de las aplicaciones para usar las conexiones de forma eficaz más adelante en este artículo. Para agregar más direcciones IP para las conexiones salientes, cree una configuración IP de front-end para cada nueva dirección IP. Cuando se configuran las reglas de salida, puede seleccionar varias configuraciones IP de front-end para un grupo de back-end. Se recomienda usar diferentes direcciones IP para la conectividad entrante y saliente. El uso de diferentes direcciones IP aísla el tráfico para mejorar la supervisión y la solución de problemas.
Configuración de una dirección IP pública individual en la máquina virtual
Para implementaciones a menor escala, puede considerar la posibilidad de asignar una dirección IP pública a una máquina virtual. Si se asigna una dirección IP pública a una máquina virtual, todos los puertos proporcionados por la dirección IP pública están disponibles para la máquina virtual. A diferencia de un equilibrador de carga o una puerta de enlace NAT, los puertos solo son accesibles para la única máquina virtual asociada a la dirección IP.
Se recomienda considerar el uso de una puerta de enlace NAT en su lugar, ya que asignar direcciones IP públicas individuales no es una solución escalable.
Nota
Si tiene que conectar la red virtual de Azure a servicios de PaaS de Azure, como Azure Storage, Azure SQL, Azure Cosmos DB o cualquier otro de los servicios de Azure disponibles, puede usar Azure Private Link para evitar SNAT por completo. Azure Private Link envía el tráfico de la red virtual a los servicios de Azure mediante la red troncal de Azure en lugar de mediante Internet.
Private Link es la opción recomendada sobre puntos de conexión de servicio para el acceso privado a los servicios hospedados de Azure. Para más información sobre la diferencia entre Private Link y los puntos de conexión de servicio, consulte Comparación de puntos de conexión privados y puntos de conexión de servicio.
Diseño de aplicaciones eficientes para la conexión
Al diseñar las aplicaciones, asegúrese de que usen las conexiones de forma eficaz. Una conexión de forma eficaz puede reducir o eliminar el agotamiento de puertos SNAT en las aplicaciones implementadas.
Modificación de la aplicación para reutilizar las conexiones
En lugar de generar conexiones TCP atómicas individuales para cada solicitud, se recomienda configurar la aplicación para reutilizar las conexiones. La reutilización de las conexiones da lugar a transacciones TCP de mayor rendimiento y es especialmente adecuada para protocolos como HTTP/1.1, donde la reutilización de la conexión es el valor predeterminado. Esta reutilización se aplica a otros protocolos que usan HTTP como su transporte, como REST.
Modificación de la aplicación para usar la agrupación de conexiones
Emplee un esquema de agrupación de conexiones en la aplicación, en el que las solicitudes se distribuyen internamente entre un conjunto fijo de conexiones y se reutilizan siempre que sea posible. Este esquema limita el número de puertos SNAT en uso y crea un entorno más predecible.
Este esquema puede aumentar el rendimiento de las solicitudes al permitir varias operaciones simultáneas cuando una sola conexión bloquea la respuesta de una operación.
La agrupación de conexiones puede existir ya en el marco de trabajo que se use para desarrollar la aplicación o su configuración. Se puede combinar la agrupación de conexiones con la reutilización de conexiones. Así, sus múltiples conexiones consumen un número fijo y predecible de puertos para la misma dirección IP y el mismo puerto de destino.
Las solicitudes se benefician del uso eficiente de las transacciones TCP, que reducen la latencia y la utilización de recursos. Las transacciones UDP también se pueden beneficiar. La administración del número de flujos UDP puede evitar condiciones de agotamiento y administrar el uso de los puertos SNAT.
Modificación de la aplicación para usar lógica de reintento menos agresiva
Cuando se agotan los puertos SNAT o se producen errores de aplicación, los reintentos agresivos o por fuerza bruta sin lógica de retroceso y decadencia provocan el agotamiento o su persistencia. Puede reducir la demanda de puertos SNAT mediante el uso de una lógica de reintento menos agresiva.
Según el tiempo de espera de inactividad configurado, si los reintentos son demasiado agresivos, es posible que las conexiones no tengan tiempo suficiente para cerrar y liberar los puertos SNAT para su reutilización.
Uso de conexiones persistentes para restablecer el tiempo de expiración de inactividad saliente
Las reglas de salida del equilibrador de carga tienen un tiempo de espera de inactividad de 4 minutos de manera predeterminada, que se puede ajustar hasta 100 minutos. Puede usar mensajes de mantenimiento de conexión de TCP para actualizar un flujo inactivo y restablecer este tiempo de espera de inactividad en caso necesario. Al usar mensajes de mantenimiento de conexión de TCP, es suficiente habilitarlos en un lado de la conexión.
Por ejemplo, es suficiente habilitarlos solo en el lado servidor para restablecer el temporizador de inactividad del flujo y no es necesario que ambos lados inicien mensajes de mantenimiento de conexión de TCP. Existen conceptos similares existen para la capa de aplicación, incluidas las configuraciones de cliente/servidor de base de datos. Compruebe el lado del servidor para ver qué opciones existen para las conexiones persistentes específicas de la aplicación.
Pasos siguientes
Para más información sobre el agotamiento de puertos SNAT, las opciones de conectividad de salida y el acceso de salida predeterminado, consulte: