你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 Azure PowerShell 通过 Azure Virtual Network Manager 来创建网格网络拓扑

在 Azure PowerShell 中开始使用 Azure Virtual Network Manager 管理虚拟网络的连接。

在本快速入门中,部署三个虚拟网络,并使用 Azure Virtual Network Manager 创建网格网络拓扑。 然后验证是否应用了连接配置。

该示意图显示了使用 Azure Virtual Network Manager 为网状虚拟网络拓扑部署的资源。

重要

Azure Virtual Network Manager 现已正式发布,可用于 Virtual Network Manager 和中心辐射型连接配置。 网格连接配置仍以公共预览版提供。

安全配置和安全管理员规则在以下区域中正式发布:

  • 澳大利亚中部
  • 澳大利亚中部 2
  • 澳大利亚东部
  • 澳大利亚东南部
  • 巴西南部
  • 巴西东南部
  • 加拿大中部
  • 加拿大东部
  • 东亚
  • 北欧
  • 法国中部
  • 法国南部
  • 德国北部
  • 德国中西部
  • 印度中部
  • 印度南部
  • 印度西部
  • 以色列中部
  • 意大利北部
  • 日本东部
  • 日本西部
  • Jio 印度西部
  • 韩国中部
  • 韩国南部
  • 挪威东部
  • 挪威西部
  • 波兰中部
  • 卡塔尔中部
  • 南非北部
  • 南非西部
  • 瑞典中部
  • 瑞典南部
  • 瑞士北部
  • 瑞士西部
  • 阿联酋中部
  • 阿拉伯联合酋长国北部
  • 英国南部
  • 英国西部
  • 美国中部
  • 美国东部
  • 英国北部
  • 美国西部
  • 美国西部 2
  • 美国西部 3
  • 美国中西部地区

所有其他区域仍处于公共预览版。

此预览版在提供时没有附带服务级别协议,不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

先决条件

  • 具有活动订阅的 Azure 帐户。 免费创建帐户
  • 在本地使用 PowerShell(而不是通过 Azure Cloud Shell)执行此快速入门。 Azure Cloud Shell 中的 Az.Network 版本当前不支持 Azure Virtual Network Manager cmdlet。
  • 若要修改动态网络组,必须仅通过 Azure RBAC 角色分配授予访问权限。 不支持经典管理员/旧授权。

登录到 Azure 帐户,然后选择订阅

要开始配置,请登录到 Azure 帐户:

Connect-AzAccount

然后,连接到订阅:

Set-AzContext -Subscription <subscription name or id>

安装 Azure Powershell 模块

使用此命令安装最新的 Az.Network Azure PowerShell 模块:

 Install-Module -Name Az.Network -RequiredVersion 5.3.0

创建资源组

在创建 Azure Virtual Network Manager 实例之前,必须创建一个资源组来托管它。 使用 New-AzResourceGroup 创建资源组。 此示例在“美国东部”位置创建名为 vnm-learn-eastus-001ResourceGroup 的资源组:


$location = "East US"
$rg = @{
    Name = 'rg-learn-eastus-001'
    Location = $location
}
New-AzResourceGroup @rg

定义范围和访问类型

使用 New-AzNetworkManagerScope 定义 Azure Virtual Network Manager 实例的范围和访问类型。 此示例定义了单个订阅的范围,并将访问类型设置为“连接”。 将 <subscription_id> 替换为要通过 Azure Virtual Network Manager 管理的订阅的 ID。


Import-Module -Name Az.Network -RequiredVersion "5.3.0"

[System.Collections.Generic.List[string]]$subGroup = @()  
$subGroup.Add("/subscriptions/<subscription_id>")

[System.Collections.Generic.List[String]]$access = @()  
$access.Add("Connectivity"); 

$scope = New-AzNetworkManagerScope -Subscription $subGroup

创建 Virtual Network Manager 实例

使用 New-AzNetworkManager 创建 Virtual Network Manager 实例。 此示例在“美国东部”位置创建名为 vnm-learn-eastus-001 的实例:

$avnm = @{
    Name = 'vnm-learn-eastus-001'
    ResourceGroupName = $rg.Name
    NetworkManagerScope = $scope
    NetworkManagerScopeAccess = $access
    Location = $location
}
$networkmanager = New-AzNetworkManager @avnm

创建三个虚拟网络

使用 New-AzVirtualNetwork 创建三个虚拟网络。 此示例在“美国东部”位置创建名为 vnet-learn-prod-eastus-001、vnet-learn-prod-eastus-002 和 vnet-learn-test-eastus-003 的虚拟网络。 如果你已有可用于创建网格网络的虚拟网络,则可以跳转到下一部分。

$vnet001 = @{
    Name = 'vnet-learn-prod-eastus-001'
    ResourceGroupName = $rg.Name
    Location = $location
    AddressPrefix = '10.0.0.0/16'    
}

$vnet_learn_prod_eastus_001 = New-AzVirtualNetwork @vnet001

$vnet002 = @{
    Name = 'vnet-learn-prod-eastus-002'
    ResourceGroupName = $rg.Name
    Location = $location
    AddressPrefix = '10.1.0.0/16'    
}
$vnet_learn_prod_eastus_002 = New-AzVirtualNetwork @vnet002

$vnet003 = @{
    Name = 'vnet-learn-test-eastus-003'
    ResourceGroupName = $rg.Name
    Location = $location
    AddressPrefix = '10.2.0.0/16'    
}
$vnet_learn_test_eastus_003 = New-AzVirtualNetwork @vnet003

将一个子网添加到每个虚拟网络

若要完成虚拟网络的配置,请使用 Add-AzVirtualNetworkSubnetConfig 创建名为 default 的子网配置,其子网地址前缀为 /24。 然后,使用 Set-AzVirtualNetwork 将子网配置应用于虚拟网络。

$subnet_vnet001 = @{
    Name = 'default'
    VirtualNetwork = $vnet_learn_prod_eastus_001
    AddressPrefix = '10.0.0.0/24'
}
$subnetConfig_vnet001 = Add-AzVirtualNetworkSubnetConfig @subnet_vnet001
$vnet_learn_prod_eastus_001 | Set-AzVirtualNetwork

$subnet_vnet002 = @{
    Name = 'default'
    VirtualNetwork = $vnet_learn_prod_eastus_002
    AddressPrefix = '10.1.0.0/24'
}
$subnetConfig_vnet002 = Add-AzVirtualNetworkSubnetConfig @subnet_vnet002
$vnet_learn_prod_eastus_002 | Set-AzVirtualNetwork

$subnet_vnet003 = @{
    Name = 'default'
    VirtualNetwork = $vnet_learn_test_eastus_003
    AddressPrefix = '10.2.0.0/24'
}
$subnetConfig_vnet003 = Add-AzVirtualNetworkSubnetConfig @subnet_vnet003
$vnet_learn_test_eastus_003 | Set-AzVirtualNetwork

创建网络组

Virtual Network Manager 通过将虚拟网络放置在网络组中,将配置应用于虚拟网络组。 使用 New-AzNetworkManagerGroup 创建网络组。 此示例在“美国东部”位置创建名为 ng-learn-prod-eastus-001 的网络组:

$ng = @{
        Name = 'ng-learn-prod-eastus-001'
        ResourceGroupName = $rg.Name
        NetworkManagerName = $networkManager.Name
    }
    $ng = New-AzNetworkManagerGroup @ng

为网格配置定义成员身份

创建网络组后,可以通过添加虚拟网络来定义其成员身份。 可以手动或使用 Azure Policy 添加这些网络。

手动添加成员身份

在此任务中,使用 New-AzNetworkManagerStaticMember 将静态成员 vnet-learn-prod-eastus-001 和 vnet-learn-prod-eastus-002 添加到网络组 ng-learn-prod-eastus-001。

静态成员必须具有范围限定为网络组的唯一名称。 建议使用虚拟网络 ID 的一致哈希。 此方法使用 Azure 资源管理器模板的 uniqueString() 实现。

    function Get-UniqueString ([string]$id, $length=13)
    {
    $hashArray = (new-object System.Security.Cryptography.SHA512Managed).ComputeHash($id.ToCharArray())
    -join ($hashArray[1..$length] | ForEach-Object { [char]($_ % 26 + [byte][char]'a') })
    }
$sm_vnet001 = @{
        Name = Get-UniqueString $vnet_learn_prod_eastus_001.Id
        ResourceGroupName = $rg.Name
        NetworkGroupName = $ng.Name
        NetworkManagerName = $networkManager.Name
        ResourceId = $vnet_learn_prod_eastus_001.Id
    }
    $sm_vnet001 = New-AzNetworkManagerStaticMember @sm_vnet001
$sm_vnet002 = @{
        Name = Get-UniqueString $vnet_learn_prod_eastus_002.Id
        ResourceGroupName = $rg.Name
        NetworkGroupName = $ng.Name
        NetworkManagerName = $networkManager.Name
        ResourceId = $vnet_learn_prod_eastus_002.Id
    }
    $sm_vnet002 = New-AzNetworkManagerStaticMember @sm_vnet002

创建连接配置

在此任务中,你使用 New-AzNetworkManagerConnectivityConfigurationNew-AzNetworkManagerConnectivityGroupItem 创建网络组 ng-learn-prod-eastus-001 的连接配置:

  1. 创建连接组项:

    $gi = @{
        NetworkGroupId = $ng.Id
    }
    $groupItem = New-AzNetworkManagerConnectivityGroupItem @gi
    
  2. 创建配置组并向其添加连接组项:

    [System.Collections.Generic.List[Microsoft.Azure.Commands.Network.Models.NetworkManager.PSNetworkManagerConnectivityGroupItem]]$configGroup = @()
    $configGroup.Add($groupItem)
    
  3. 使用配置组创建连接配置:

    $config = @{
        Name = 'cc-learn-prod-eastus-001'
        ResourceGroupName = $rg.Name
        NetworkManagerName = $networkManager.Name
        ConnectivityTopology = 'Mesh'
        AppliesToGroup = $configGroup
    }
    $connectivityconfig = New-AzNetworkManagerConnectivityConfiguration @config
        ```                        
    
    

提交部署

使用 Deploy-AzNetworkManagerCommit 将配置提交到目标区域。 此步骤会触发配置以开始生效。

[System.Collections.Generic.List[string]]$configIds = @()  
$configIds.add($connectivityconfig.id) 
[System.Collections.Generic.List[string]]$target = @()   
$target.Add("westus")     

$deployment = @{
    Name = $networkManager.Name
    ResourceGroupName = $rg.Name
    ConfigurationId = $configIds
    TargetLocation = $target
    CommitType = 'Connectivity'
}
Deploy-AzNetworkManagerCommit @deployment 

清理资源

如果不再需要 Azure Virtual Network Manager 实例,则在删除资源之前请确保以下所有条件为 true:

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

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

  1. 通过 Deploy-AzNetworkManagerCommit 部署一个空配置,以删除连接部署:

    [System.Collections.Generic.List[string]]$configIds = @()
    [System.Collections.Generic.List[string]]$target = @()   
    $target.Add("westus")     
    $removedeployment = @{
        Name = 'vnm-learn-eastus-001'
        ResourceGroupName = $rg.Name
        ConfigurationId = $configIds
        Target = $target
        CommitType = 'Connectivity'
    }
    Deploy-AzNetworkManagerCommit @removedeployment
    
  2. 使用 Remove-AzNetworkManagerConnectivityConfiguration 删除连接配置:

    
    Remove-AzNetworkManagerConnectivityConfiguration -Name $connectivityconfig.Name -ResourceGroupName $rg.Name -NetworkManagerName $networkManager.Name
    
    
  3. 使用 Remove-AzPolicy* 删除策略资源:

    
    Remove-AzPolicyAssignment -Name $policyAssignment.Name
    Remove-AzPolicyAssignment -Name $policyDefinition.Name
    
    
  4. 使用 Remove-AzNetworkManagerGroup 删除网络组:

    Remove-AzNetworkManagerGroup -Name $ng.Name -ResourceGroupName $rg.Name -NetworkManagerName $networkManager.Name
    
  5. 使用 Remove-AzNetworkManager 删除 Virtual Network Manager 实例:

    Remove-AzNetworkManager -name $networkManager.Name -ResourceGroupName $rg.Name
    
  6. 如果你不再需要创建的资源,请使用 Remove-AzResourceGroup 删除资源组:

    Remove-AzResourceGroup -Name $rg.Name -Force
    

后续步骤

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