你当前正在访问 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 帐户。 免费创建帐户
  • 在本地使用 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 实例,请了解如何使用安全管理配置来阻止网络流量: