可伸缩企业 Web 路由:Azure App Gateway + VMSS 与 Azure CLI

发布: (2026年2月28日 GMT+8 11:24)
5 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的文章正文内容,我将为您翻译成简体中文并保持原有的 Markdown 格式、代码块和链接不变。谢谢!

构建弹性 Web 架构不仅仅需要单台服务器

在本教程中,我们将从简单的负载均衡转向 第 7 层应用路由。我们将部署一个 虚拟机规模集 (VMSS),并使用 Azure 应用网关 进行前端接入,全部使用 Azure CLI

🏗️ 架构

不同于标准的负载均衡器(第 4 层),应用网关(第 7 层) 可以根据 HTTP 头部和 URL 路径做路由决策。我们将其与 VMSS 结合,以确保后端能够根据需求自动扩展。

Architecture diagram

🛠️ 目标

  • 部署 Application Gateway 以实现高级 Web 流量管理。
  • 精通 Azure CLI 用于基础设施自动化。
  • 使用 VMSS 扩展 自动 “引导” 应用程序。
  • 使用 Python 设置模拟服务 进行隔离网络测试。

💻 完整自动化脚本

将此脚本复制并保存为 deploy_appgw.sh。如果您使用 Windows,可以在 WSLAzure 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

❓ 故障排除技巧

  1. 子网限制
    应用网关 v2 必须 位于其专用子网中。不能在 appgw-subnet 中放置虚拟机或其他资源。如果部署因 “Subnet Busy” 错误而失败,请检查是否已有 NIC 存在。

  2. 扩展问题
    如果 Web 服务没有响应,请检查 VMSS 扩展的状态:

    az vmss extension show \
      --resource-group my-automated-rg3 \
      --vmss-name Hub-VMSS \
      --name CustomScript
  3. 应用网关 vs. 负载均衡器:该选哪个?

    • 负载均衡器 (L4) – 用于内部服务的高性能、低延迟流量(例如 SQL、非 HTTP 协议)。
    • 应用网关 (L7) – 当需要 SSL 终止、URL‑路径路由或 Web 应用防火墙 (WAF) 保护时使用。

🏁 结论

通过将 Application GatewayVMSS 结合,我们为 Azure 网络构建了可投入生产的入口点。使用 CLI 自动化和扩展确保我们的环境可重复部署且易于扩展。

0 浏览
Back to Blog

相关文章

阅读更多 »