在这个教程中,你要用 Azure CLI 在 Azure DNS 中创建一个流量管理器关联记录。 流量管理器关联记录将一个DNS记录直接连接到Azure 流量管理器配置文件,向没有中间CNAME解析的客户端返回IP地址。
Important
流量管理器关联记录当前处于预览阶段。 有关适用于 beta 版、预览版或尚未正式发布的 Azure 功能的法律条款,请参阅 Azure 预览补充使用条款。
关于基于门户的攻略,请参见使用 Azure 门户创建流量管理器链接记录。 有关概念概述,请参见 交通管理链接记录概述。
本教程中,您将学习如何:
- 建立网络和虚拟机基础设施。
- 创建一个带端点的流量管理器配置文件。
- 使用 Azure CLI 创建 Traffic Manager 关联记录。
- 测试流量管理器的关联记录。
如果没有 Azure 订阅,可在开始前创建一个试用帐户。
Prerequisites
拥有有效订阅的 Azure 帐户。
在本地安装 Azure CLI 2.60 或更高版本。 请运行
az --version以查看版本。 若要安装或升级,请参阅安装 Azure CLI。托管在 Azure DNS 中的域名。 如果你没有 Azure DNS 区域,创建一个并委托你的域名给 Azure DNS。
Note
在本教程中,
contoso.com用作示例域名。 将contoso.com替换为你自己的域名。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用本地安装,请使用 az login 命令登录到Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展的详细信息,请参阅 将扩展与 Azure CLI 配合使用。
运行az version命令,以查看已安装的版本和依赖库。 若要升级到最新版本,请运行az upgrade。
设置环境变量。
请为本教程中使用的资源名称和位置设置变量,以避免在每个命令中重复使用。
RESOURCE_GROUP="test-rg"
LOCATION="chinanorth3"
VNET_NAME="vnet-1"
TM_PROFILE_NAME="tm-profile"
DNS_ZONE="contoso.com"
创建资源组
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION
创建虚拟网络
az network vnet create \
--resource-group $RESOURCE_GROUP \
--name $VNET_NAME \
--address-prefix 10.10.0.0/16 \
--subnet-name subnet-1 \
--subnet-prefix 10.10.0.0/24
创建 Web 服务器虚拟机
创建两台带有公共IP地址的Ubuntu虚拟机作为流量管理器端点。
创建公共IP地址
az network public-ip create \
--resource-group $RESOURCE_GROUP \
--name public-ip-1 \
--sku Standard \
--dns-name vm-1-tmlink
az network public-ip create \
--resource-group $RESOURCE_GROUP \
--name public-ip-2 \
--sku Standard \
--dns-name vm-2-tmlink
创建网络安全组
az network nsg create \
--resource-group $RESOURCE_GROUP \
--name nsg-1
az network nsg rule create \
--resource-group $RESOURCE_GROUP \
--nsg-name nsg-1 \
--name AllowHTTP \
--protocol tcp \
--priority 100 \
--destination-port-range 80
az network nsg rule create \
--resource-group $RESOURCE_GROUP \
--nsg-name nsg-1 \
--name AllowHTTPS \
--protocol tcp \
--priority 110 \
--destination-port-range 443
创建虚拟机网卡
az network nic create \
--resource-group $RESOURCE_GROUP \
--name nic-1 \
--vnet-name $VNET_NAME \
--subnet subnet-1 \
--network-security-group nsg-1 \
--public-ip-address public-ip-1
az network nic create \
--resource-group $RESOURCE_GROUP \
--name nic-2 \
--vnet-name $VNET_NAME \
--subnet subnet-1 \
--network-security-group nsg-1 \
--public-ip-address public-ip-2
创建虚拟机
Note
用你的SSH公钥文件内容替换 <your-ssh-public-key> ,或者用 --generate-ssh-keys 它创建一个新的密钥对。
az vm create \
--resource-group $RESOURCE_GROUP \
--name vm-1 \
--nics nic-1 \
--image Ubuntu2404 \
--admin-username azureuser \
--generate-ssh-keys \
--no-wait
az vm create \
--resource-group $RESOURCE_GROUP \
--name vm-2 \
--nics nic-2 \
--image Ubuntu2404 \
--admin-username azureuser \
--generate-ssh-keys
最后一个命令等待 vm-2 的创建。 命令返回时,两个虚拟机都已准备好。
在两个虚拟机上安装 NGINX
az vm run-command invoke \
--resource-group $RESOURCE_GROUP \
--name vm-1 \
--command-id RunShellScript \
--scripts "sudo apt-get update && sudo apt-get install -y nginx && echo 'Hello World from vm-1' | sudo tee /var/www/html/index.html"
az vm run-command invoke \
--resource-group $RESOURCE_GROUP \
--name vm-2 \
--command-id RunShellScript \
--scripts "sudo apt-get update && sudo apt-get install -y nginx && echo 'Hello World from vm-2' | sudo tee /var/www/html/index.html"
检索公共IP地址
注意两个虚拟机的IP地址。 添加流量管理器端点时需要它们。
VM1_IP=$(az network public-ip show \
--resource-group $RESOURCE_GROUP \
--name public-ip-1 \
--query ipAddress \
--output tsv)
VM2_IP=$(az network public-ip show \
--resource-group $RESOURCE_GROUP \
--name public-ip-2 \
--query ipAddress \
--output tsv)
echo "vm-1 IP: $VM1_IP"
echo "vm-2 IP: $VM2_IP"
创建流量管理器配置文件
az network traffic-manager profile create \
--resource-group $RESOURCE_GROUP \
--name $TM_PROFILE_NAME \
--routing-method Priority \
--unique-dns-name tm-profile-$RANDOM
向流量管理器配置文件添加端点
az network traffic-manager endpoint create \
--resource-group $RESOURCE_GROUP \
--profile-name $TM_PROFILE_NAME \
--name tmendpoint-1 \
--type externalEndpoints \
--target $VM1_IP \
--priority 1
az network traffic-manager endpoint create \
--resource-group $RESOURCE_GROUP \
--profile-name $TM_PROFILE_NAME \
--name tmendpoint-2 \
--type externalEndpoints \
--target $VM2_IP \
--priority 2
获取流量管理器配置文件的完整资源ID。 创建关联记录时需要它。
TM_PROFILE_ID=$(az network traffic-manager profile show \
--resource-group $RESOURCE_GROUP \
--name $TM_PROFILE_NAME \
--query id \
--output tsv)
echo "Traffic Manager profile ID: $TM_PROFILE_ID"
创建流量管理器关联记录
使用 az network dns record-set a create 并配合 --traffic-management-profile 参数创建流量管理器链接记录。 以下命令在区域顶点()@创建一个A记录。
Note
该--traffic-management-profile参数可在 Azure CLI 2.60 及以上版本中使用,并且需要 Traffic Manager Linked Records 预览 API(2024-06-01-preview或更高版本)。
az network dns record-set a create \
--resource-group <dns-zone-resource-group> \
--zone-name $DNS_ZONE \
--name "@" \
--traffic-management-profile $TM_PROFILE_ID
Note
用包含你Azure DNS区域的资源组替换<dns-zone-resource-group>。 这可能与包含流量管理器配置文件的资源组不同。
要为子域名创建流量管理器链接记录,而不是区域顶点,请用子域名替换 "@" ,例如 "www":
az network dns record-set a create \
--resource-group <dns-zone-resource-group> \
--zone-name $DNS_ZONE \
--name "www" \
--traffic-management-profile $TM_PROFILE_ID
核实链接的记录
az network dns record-set a show \
--resource-group <dns-zone-resource-group> \
--zone-name $DNS_ZONE \
--name "@"
输出包含一个 trafficManagementProfile 属性,其中带有流量管理器配置文件资源 ID,确认链接已建立:
{
"name": "@",
"properties": {
"trafficManagementProfile": {
"id": "/subscriptions/.../resourceGroups/test-rg/providers/Microsoft.Network/trafficManagerProfiles/tm-profile"
},
"TTL": 30,
...
}
}
Note
输出中显示的TTL值继承自流量管理器配置文件的DNS配置。 记录创建时指定的任何TTL值都被忽略。
测试流量管理器关联记录
要测试名称解析,可以直接查询你所在区域的 Azure DNS 名称服务器之一。 首先,列出你所在区域的名称服务器:
az network dns record-set ns show \
--resource-group <dns-zone-resource-group> \
--zone-name $DNS_ZONE \
--name "@" \
--query "nsRecords[0].nsdname" \
--output tsv
使用返回的名称服务器和 nslookup 测试解析:
nslookup contoso.com <name-server-from-above>
响应包含最高优先级健康流量管理器端点的IP地址——答案中没有任何CNAME记录。 这确认了流量管理器关联记录直接返回IP地址。
测试故障转移
访问您的域名。 你应该看看 VM-1 的 NGINX 页面。
停止 vm-1 虚拟机:
az vm stop --resource-group $RESOURCE_GROUP --name vm-1等待几分钟,让 Traffic Manager 检测到该终结点处于不正常状态。
清除本地DNS缓存(
ipconfig /flushdnsWindows和sudo dscacheutil -flushcachemacOS上),然后重新浏览你的域名。 你现在应该能看到 vm-2的页面了。重启 vm-1 以恢复原始配置:
az vm start --resource-group $RESOURCE_GROUP --name vm-1
清理资源
当你不再需要本教程中创建的资源时,删除资源组和DNS记录:
# Delete the resource group and all resources within it
az group delete --name $RESOURCE_GROUP --yes --no-wait
# Delete the Traffic Manager Linked Record from the DNS zone
az network dns record-set a delete \
--resource-group <dns-zone-resource-group> \
--zone-name $DNS_ZONE \
--name "@" \
--yes
后续步骤
在这个教程中,你用 Azure CLI 创建了一个流量管理器的链接记录。 该记录将你的 DNS 区域顶点连接到 Traffic Manager 配置文件,直接返回 IP 地址给客户端。
- 详细了解流量管理器关联记录。
- 使用 Azure PowerShell 或 Azure 门户创建 Traffic Manager Linked Record。
- 详细了解流量管理器的路由方法。
- 详细了解严格类型化配置文件。