你当前正在访问 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 Virtual Network Manager 为网状虚拟网络拓扑部署的资源。

先决条件

登录到 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 创建五个虚拟网络。 此示例在美国西部位置创建了名为 VNetAVNetBVNetCVNetD 的虚拟网络。 每个虚拟网络都带有一个用于动态成员身份的 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:

  • 未在任何区域中进行配置部署。
  • 已删除所有配置。
  • 已删除所有网络组。

若要删除资源,请执行以下操作:

  1. 通过使用 az network manager post-commit 不提交任何配置来删除连接部署:

    az network manager post-commit \
        --network-manager-name "myAVNM" \
        --commit-type "Connectivity" \
        --target-locations "westus" \
        --resource-group "myAVNMResourceGroup"
    
  2. 使用 az network manager connect-config delete 移除连接配置:

    az network manager connect-config delete \
        --configuration-name "connectivityconfig" \
        --name "myAVNM" \
        --resource-group "myAVNMResourceGroup"
    
  3. 使用 az network manager group delete 移除网络组:

    az network manager group delete \
        --name "myNetworkGroup" \
        --network-manager-name "myAVNM" \
        --resource-group "myAVNMResourceGroup"
    
  4. 使用 az network manager delete 删除网络管理器实例:

    az network manager delete \
        --name "myAVNM" \
        --resource-group "myAVNMResourceGroup"
    
  5. 如果不再需要所创建的资源,可使用 az group delete 删除资源组:

    az group delete \
        --name "myAVNMResourceGroup"
    

后续步骤

现在,你已创建了 Azure Virtual Network Manager 实例,请了解如何使用安全管理配置来阻止网络流量: