Creación de una puerta de enlace de aplicaciones que hospede varios sitios web mediante la CLI de Azure
Puede usar la CLI de Azure para configurar el hospedaje de varios sitios web cuando se crea una puerta de enlace de aplicaciones. En este artículo se definen grupos de direcciones de back-end mediante conjuntos de escalado de máquinas virtuales. Después, configurará agentes de escucha y reglas basados en los dominios que posee para asegurarse de que el tráfico web llega a los servidores adecuados en los grupos. En este artículo se da por supuesto que posee varios dominios y se van a utilizar los ejemplos de www.contoso.com y www.fabrikam.com.
En este artículo aprenderá a:
- Configuración de la red
- Creación de una puerta de enlace de aplicaciones
- Crear un agente de escucha de back-end
- Creación de reglas de enrutamiento
- Crear Virtual Machine Scale Sets con los grupos de back-end
- Creación de un registro CNAME en el dominio
Si lo prefiere, puede realizar los pasos de este procedimiento mediante Azure PowerShell.
Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
Requisitos previos
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
- Este tutorial requiere la versión 2.0.4 o posterior de la CLI de Azure. Si usa Azure Cloud Shell, ya está instalada la versión más reciente.
Crear un grupo de recursos
Un grupo de recursos es un contenedor lógico en el que se implementan y se administran los recursos de Azure. Para crear un grupo de recursos, use az group create.
En el ejemplo siguiente, se crea un grupo de recursos llamado myResourceGroupAG en la ubicación eastus.
az group create --name myResourceGroupAG --location eastus
Crear recursos de red
Cree la red virtual y la subred denominada myAGSubnet mediante az network vnet create. A continuación, puede agregar la subred que necesitan los servidores de back-end mediante az network vnet subnet create. Cree la dirección IP pública llamada myAGPublicIPAddress mediante az network public-ip create.
az network vnet create \
--name myVNet \
--resource-group myResourceGroupAG \
--location eastus \
--address-prefix 10.0.0.0/16 \
--subnet-name myAGSubnet \
--subnet-prefix 10.0.1.0/24
az network vnet subnet create \
--name myBackendSubnet \
--resource-group myResourceGroupAG \
--vnet-name myVNet \
--address-prefix 10.0.2.0/24
az network public-ip create \
--resource-group myResourceGroupAG \
--name myAGPublicIPAddress \
--allocation-method Static \
--sku Standard
Creación de la puerta de enlace de aplicaciones
Puede usar az network application-gateway create para crear la puerta de enlace de aplicaciones. Cuando se crea una puerta de enlace de aplicaciones mediante la CLI de Azure, se especifica información de configuración, como capacidad, SKU y HTTP. La puerta de enlace de aplicaciones se asigna a los elementos myAGSubnet y myAGPublicIPAddress creados anteriormente.
az network application-gateway create \
--name myAppGateway \
--location eastus \
--resource-group myResourceGroupAG \
--vnet-name myVNet \
--subnet myAGsubnet \
--capacity 2 \
--sku Standard_v2 \
--http-settings-cookie-based-affinity Disabled \
--frontend-port 80 \
--http-settings-port 80 \
--http-settings-protocol Http \
--public-ip-address myAGPublicIPAddress \
--priority 10
La puerta de enlace de aplicaciones puede tardar varios minutos en crearse. Después de crear la puerta de enlace de aplicaciones, puede ver estas nuevas características de ella:
- appGatewayBackendPool: una puerta de enlace de aplicaciones debe tener al menos un grupo de direcciones de servidores back-end.
- appGatewayBackendHttpSettings: especifica que se use el puerto 80 y un protocolo HTTP para la comunicación.
- appGatewayHttpListener: agente de escucha predeterminado asociado con appGatewayBackendPool.
- appGatewayFrontendIP: asigna myAGPublicIPAddress a appGatewayHttpListener.
- rule1: la regla de enrutamiento predeterminada asociada a appGatewayHttpListener.
Adición de grupos de back-end
Agregue los grupos de back-end necesarios para contener los servidores de back-end mediante az network application-gateway address-pool create.
az network application-gateway address-pool create \
--gateway-name myAppGateway \
--resource-group myResourceGroupAG \
--name contosoPool
az network application-gateway address-pool create \
--gateway-name myAppGateway \
--resource-group myResourceGroupAG \
--name fabrikamPool
Incorporación de agentes de escucha
Agregue los clientes de escucha que sean necesarios para enrutar el tráfico mediante az network application-gateway http-listener create.
Nota:
Con la SKU de Application Gateway o WAF v2, también puede configurar hasta cinco nombres de host por cliente de escucha y puede usar caracteres comodín en el nombre de host. Consulte los nombres de host comodín en el cliente de escucha para obtener más información.
Para usar varios nombres de host y caracteres comodín en un cliente de escucha mediante la CLI de Azure, debe usar --host-names
en lugar de --host-name
. Con los nombres de host, puede mencionar hasta cinco nombres de host como valores separados por espacios. Por ejemplo: --host-names "*.contoso.com *.fabrikam.com"
az network application-gateway http-listener create \
--name contosoListener \
--frontend-ip appGatewayFrontendIP \
--frontend-port appGatewayFrontendPort \
--resource-group myResourceGroupAG \
--gateway-name myAppGateway \
--host-name www.contoso.com
az network application-gateway http-listener create \
--name fabrikamListener \
--frontend-ip appGatewayFrontendIP \
--frontend-port appGatewayFrontendPort \
--resource-group myResourceGroupAG \
--gateway-name myAppGateway \
--host-name www.fabrikam.com
Incorporación de reglas de enrutamiento
Las reglas se procesan en el orden en que aparecen si no se usa el campo de prioridad de regla. El tráfico se dirige mediante la primera regla que coincide, con independencia de la especificidad. Por ejemplo, si tiene una regla que usa un agente de escucha básico y una regla que usa un agente de escucha multisitio en el mismo puerto, la regla con el agente de escucha multisitio debe aparecer antes que la regla con el agente de escucha básico para que la regla multisitio funcione según lo previsto.
En este ejemplo, va a crear dos reglas nuevas y a eliminar la regla predeterminada creada cuando implementó la puerta de enlace de aplicaciones. Puede agregar la regla mediante az network application-gateway rule create.
az network application-gateway rule create \
--gateway-name myAppGateway \
--name contosoRule \
--resource-group myResourceGroupAG \
--http-listener contosoListener \
--rule-type Basic \
--address-pool contosoPool \
--priority 200
az network application-gateway rule create \
--gateway-name myAppGateway \
--name fabrikamRule \
--resource-group myResourceGroupAG \
--http-listener fabrikamListener \
--rule-type Basic \
--address-pool fabrikamPool \
--priority 100
az network application-gateway rule delete \
--gateway-name myAppGateway \
--name rule1 \
--resource-group myResourceGroupAG
Adición de prioridad a las reglas de enrutamiento
Para asegurarse de que las reglas más específicas se procesan primero, use el campo de prioridad de la regla para tener la seguridad de que tienen mayor prioridad. El campo Prioridad de la regla debe establecerse para todas las reglas de enrutamiento de solicitudes existentes, y las reglas creadas más adelante también deben tener un valor de prioridad de regla.
az network application-gateway rule create \
--gateway-name myAppGateway \
--name contosoRule \
--resource-group myResourceGroupAG \
--http-listener contosoListener \
--rule-type Basic \
--priority 200 \
--address-pool contosoPool
az network application-gateway rule create \
--gateway-name myAppGateway \
--name fabrikamRule \
--resource-group myResourceGroupAG \
--http-listener fabrikamListener \
--rule-type Basic \
--priority 100 \
--address-pool fabrikamPool
Creación de implementaciones de Virtual Machine Scale Sets
En este ejemplo, creará tres conjuntos de Virtual Machine Scale Sets que admiten los tres grupos de back-end en la puerta de enlace de aplicaciones. Los conjuntos de escalado que crea se llaman myvmss1, myvmss2 y myvmss3. Cada conjunto de escalado contiene dos instancias de máquina virtual en las que se instala IIS.
for i in `seq 1 2`; do
if [ $i -eq 1 ]
then
poolName="contosoPool"
fi
if [ $i -eq 2 ]
then
poolName="fabrikamPool"
fi
az vmss create \
--name myvmss$i \
--resource-group myResourceGroupAG \
--image Ubuntu2204 \
--admin-username azureuser \
--admin-password Azure123456! \
--instance-count 2 \
--vnet-name myVNet \
--subnet myBackendSubnet \
--vm-sku Standard_D1_v2 \
--upgrade-policy-mode Automatic \
--app-gateway myAppGateway \
--backend-pool-name $poolName
done
Instalación de NGINX
for i in `seq 1 2`; do
az vmss extension set \
--publisher Microsoft.Azure.Extensions \
--version 2.0 \
--name CustomScript \
--resource-group myResourceGroupAG \
--vmss-name myvmss$i \
--settings '{ "fileUris": ["https://raw.githubusercontent.com/Azure/azure-docs-powershell-samples/master/application-gateway/iis/install_nginx.sh"],
"commandToExecute": "./install_nginx.sh" }'
done
Creación de un registro CNAME en el dominio
Después de crear la puerta de enlace de aplicaciones con la dirección IP pública, puede obtener la dirección DNS y usarla para crear un registro CNAME en el dominio. Para obtener la dirección DNS de la puerta de enlace de aplicaciones, puede usar az network public-ip show. Copie el valor de fqdn de DNSSettings y úselo como valor del registro CNAME que creó.
az network public-ip show \
--resource-group myResourceGroupAG \
--name myAGPublicIPAddress \
--query [dnsSettings.fqdn] \
--output tsv
No se recomienda el uso de registros A, ya que la IP virtual puede cambiar al reiniciarse la puerta de enlace de aplicaciones.
Prueba de la puerta de enlace de aplicaciones
Escriba el nombre de dominio en la barra de direcciones del explorador. Por ejemplo, http://www.contoso.com..
Cambie la dirección al otro dominio. Debería ver algo parecido al ejemplo siguiente:
Limpieza de recursos
Cuando ya no los necesite, quite el grupo de recursos, la puerta de enlace de aplicaciones y todos los recursos relacionados.
az group delete --name myResourceGroupAG