可伸缩企业 Web 路由:Azure App Gateway + VMSS 与 Azure CLI
Source: Dev.to
请提供您希望翻译的文章正文内容,我将为您翻译成简体中文并保持原有的 Markdown 格式、代码块和链接不变。谢谢!
构建弹性 Web 架构不仅仅需要单台服务器
在本教程中,我们将从简单的负载均衡转向 第 7 层应用路由。我们将部署一个 虚拟机规模集 (VMSS),并使用 Azure 应用网关 进行前端接入,全部使用 Azure CLI。
🏗️ 架构
不同于标准的负载均衡器(第 4 层),应用网关(第 7 层) 可以根据 HTTP 头部和 URL 路径做路由决策。我们将其与 VMSS 结合,以确保后端能够根据需求自动扩展。
🛠️ 目标
- 部署 Application Gateway 以实现高级 Web 流量管理。
- 精通 Azure CLI 用于基础设施自动化。
- 使用 VMSS 扩展 自动 “引导” 应用程序。
- 使用 Python 设置模拟服务 进行隔离网络测试。
💻 完整自动化脚本
将此脚本复制并保存为 deploy_appgw.sh。如果您使用 Windows,可以在 WSL 或 Azure Cloud Shell 中运行它。
#!/bin/bash
# --- 1. Configuration ---
rg="my-automated-rg3"
location="eastus2"
vnet_name="shared-vnet"
vmss_name="Hub-VMSS"
appgw_name="Hub-AppGateway"
echo "--- Starting Phase 6: Application Gateway & VMSS Deployment ---"
# --- 2. Create the Dedicated App Gateway Subnet ---
# App Gateway v2 requires its own empty subnet (min /24 recommended)
echo "Adding Application Gateway Subnet..."
az network vnet subnet create \
--resource-group $rg \
--vnet-name $vnet_name \
--name appgw-subnet \
--address-prefixes 10.0.4.0/24
# --- 3. Deploy the Virtual Machine Scale Set (VMSS) ---
echo "Deploying VMSS (The Elastic Backend)..."
az vmss create \
--resource-group $rg \
--name $vmss_name \
--image Canonical:0001-com-ubuntu-server-jammy:22_04-lts:latest \
--vm-sku Standard_B2ts_v2 \
--instance-count 2 \
--vnet-name $vnet_name \
--subnet workload-subnet \
--upgrade-policy-mode automatic \
--admin-username azureuser \
--generate-ssh-keys
# --- 4. Automate App Deployment with VMSS Extensions ---
# This "bootstraps" a Python mock service on every instance as it scales
echo "Applying Custom Script Extension..."
az vmss extension set \
--publisher Microsoft.Azure.Extensions \
--version 2.0 \
--name CustomScript \
--resource-group $rg \
--vmss-name $vmss_name \
--settings '{"commandToExecute": "mkdir -p /tmp/www && echo \"
后端实例: $(hostname)
\" > /tmp/www/index.html && cd /tmp/www && nohup python3 -m http.server 80 &"}'
# --- 5. Deploy the Application Gateway ---
echo "Creating Public IP for Gateway..."
az network public-ip create \
--resource-group $rg \
--name appgw-public-ip \
--allocation-method Static \
--sku Standard
echo "Deploying Application Gateway (Standard_v2)..."
az network application-gateway create \
--name $appgw_name \
--resource-group $rg \
--location $location \
--capacity 2 \
--sku Standard_v2 \
--public-ip-address appgw-public-ip \
--vnet-name $vnet_name \
--subnet appgw-subnet \
--frontend-port 80 \
--priority 100 \
--http-settings-port 80 \
--http-settings-protocol Http
# --- 6. Connect VMSS to the Gateway Backend Pool ---
echo "Linking VMSS to Application Gateway..."
backend_pool_id=$(az network application-gateway address-pool show \
--gateway-name $appgw_name \
--resource-group $rg \
--name appGatewayBackendPool \
--query id -o tsv)
az vmss update \
--resource-group $rg \
--name $vmss_name \
--set virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].applicationGatewayBackendAddressPools="[{'id': '$backend_pool_id'}]"
# Force update existing instances
az vmss update-instances --instance-ids "*" --name $vmss_name --resource-group $rg
echo "--- DEPLOYMENT COMPLETE ---"
🔍 部署后检查 (Azure CLI)
CLI 是检查实时资源的最强大工具。使用这些命令验证您的设置。
检查后端健康
确认 Application Gateway 能够成功“看到”和“探测”VMSS 实例:
az network application-gateway show-backend-health \
--name Hub-AppGateway \
--resource-group my-automated-rg3
扩容!
通过增加实例数量来测试设计的弹性:
az vmss scale \
--resource-group my-automated-rg3 \
--name Hub-VMSS \
--new-capacity 4
❓ 故障排除技巧
-
子网限制
应用网关 v2 必须 位于其专用子网中。不能在appgw-subnet中放置虚拟机或其他资源。如果部署因 “Subnet Busy” 错误而失败,请检查是否已有 NIC 存在。 -
扩展问题
如果 Web 服务没有响应,请检查 VMSS 扩展的状态:az vmss extension show \ --resource-group my-automated-rg3 \ --vmss-name Hub-VMSS \ --name CustomScript -
应用网关 vs. 负载均衡器:该选哪个?
- 负载均衡器 (L4) – 用于内部服务的高性能、低延迟流量(例如 SQL、非 HTTP 协议)。
- 应用网关 (L7) – 当需要 SSL 终止、URL‑路径路由或 Web 应用防火墙 (WAF) 保护时使用。
🏁 结论
通过将 Application Gateway 与 VMSS 结合,我们为 Azure 网络构建了可投入生产的入口点。使用 CLI 自动化和扩展确保我们的环境可重复部署且易于扩展。
