你当前正在访问 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 帐户。 免费创建帐户。
- 在本地使用 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 创建资源组。 此示例在美国西部 2 区域创建了一个名为 resource-group 的资源组:
# Create a resource group
$location = "West US 2"
$rg = @{
Name = 'resource-group'
Location = $location
}
New-AzResourceGroup @rg
定义范围和访问类型
使用 New-AzNetworkManagerScope 定义 Azure Virtual Network Manager 实例的范围和访问类型。 此示例定义了单个订阅的范围,并将访问类型设置为“连接”。 将 <subscription_id>
替换为要通过 Azure Virtual Network Manager 管理的订阅的 ID。
$subID= <subscription_id>
[System.Collections.Generic.List[string]]$subGroup = @()
$subGroup.Add("/subscriptions/$subID")
[System.Collections.Generic.List[String]]$access = @()
$access.Add("Connectivity");
$scope = New-AzNetworkManagerScope -Subscription $subGroup
创建 Virtual Network Manager 实例
使用 New-AzNetworkManager 创建 Virtual Network Manager 实例。 此示例在美国西部 2 区域创建了一个名为 network-manager 的实例:
$avnm = @{
Name = 'network-manager'
ResourceGroupName = $rg.ResourceGroupName
NetworkManagerScope = $scope
NetworkManagerScopeAccess = $access
Location = $location
}
$networkmanager = New-AzNetworkManager @avnm
创建三个虚拟网络
使用 New-AzVirtualNetwork 创建三个虚拟网络。 此示例在美国西部 2 区域创建了名为 vnet-spoke-001、vnet-spoke-002 和 vnet-hub-001 的虚拟网络。 如果你已有可用于创建网格网络的虚拟网络,则可以跳转到下一部分。
$vnetspoke001 = @{
Name = 'vnet-spoke-001'
ResourceGroupName = $rg.ResourceGroupName
Location = $location
AddressPrefix = '10.0.0.0/16'
}
$vnet_spoke_001 = New-AzVirtualNetwork @vnetspoke001
$vnetspoke002 = @{
Name = 'vnet-spoke-002'
ResourceGroupName = $rg.ResourceGroupName
Location = $location
AddressPrefix = '10.1.0.0/16'
}
$vnet_spoke_002 = New-AzVirtualNetwork @vnetspoke002
$vnethub001 = @{
Name = 'vnet-hub-001'
ResourceGroupName = $rg.ResourceGroupName
Location = $location
AddressPrefix = '10.2.0.0/16'
}
$vnet_hub_001 = New-AzVirtualNetwork @vnethub001
将一个子网添加到每个虚拟网络
若要完成虚拟网络的配置,请使用 Add-AzVirtualNetworkSubnetConfig 创建名为 default 的子网配置,其子网地址前缀为 /24。 然后,使用 Set-AzVirtualNetwork 将子网配置应用于虚拟网络。
$subnet_vnetspoke001 = @{
Name = 'default'
VirtualNetwork = $vnet_spoke_001
AddressPrefix = '10.0.0.0/24'
}
$subnetConfig_vnetspoke001 = Add-AzVirtualNetworkSubnetConfig @subnet_vnetspoke001
$vnet_spoke_001 | Set-AzVirtualNetwork
$subnet_vnetspoke002 = @{
Name = 'default'
VirtualNetwork = $vnet_spoke_002
AddressPrefix = '10.1.0.0/24'
}
$subnetConfig_vnetspoke002 = Add-AzVirtualNetworkSubnetConfig @subnet_vnetspoke002
$vnet_spoke_002 | Set-AzVirtualNetwork
$subnet_vnet_hub_001 = @{
Name = 'default'
VirtualNetwork = $vnet_hub_001
AddressPrefix = '10.2.0.0/24'
}
$subnetConfig_vnet_hub_001 = Add-AzVirtualNetworkSubnetConfig @subnet_vnet_hub_001
$vnet_hub_001 | Set-AzVirtualNetwork
创建网络组
Virtual Network Manager 通过将虚拟网络放置在网络组中,将配置应用于虚拟网络组。 使用 New-AzNetworkManagerGroup 创建网络组。 此示例在“美国西部 2”区域创建了一个名为“network-group”的网络组:
$ng = @{
Name = 'network-group'
ResourceGroupName = $rg.ResourceGroupName
NetworkManagerName = $networkManager.Name
}
$ng = New-AzNetworkManagerGroup @ng
为网格配置定义成员身份
在此任务中,你使用 New-AzNetworkManagerStaticMember 将静态成员 vnet-spoke-001 和 vnet-spoke-002 添加到网络组 network-group。
静态成员必须具有范围限定为网络组的唯一名称。 建议使用虚拟网络 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_vnetspoke001 = @{
Name = Get-UniqueString $vnet_spoke_001.Id
ResourceGroupName = $rg.ResourceGroupName
NetworkGroupName = $ng.Name
NetworkManagerName = $networkManager.Name
ResourceId = $vnet_spoke_001.Id
}
$sm_vnetspoke001 = New-AzNetworkManagerStaticMember @sm_vnetspoke001
$sm_vnetspoke002 = @{
Name = Get-UniqueString $vnet_spoke_002.Id
ResourceGroupName = $rg.ResourceGroupName
NetworkGroupName = $ng.Name
NetworkManagerName = $networkManager.Name
ResourceId = $vnet_spoke_002.Id
}
$sm_vnetspoke002 = New-AzNetworkManagerStaticMember @sm_vnetspoke002
创建连接配置
在此任务中,你使用 New-AzNetworkManagerConnectivityConfiguration 和 New-AzNetworkManagerConnectivityGroupItem 创建网络组 network-group 的连接配置:
创建连接组项:
$gi = @{ NetworkGroupId = $ng.Id } $groupItem = New-AzNetworkManagerConnectivityGroupItem @gi
创建配置组并向其添加连接组项:
[System.Collections.Generic.List[Microsoft.Azure.Commands.Network.Models.NetworkManager.PSNetworkManagerConnectivityGroupItem]]$configGroup = @() $configGroup.Add($groupItem)
使用配置组创建连接配置:
$config = @{ Name = 'connectivity-configuration' ResourceGroupName = $rg.ResourceGroupName 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("westus2")
$deployment = @{
Name = $networkManager.Name
ResourceGroupName = $rg.ResourceGroupName
ConfigurationId = $configIds
TargetLocation = $target
CommitType = 'Connectivity'
}
Deploy-AzNetworkManagerCommit @deployment
清理资源
如果不再需要 Azure Virtual Network Manager 实例及其关联资源,请删除包含它们的资源组。 删除资源组也会删除创建的资源。
使用 Remove-AzResourceGroup 删除资源组:
Remove-AzResourceGroup -Name $rg.ResourceGroupName -Force
后续步骤
现在,你已创建了 Azure Virtual Network Manager 实例,请了解如何使用安全管理配置来阻止网络流量: