你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:使用 Azure CLI 通过 Azure Virtual Network Manager 创建网格网络拓扑
在 Azure CLI 中开始使用 Azure Virtual Network Manager 管理所有虚拟网络的连接。
在本快速入门中,你将部署三个虚拟网络,并使用 Azure Virtual Network Manager 创建网格网络拓扑。 然后验证是否应用了连接配置。
先决条件
- 具有活动订阅的 Azure 帐户。 免费创建帐户。
- 最新的 Azure CLI,或者可以在门户中使用 Azure Cloud Shell。
- Azure Virtual Network Manager 扩展。 如果要添加它,请运行
az extension add -n virtual-network-manager
。 - 若要修改动态网络组,必须仅通过 Azure RBAC 角色分配授予访问权限。 不支持经典管理员/旧授权。
登录到 Azure 帐户,然后选择订阅
要开始配置,请登录到 Azure 帐户。 如果使用 Cloud Shell“试用”功能,你将自动登录。
az login
选择部署了 Virtual Network Manager 的订阅:
az account set \
--subscription "<subscription_id>"
更新适用于 Azure CLI 的 Virtual Network Manager 扩展:
az extension update --name virtual-network-manager
创建资源组
在可以部署 Azure Virtual Network Manager 之前,必须使用 az group create 创建一个资源组来托管它。 此示例会在美国西部这一位置创建名为 myAVNMResourceGroup 的资源组:
az group create \
--name "myAVNMResourceGroup" \
--location "westus"
创建 Virtual Network Manager 实例
定义此 Virtual Network Manager 实例的范围和访问类型。 使用 az network manager create 创建作用域。 将值 <subscription_id>
替换为希望 Virtual Network Manager 为其管理虚拟网络的订阅。 将 <mgName\>
替换为要管理的管理组。
az network manager create \
--location "westus" \
--name "myAVNM" \
--resource-group "myAVNMResourceGroup" \
--scope-accesses "Connectivity" "SecurityAdmin" \
--network-manager-scopes subscriptions="/subscriptions/<subscription_id>"
创建网络组
Virtual Network Manager 通过将虚拟网络放置在网络组中,将配置应用于虚拟网络组。 使用 az network manager group create 创建网络组:
az network manager group create \
--name "myNetworkGroup" \
--network-manager-name "myAVNM" \
--resource-group "myAVNMResourceGroup" \
--description "Network Group for Production virtual networks"
创建虚拟网络
使用 az network vnet create 创建五个虚拟网络。 此示例在美国西部位置创建了名为 VNetA、VNetB、VNetC 和 VNetD 的虚拟网络。 每个虚拟网络都带有一个用于动态成员身份的 networkType
标记。 如果已有可用于创建网格网络的虚拟网络,则可以跳转到下一部分。
az network vnet create \
--name "VNetA" \
--resource-group "myAVNMResourceGroup" \
--address-prefix "10.0.0.0/16" \
--tags "NetworkType=Prod"
az network vnet create \
--name "VNetB" \
--resource-group "myAVNMResourceGroup" \
--address-prefix "10.1.0.0/16" \
--tags "NetworkType=Prod"
az network vnet create \
--name "VNetC" \
--resource-group "myAVNMResourceGroup" \
--address-prefix "10.2.0.0/16" \
--tags "NetworkType=Prod"
az network vnet create \
--name "VNetD" \
--resource-group "myAVNMResourceGroup" \
--address-prefix "10.3.0.0/16" \
--tags "NetworkType=Test"
az network vnet create \
--name "VNetE" \
--resource-group "myAVNMResourceGroup" \
--address-prefix "10.4.0.0/16" \
--tags "NetworkType=Test"
将一个子网添加到每个虚拟网络
通过向每个虚拟网络添加一个 /24 子网完成虚拟网络的配置。 使用 az network vnet subnet create 创建名为 default 的子网配置:
az network vnet subnet create \
--name "default" \
--resource-group "myAVNMResourceGroup" \
--vnet-name "VNetA" \
--address-prefix "10.0.0.0/24"
az network vnet subnet create \
--name "default" \
--resource-group "myAVNMResourceGroup" \
--vnet-name "VNetB" \
--address-prefix "10.1.0.0/24"
az network vnet subnet create \
--name "default" \
--resource-group "myAVNMResourceGroup" \
--vnet-name "VNetC" \
--address-prefix "10.2.0.0/24"
az network vnet subnet create \
--name "default" \
--resource-group "myAVNMResourceGroup" \
--vnet-name "VNetD" \
--address-prefix "10.3.0.0/24"
az network vnet subnet create \
--name "default" \
--resource-group "myAVNMResourceGroup" \
--vnet-name "VNetE" \
--address-prefix "10.4.0.0/24"
为网格配置定义成员身份
通过 Azure Virtual Network Manager,可以使用两种方法将成员身份添加到网络组。 静态成员身份涉及手动添加虚拟网络,动态成员身份涉及使用 Azure Policy 根据条件动态添加虚拟网络。 选择要为网格配置成员身份完成的选项。
静态成员身份选项
凭借静态成员身份,可通过 az network manager group static-member create 为网格配置将三个虚拟网络手动添加到网络组。 将 <subscription_id>
替换为创建了这些虚拟网络的订阅。
az network manager group static-member create \
--name "VNetA" \
--network-group "myNetworkGroup" \
--network-manager "myAVNM" \
--resource-group "myAVNMResourceGroup" \
--resource-id "/subscriptions/<subscription_id>/resourceGroups/myAVNMResourceGroup/providers/Microsoft.Network/virtualnetworks/VNetA"
az network manager group static-member create \
--name "VNetB" \
--network-group "myNetworkGroup" \
--network-manager "myAVNM" \
--resource-group "myAVNMResourceGroup" \
--resource-id "/subscriptions/<subscription_id>/resourceGroups/myAVNMResourceGroup/providers/Microsoft.Network/virtualnetworks/VNetB"
az network manager group static-member create \
--name "VNetC" \
--network-group "myNetworkGroup" \
--network-manager "myAVNM" \
--resource-group "myAVNMResourceGroup" \
--resource-id "/subscriptions/<subscription_id>/resourceGroups/myAVNMResourceGroup/providers/Microsoft.Network/virtualnetworks/VNetC"
动态成员身份选项
使用 Azure Policy,可以将 Prod
的值为 networkType
的三个虚拟网络动态添加到网络组。 这三个虚拟网络将会成为网格配置的一部分。
可以将策略应用于订阅或管理组,并且必须始终在创建策略的级别或更高级别定义这些策略。 只能将策略范围内的虚拟网络添加到网络组。
创建策略定义
使用 az policy definition create 为标记为 Prod
的虚拟网络创建策略定义。 将 <subscription_id>
替换为要向其应用此策略的订阅。 如果要将它应用于管理组,请将 --subscription <subscription_id>
替换为 --management-group <mgName>
。
az policy definition create \
--name "ProdVNets" \
--description "Choose Prod virtual networks only" \
--rules "{\"if\":{\"allOf\":[{\"field\":\"Name\",\"contains\":\"VNet\"},{\"field\":\"tags['NetworkType']\",\"equals\":\"Prod\"}]},\"then\":{\"effect\":\"addToNetworkGroup\",\"details\":{\"networkGroupId\":\"/subscriptions/<subscription_id>/resourceGroups/myAVNMResourceGroup/providers/Microsoft.Network/networkManagers/myAVNM/networkGroups/myNetworkGroup\"}}}" \
--subscription <subscription_id> \
--mode "Microsoft.Network.Data"
应用策略定义
定义策略后,必须使用 az policy assignment create 应用该策略。 将 <subscription_id>
替换为要向其应用此策略的订阅。 如果要将它应用于管理组,请将 --scope "/subscriptions/<subscription_id>"
替换为 --scope "/providers/Microsoft.Management/managementGroups/<mgName>
,并将 <mgName\>
替换为管理组。
az policy assignment create \
--name "ProdVNets" \
--description "Take only virtual networks tagged NetworkType:Prod" \
--scope "/subscriptions/<subscription_id>" \
--policy "/subscriptions/<subscription_id>/providers/Microsoft.Authorization/policyDefinitions/ProdVNets"
创建配置
现在,你已创建了网络组并为其提供了正确的虚拟网络,可使用 az network manager connect-config create 创建网格网络拓扑配置。 请将 <subscription_id>
替换为你的订阅。
az network manager connect-config create \
--configuration-name "connectivityconfig" \
--description "Production Mesh Connectivity Config Example" \
--applies-to-groups network-group-id="/subscriptions/<subscription_id>/resourceGroups/myAVNMResourceGroup/providers/Microsoft.Network/networkManagers/myAVNM/networkGroups/myNetworkGroup" \
--connectivity-topology "Mesh" \
--network-manager-name "myAVNM" \
--resource-group "myAVNMResourceGroup"
提交部署
要使配置生效,可使用 az network manager post-commit 将配置提交到目标区域:
az network manager post-commit \
--network-manager-name "myAVNM" \
--commit-type "Connectivity" \
--configuration-ids "/subscriptions/<subscription_id>/resourceGroups/myANVMResourceGroup/providers/Microsoft.Network/networkManagers/myAVNM/connectivityConfigurations/connectivityconfig" \
--target-locations "westus" \
--resource-group "myAVNMResourceGroup"
验证配置
在使用 az network manager list-effective-connectivity-config时,虚拟网络将会显示应用于它们的配置:
az network manager list-effective-connectivity-config \
--resource-group "myAVNMResourceGroup" \
--virtual-network-name "VNetA"
az network manager list-effective-connectivity-config \
--resource-group "myAVNMResourceGroup" \
--virtual-network-name "VNetB"
az network manager list-effective-connectivity-config \
--resource-group "myAVNMResourceGroup" \
--virtual-network-name "VNetC"
az network manager list-effective-connectivity-config \
--resource-group "myAVNMResourceGroup" \
--virtual-network-name "VNetD"
对于属于连接配置的虚拟网络,你将收到类似于以下示例的输出:
{
"skipToken": "",
"value": [
{
"appliesToGroups": [
{
"groupConnectivity": "None",
"isGlobal": "False",
"networkGroupId": "/subscriptions/<subscription_id>/resourceGroups/myAVNMResourceGroup/providers/Microsoft.Network/networkManagers/myAVNM/networkGroups/myNetworkGroup",
"useHubGateway": "False"
}
],
"configurationGroups": [
{
"description": "Network Group for Production virtual networks",
"id": "/subscriptions/<subscription_id>/resourceGroups/myAVNMResourceGroup/providers/Microsoft.Network/networkManagers/myAVNM/networkGroups/myNetworkGroup",
"provisioningState": "Succeeded",
"resourceGroup": "myAVNMResourceGroup"
}
],
"connectivityTopology": "Mesh",
"deleteExistingPeering": "False",
"description": "Production Mesh Connectivity Config Example",
"hubs": [],
"id": "/subscriptions/<subscription_id>/resourceGroups/myAVNMResourceGroup/providers/Microsoft.Network/networkManagers/myAVNM/connectivityConfigurations/connectivityconfig",
"isGlobal": "False",
"provisioningState": "Succeeded",
"resourceGroup": "myAVNMResourceGroup"
}
]
}
对于不属于网络组的虚拟网络(例如 VNetD),则会显示类似于以下示例的输出:
az network manager list-effective-connectivity-config --resource-group "myAVNMResourceGroup" --virtual-network-name "VNetD-test"
{
"skipToken": "",
"value": []
}
清理资源
如果不再需要 Azure Virtual Network Manager 实例,则在删除资源之前确保以下所有条件为 true:
- 未在任何区域中进行配置部署。
- 已删除所有配置。
- 已删除所有网络组。
若要删除资源,请执行以下操作:
通过使用 az network manager post-commit 不提交任何配置来删除连接部署:
az network manager post-commit \ --network-manager-name "myAVNM" \ --commit-type "Connectivity" \ --target-locations "westus" \ --resource-group "myAVNMResourceGroup"
使用 az network manager connect-config delete 移除连接配置:
az network manager connect-config delete \ --configuration-name "connectivityconfig" \ --name "myAVNM" \ --resource-group "myAVNMResourceGroup"
使用 az network manager group delete 移除网络组:
az network manager group delete \ --name "myNetworkGroup" \ --network-manager-name "myAVNM" \ --resource-group "myAVNMResourceGroup"
使用 az network manager delete 删除网络管理器实例:
az network manager delete \ --name "myAVNM" \ --resource-group "myAVNMResourceGroup"
如果不再需要所创建的资源,可使用 az group delete 删除资源组:
az group delete \ --name "myAVNMResourceGroup"
后续步骤
现在,你已创建了 Azure Virtual Network Manager 实例,请了解如何使用安全管理配置来阻止网络流量: