Configurar App Service Environment en Application Gateway

En estos últimos días te he estado contando qué es Application Gateway, cómo habilitar el WAF, usarlo como terminador SSL e incluso cómo integrarlo con Palo Alto. Ahora quiero contarte cómo integrarlo además con App Service Environment, un entorno aislado para tus Web Apps en Microsoft Azure.

En este ejemplo voy a utilizar el escenario que expliqué en el post anterior, ya que Azure DNS nos va a ser de gran ayuda un poco más adelante. Por ello, dentro de la red virtual donde está asociado Azure DNS crea un App Service Environment.

App Service Environment – create

Este proceso puede tardar unos minutos.

Mientras que el proceso anterior finaliza puedes aprovechar para crear un Application Gateway dentro de la misma Virtual Network. Necesitas tener creada una subnet que esté vacía, ya que como expliqué en un post anterior, Application Gateway debe tener su propia subnet. Asígnale también un nombre al DNS para que la URL sea más sencilla que una generado de manera aleatoria.

Create application gateway – same Vnet

Una vez que tu ASE esté creado, lo siguiente que necesitas es desplegar en él una Web App. Para ello haz clic en Create a resource > Web App y elige como entorno de despliegue el App Service Environment que creaste.

Web App in ASE

Lo primero que deberías comprobar es que no es posible acceder a la Web App directamente. Si haces clic en el botón Browse de la Web App verás algo como lo siguiente:

web-in-ase.internal.returngis.net cant be reached

Lo cierto es que son buenas noticias, ya que esto significará que nuestra web app sólo será accesible desde la red interna y Application Gateway será capaz de llegar hasta ella. Esto es así ya que la VIP (virtual IP) asociada es únicamente de acceso interno, pero no tiene ninguna IP por la cual podamos acceder al servicio desde Internet. El objetivo es que Application Gateway, que si que llega a dicha IP interna, pueda realizar las llamadas por nosotros y devolver el resultado.

Si accedemos desde una máquina virtual dentro de la red, veremos que es posible acceder a la Web App utilizando la IP interna del balanceador de App Service Environment. Para saber cuál ha sido la IP asignada entra en tu App Service Environment y localizala en IP addresses:

ASE – IP addresses – Internal Load Balancer IP address

Ahora configuraremos en Azure DNS un nuevo A record que apunte a la IP privada del balanceador:

Para comprobar que el servidor DNS funciona correctamente podemos probar a acceder a la web app desde una máquina virtual dentro de la VNET utilizando el nombre que has elegido, en mi caseo web-in-ase.internal.returngis.net:

ASE – Your App Service is up and running

Backend Pool

En la sección backend pool se configuran las máquinas a las cuales queremos llegar a través de Application Gateway, en este caso web-in-ase. Selecciona el backend pool generado por defecto (appGatewayBackendPool) y añade la web app como target.

Backend pool – web-in-ase.internal.returngis.net

Health Probes

El health probe nos permitirá saber si el servicio está respondiendo correctamente. En el apartado Health probes haz clic en el botón Add y crea uno nuevo con los siguientes valores:

Health Probes – aseHealthProbe

 

En este caso necesitamos que el servidor DNS que hemos configurado anteriormente resuelva la petición de web-in-ase.internal.returngis.net ya que si Application Gateway intenta hacer la llamada directamente a la IP no incluirá el host header en la cabecera de la petición y esto hará que la prueba no funcione, devolviendo Unhealthy (error 502).

Http Setting

Http setting tiene la configuración necesaria para saber en qué puerto está alojado el sitio, en qué ruta, e incluso qué health probe debe utilizar para saber si los servidores están respondiendo correctamente. Modifica el que viene por defecto para añadir el Health probe que acabamos de crear.

Http Setting – add custom probe

Http Listener

Http Listener simplemente define por qué puerto y/o ruta debemos acceder a nuestro Application Gateway con el objetivo de acceder a un backend pool u otro. Dejaremos el que aparece por defecto, que simplemente indica que hay que acceder por el puerto 80.

Rule

Por último, aprovechamos la regla que viene por defecto, la cual es el pegamento de todo lo anterior.

Ahora copiamos la URL de nuestro Application Gateway, la pegamos en el navegador y comprobamos que todo funciona correctamente, mostrando la página por defecto de las Web Apps.

ASE via App Gateway

Como puedes comprobar, aparece una página distina a la que vemos de manera interna. Esto es así porque la petición está llegando desde un hostname que no está registrado en los Customs Domains de la web app. Para solucionarlo, basta con ir a la Web App > Custom domains y añadir el DNS del Application Gateway:

web-in-ase Custom domains

En tan solos unos minutos podrás ver la web app up and running a través de Application Gateway.

App Service up and running with custom domains updated

¡Saludos!