Implementación de aplicaciones virtuales de red de alta disponibilidadDeploy highly available network virtual appliances

En este artículo se muestra cómo implementar un conjunto de aplicaciones de red virtual (NVA) de alta disponibilidad en Azure.This article shows how to deploy a set of network virtual appliances (NVAs) for high availability in Azure. Una NVA se usa normalmente para controlar el flujo del tráfico de red desde una red perimetral, conocida también como DMZ, hasta otras redes o subredes.An NVA is typically used to control the flow of network traffic from a perimeter network, also known as a DMZ, to other networks or subnets. Para obtener información sobre cómo implementar una red perimetral en Azure, consulte servicios en la nube de Microsoft y seguridad de red.To learn about implementing a DMZ in Azure, see Microsoft cloud services and network security. El artículo incluye arquitecturas de ejemplo de solo entrada, solo salida y de entrada y salida.The article includes example architectures for ingress only, egress only, and both ingress and egress.

Requisitos previos: En este artículo se da por supuesto un conocimiento básico de las redes de Azure, equilibradores de carga de Azurey rutas definidas por el usuario (UDR).Prerequisites: This article assumes a basic understanding of Azure networking, Azure load balancers, and user-defined routes (UDRs).

Diagramas de arquitecturaArchitecture diagrams

Una aplicación de red virtual se puede implementar en una red perimetral en muchas arquitecturas diferentes.An NVA can be deployed to a DMZ in many different architectures. Por ejemplo, en la siguiente ilustración se muestra el uso de un único NVA para la entrada.For example, the following figure illustrates the use of a single NVA for ingress.

00

En esta arquitectura, la aplicación de red virtual proporciona un límite de red segura ya que comprueba todo el tráfico de red de entrada y salida y solo deja pasar aquel que cumple las reglas de seguridad de red.In this architecture, the NVA provides a secure network boundary by checking all inbound and outbound network traffic and passing only the traffic that meets network security rules. Sin embargo, el hecho de que todo el tráfico de la red deba pasar por la aplicación de red virtual significa que dicha aplicación es un único punto de error en la red.However, the fact that all network traffic must pass through the NVA means that the NVA is a single point of failure in the network. Así que, si se produce un error en la aplicación de red virtual, no habrá ninguna otra ruta para el tráfico de red ni ninguna subred back-end disponible.If the NVA fails, there is no other path for network traffic and all the back-end subnets are unavailable.

Para conseguir que una aplicación virtual de red tenga una alta disponibilidad, implemente varias de estas aplicaciones en un conjunto de disponibilidad.To make an NVA highly available, deploy more than one NVA into an availability set.

Las arquitecturas siguientes describen los recursos y la configuración que son necesarios para dotar a las aplicaciones virtuales de red de una alta disponibilidad:The following architectures describe the resources and configuration necessary for highly available NVAs:

SoluciónSolution VentajasBenefits ConsideracionesConsiderations
Entrada con NVA de capa 7Ingress with layer 7 NVAs Todos los nodos NVA están activos.All NVA nodes are active Requiere una aplicación virtual de red que pueda terminar las conexiones y usar SNAT.Requires an NVA that can terminate connections and use SNAT
Requiere un conjunto independiente de NVA para el tráfico procedente de Internet y de Azure.Requires a separate set of NVAs for traffic coming from the Internet and from Azure
Solo puede usarse con el tráfico que se origina fuera de Azure.Can only be used for traffic originating outside Azure
Salida con NVA de capa 7Egress with layer 7 NVAs Todos los nodos NVA están activos.All NVA nodes are active Requiere una aplicación virtual de red que pueda terminar las conexiones e implemente la traducción de direcciones de red de origen (SNAT).Requires an NVA that can terminate connections and implements source network address translation (SNAT)
Entrada-salida con NVA de capa 7Ingress-Egress with layer 7 NVAs Todos los nodos están activos.All nodes are active
Puede controlar el tráfico que se origina en Azure.Able to handle traffic originated in Azure
Requiere una aplicación virtual de red que pueda terminar las conexiones y usar SNAT.Requires an NVA that can terminate connections and use SNAT
Requiere un conjunto independiente de NVA para el tráfico procedente de Internet y de Azure.Requires a separate set of NVAs for traffic coming from the Internet and from Azure
Conmutador PIP-UDRPIP-UDR switch Un solo conjunto de NVA para todo el tráfico.Single set of NVAs for all traffic
Puede controlar todo el tráfico (sin límite en las reglas de puerto).Can handle all traffic (no limit on port rules)
Activo-pasivoActive-passive
Requiere un proceso de conmutación por error.Requires a failover process
PIP-UDR sin SNATPIP-UDR without SNAT Un solo conjunto de NVA para todo el tráfico.Single set of NVAs for all traffic
Puede controlar todo el tráfico (sin límite en las reglas de puerto).Can handle all traffic (no limit on port rules)
No requiere la configuración de SNAT para las solicitudes entrantesDoes not require configuring SNAT for inbound requests
Activo-pasivoActive-passive
Requiere un proceso de conmutación por error.Requires a failover process
La lógica de sondeo y de conmutación por error se ejecutan fuera de la red virtualProbing and failover logic run outside the virtual network

Entrada con NVA de capa 7Ingress with layer 7 NVAs

En la siguiente ilustración se muestra una arquitectura de alta disponibilidad que implementa una red perimetral de entrada detrás de un equilibrador de carga accesible desde Internet.The following figure shows a high availability architecture that implements an ingress DMZ behind an internet-facing load balancer. Esta arquitectura está diseñada para proporcionar conectividad a las cargas de trabajo de Azure con tráfico de capa de 7, como HTTP o HTTPS:This architecture is designed to provide connectivity to Azure workloads for layer 7 traffic, such as HTTP or HTTPS:

11

La ventaja de esta arquitectura es que todas las aplicaciones virtuales de red están activas y, si una no funciona correctamente, el equilibrador de carga dirige el tráfico de red a la otra.The benefit of this architecture is that all NVAs are active, and if one fails the load balancer directs network traffic to the other NVA. Ambas aplicaciones virtuales de red enrutan el tráfico al equilibrador de carga interno, de modo que, mientras una aplicación virtual de red esté activa, el tráfico seguirá fluyendo.Both NVAs route traffic to the internal load balancer so as long as one NVA is active, traffic continues to flow. Las aplicaciones virtuales de red son necesarias para terminar el tráfico de SSL destinado a las máquinas virtuales de nivel web.The NVAs are required to terminate SSL traffic intended for the web tier VMs. Estas aplicaciones virtuales de red no se pueden ampliar para administrar el tráfico local puesto que este necesita otro conjunto dedicado de aplicaciones virtuales de red con sus propias rutas de red.These NVAs cannot be extended to handle on-premises traffic because on-premises traffic requires another dedicated set of NVAs with their own network routes.

Salida con NVA de capa 7Egress with layer 7 NVAs

La arquitectura anterior puede ampliarse para proporcionar una red perimetral de salida para las solicitudes que se originan en la carga de trabajo de Azure.The previous architecture can be expanded to provide an egress DMZ for requests originating in the Azure workload. La siguiente arquitectura está diseñada para proporcionar alta disponibilidad de las aplicaciones virtuales de red en la red perimetral para el tráfico de capa 7, como HTTP o HTTPS:The following architecture is designed to provide high availability of the NVAs in the DMZ for layer 7 traffic, such as HTTP or HTTPS:

22

En esta arquitectura, todo el tráfico que se origina en Azure se enruta a un equilibrador de carga interno.In this architecture, all traffic originating in Azure is routed to an internal load balancer. El equilibrador de carga distribuye las solicitudes salientes entre un conjunto de aplicaciones virtuales de red.The load balancer distributes outgoing requests between a set of NVAs. Estas aplicaciones virtuales de red dirigen el tráfico a Internet mediante sus direcciones IP públicas individuales.These NVAs direct traffic to the Internet using their individual public IP addresses.

Entrada y salida con NVA de capa 7Ingress-egress with layer 7 NVAs

En las dos arquitecturas anteriores, había una red perimetral distinta para la entrada y la salida.In the two previous architectures, there was a separate DMZ for ingress and egress. La siguiente arquitectura muestra cómo crear una red perimetral que puede usarse para la entrada y la salida con el tráfico de capa 7, como HTTP o HTTPS:The following architecture demonstrates how to create a DMZ that can be used for both ingress and egress for layer 7 traffic, such as HTTP or HTTPS:

4

En esta arquitectura, las aplicaciones virtuales de red procesan las solicitudes que entran desde la puerta de enlace de aplicaciones.In this architecture, the NVAs process incoming requests from the application gateway. Las aplicaciones virtuales de red también procesan las solicitudes que salen de las máquinas virtuales de carga de trabajo en el grupo back-end del equilibrador de carga.The NVAs also process outgoing requests from the workload VMs in the back-end pool of the load balancer. Como el tráfico entrante se enruta con una puerta de enlace de aplicaciones y el tráfico saliente lo hace con un equilibrador de carga, las aplicaciones virtuales de red son responsables de mantener la afinidad de la sesión.Because incoming traffic is routed with an application gateway and outgoing traffic is routed with a load balancer, the NVAs are responsible for maintaining session affinity. Es decir, la puerta de enlace de aplicaciones mantiene una asignación de solicitudes entrantes y salientes, de forma que pueda reenviar la respuesta correcta al solicitante original.That is, the application gateway maintains a mapping of inbound and outbound requests so it can forward the correct response to the original requestor. Sin embargo, el equilibrador de carga interno no tiene acceso a las asignaciones de la puerta de enlace de aplicaciones, así que emplea su propia lógica para enviar las respuestas a las aplicaciones virtuales de red.However, the internal load balancer does not have access to the application gateway mappings, and uses its own logic to send responses to the NVAs. Es posible que el equilibrador de carga envíe una respuesta a una aplicación virtual de red que inicialmente no recibió la solicitud de la puerta de enlace de aplicaciones.It's possible the load balancer could send a response to an NVA that did not initially receive the request from the application gateway. En este caso, las aplicaciones virtuales de red deben comunicarse y transferirse la respuesta para que la aplicación virtual de red correcta pueda reenviar la respuesta a la puerta de enlace de aplicaciones.In this case, the NVAs must communicate and transfer the response between them so the correct NVA can forward the response to the application gateway.

Nota

Otra manera de resolver el problema del enrutamiento asimétrico es asegurarse de que las aplicaciones virtuales de red realicen la traducción de las direcciones de red de origen (SNAT).You can also solve the asymmetric routing issue by ensuring the NVAs perform inbound source network address translation (SNAT). De esta forma, se reemplazaría la dirección IP de origen original del solicitante por una de las direcciones IP de la aplicación virtual de red usada en el flujo de entrada.This would replace the original source IP of the requestor to one of the IP addresses of the NVA used on the inbound flow. Con ello se garantiza que pueda usar varias aplicaciones virtuales de red al mismo tiempo sin perder la simetría de la ruta.This ensures that you can use multiple NVAs at a time, while preserving the route symmetry.

Conmutador PIP-UDR con NVA de capa 4PIP-UDR switch with layer 4 NVAs

La siguiente arquitectura ilustra una arquitectura con una aplicación virtual de red activa y otra pasiva.The following architecture demonstrates an architecture with one active and one passive NVA. Esta arquitectura administra tanto la entrada como la salida del tráfico de capa 4:This architecture handles both ingress and egress for layer 4 traffic:

33

Sugerencia

En GitHubhay disponible una solución completa para esta arquitectura.A complete solution for this architecture is available on GitHub.

Esta arquitectura es parecida a la primera arquitectura descrita en este artículo, queThis architecture is similar to the first architecture discussed in this article. incluía una única aplicación virtual de red que acepta y filtra las solicitudes entrantes de capa 4.That architecture included a single NVA accepting and filtering incoming layer 4 requests. Pero a diferencia de ella, agrega una segunda aplicación virtual de red pasiva para proporcionar alta disponibilidad.This architecture adds a second passive NVA to provide high availability. Si se produce un error en la aplicación virtual de red activa, la aplicación virtual de red pasiva se vuelve activa y el UDR y la PIP cambian para apuntar a las tarjetas NIC de la aplicación virtual de red ahora activa.If the active NVA fails, the passive NVA is made active and the UDR and PIP are changed to point to the NICs on the now active NVA. Estos cambios en el UDR y la PIP pueden realizarse manualmente o mediante un proceso automatizado.These changes to the UDR and PIP can either be done manually or using an automated process. El proceso automatizado suele ser un demonio u otro servicio de supervisión que se ejecuta en Azure.The automated process is typically daemon or other monitoring service running in Azure. Lo que hace es consultar un sondeo de estado en la aplicación virtual de red activa y realizar la conmutación del UDR y la PIP cuando detecta un error de la aplicación virtual de red.It queries a health probe on the active NVA and performs the UDR and PIP switch when it detects a failure of the NVA.

En la ilustración anterior se muestra un clúster de ZooKeeper de ejemplo que proporciona un demonio de alta disponibilidad.The preceding figure shows an example ZooKeeper cluster providing a high availability daemon. En el clúster ZooKeeper, un cuórum de nodos elige un nodo principal.Within the ZooKeeper cluster, a quorum of nodes elects a leader. Si se produce un error en el nodo principal, el resto de los nodos celebran elecciones para elegir uno nuevo principal.If the leader fails, the remaining nodes hold an election to elect a new leader. En esta arquitectura, el nodo principal ejecuta el demonio que consulta el punto de conexión de mantenimiento en la aplicación virtual de red.For this architecture, the leader node executes the daemon that queries the health endpoint on the NVA. Si la aplicación virtual de red no logra responder al sondeo de estado, el demonio activa la aplicación virtual de red pasiva.If the NVA fails to respond to the health probe, the daemon activates the passive NVA. A continuación, el demonio llama a la API de REST de Azure para quitar la PIP de la aplicación virtual de red con errores y asociarla a la aplicación virtual de red recién creada.The daemon then calls the Azure REST API to remove the PIP from the failed NVA and attaches it to newly activated NVA. Seguidamente, el demonio modifica el UDR para que apunte a la dirección IP interna de la aplicación virtual de red recién activada.The daemon then modifies the UDR to point to the newly activated NVA's internal IP address.

No incluya los nodos ZooKeeper en una subred a la que solo se pueda acceder mediante una ruta que incluya la aplicación virtual de red.Do not include the ZooKeeper nodes in a subnet that is only accessible using a route that includes the NVA. Si lo hace, los nodos ZooKeeper serán inaccesibles en caso de que se produzca un error en la aplicación virtual de red.Otherwise, the ZooKeeper nodes are inaccessible if the NVA fails. Si por alguna razón se produce un error en el demonio, no podrá acceder a ninguno de los nodos ZooKeeper para diagnosticar el problema.Should the daemon fail for any reason, you won't be able to access any of the ZooKeeper nodes to diagnose the problem.

Para ver la solución completa, incluido el código de ejemplo, consulte los archivos del repositorio de github.To see the complete solution including sample code, see the files in the GitHub repository.

Aplicaciones virtuales de red PIP-UDR sin SNATPIP-UDR NVAs without SNAT

Esta arquitectura emplea dos máquinas virtuales de Azure para hospedar el firewall de aplicación virtual de red en una configuración activo/pasivo que admite la conmutación por error automática, pero no requiere la traducción de direcciones de red de origen (SNAT).This architecture uses two Azure virtual machines to host the NVA firewall in an active-passive configuration that supports automated failover but does not require Source Network Address Translation (SNAT).

Arquitectura de aplicaciones virtuales de red PIP-UDR sin SNAT

Sugerencia

En GitHubhay disponible una solución completa para esta arquitectura.A complete solution for this architecture is available on GitHub.

Esta solución está diseñada para clientes de Azure que no pueden configurar SNAT para las solicitudes entrantes en los firewalls de aplicación virtual de red.This solution is designed for Azure customers who cannot configure SNAT for inbound requests on their NVA firewalls. SNAT oculta la dirección IP de cliente de origen original.SNAT hides the original source client IP address. Si necesita registrar las direcciones IP originales o usarlas en otros componentes de seguridad por capas detrás de las aplicaciones virtuales de red, esta solución ofrece un enfoque básico.If you need to log the original IPs or used them within other layered security components behind your NVAs, this solution offers a basic approach.

La conmutación por error de las entradas de la tabla UDR se automatiza mediante una dirección de próximo salto establecida en la dirección IP de una interfaz en la máquina de virtual del firewall de la aplicación virtual de red activa.The failover of UDR table entries is automated by a next-hop address set to the IP address of an interface on the active NVA firewall virtual machine. La lógica de conmutación por error automatizada se hospeda en una aplicación de función que se crea con Azure Functions.The automated failover logic is hosted in a function app that you create using Azure Functions. El código de la conmutación por error se ejecuta como una función sin servidor en Azure Functions.The failover code runs as a serverless function inside Azure Functions. La implementación es cómoda, rentable y fácil de mantener y personalizar.Deployment is convenient, cost-effective, and easy to maintain and customize. Además, la aplicación de función se hospeda en Azure Functions, por lo que no tiene ninguna dependencia en la red virtual.In addition, the function app is hosted within Azure Functions, so it has no dependencies on the virtual network. Si los cambios realizados en la red virtual afectan a los firewalls de aplicación virtual de red, la aplicación de función continúa su ejecución de forma independiente.If changes to the virtual network impact the NVA firewalls, the function app continues to run independently. Así, las pruebas son más precisas porque tienen lugar fuera de la red virtual con la misma ruta que las solicitudes de cliente entrantes.Testing is more accurate as well, because it takes place outside the virtual network using the same route as the inbound client requests.

Para comprobar la disponibilidad del firewall de la aplicación virtual de red, el código de la aplicación de función realiza sondeos de dos maneras:To check the availability of the NVA firewall, the function app code probes it in one of two ways:

  • Mediante la supervisión del estado de las máquinas virtuales de Azure que hospedan el firewall de la aplicación virtual de red.By monitoring the state of the Azure virtual machines hosting the NVA firewall.

  • Mediante pruebas de la existencia de un puerto abierto en el firewall hacia el servidor web de back-end.By testing whether there is an open port through the firewall to the back-end web server. Para esta opción, el dispositivo virtual de red debe exponer un socket mediante PIP para que el código de la aplicación de función pueda hacer pruebas.For this option, the NVA must expose a socket via PIP for the function app code to test.

Elija el tipo de sondeo que desea usar al configurar la aplicación de función.You choose the type of probe you want to use when you configure the function app. Para ver la solución completa, incluido el código de ejemplo, consulte los archivos del repositorio de github.To see the complete solution including sample code, see the files in the GitHub repository.

pasos siguientesNext steps