需要在虚拟网络中进行动态缩放的应用程序部署面临子网地址空间耗尽的风险。 虚拟网络中的子网可以托管许多需要横向扩展的应用程序。此功能 Multiple Address Prefixes on Subnet
允许轻松缩放子网中的虚拟机和 Azure 虚拟机规模集。 从子网中移除所有资源是修改子网地址前缀的先决条件,而此功能不需要从子网中删除所有资源。
目前,无法扩展子网空间或跨子网边界,这会将虚拟机规模集限制为子网中的可用地址空间。 但是,借助此功能,虚拟机规模集现在可以在纵向扩展时利用其他子网地址空间。 如果第一个子网已满,则其他虚拟机或虚拟机规模集可能会溢出到同一子网中的新地址空间前缀。
以下限制目前仍适用:
此功能仅支持虚拟机和虚拟机规模集,不支持容器的裸机或 VNet 注入,尤其是 AKS 群集中的 PodSubnet IPAM 模式。 任何委派的子网都无法使用此功能(除了委派给 VPN 网关和 ExpressRoute 网关服务的 GatewaySubnet 除外)。
此功能不支持多个客户地址 (CA) 配置。 在子网上使用多个前缀时,只能使用单个客户地址 (CA) 配置。 每个 NIC(网络接口卡)支持单个 IPv4(Internet 协议版本 4)和单个 IPv6(Internet 协议版本 6)地址。
此功能目前只能通过命令行(PowerShell、CLI)或 Azure 资源管理器模板使用。 Azure 门户支持有限。 添加其他地址前缀后,可在边栏选项卡下
Subnets
看到所有前缀的正确计数Available IPs
,但仅列出第一个前缀。- 可以通过导航到“虚拟网络
Overview
”页并选择JSON View
来获取子网配置和所有子网前缀的详细信息。
- 可以通过导航到“虚拟网络
先决条件
- 具有活动订阅的 Azure 帐户。 创建帐户。
注意
子网属性 addressPrefixes 和 addressPrefix 不能互换使用。 为了获得最佳结果,请仅对单个地址前缀和多个地址前缀使用 addressPrefixes 。 如果已在工作流中使用 addressPrefixes ,请继续使用此属性。
Azure PowerShell(本地安装)或 Azure Cloud Shell。
登录到 Azure PowerShell,确保选择你要通过其来使用此功能的订阅。 有关详细信息,请参阅使用 Azure PowerShell 登录。
请确保
Az.Network
模块是 4.3.0 或更高版本。 要验证已安装的模块,请使用命令 Get-InstalledModule -NameAz.Network
。 如果模块需要更新,请在必要时使用命令 Update-Module -NameAz.Network
。
如果选择在本地安装并使用 PowerShell,则本文需要 Azure PowerShell 模块 5.4.1 或更高版本。 运行 Get-Module -ListAvailable Az
查找已安装的版本。 如果需要进行升级,请参阅 Install Azure PowerShell module(安装 Azure PowerShell 模块)。 如果在本地运行 PowerShell,则还需运行 Connect-AzAccount -Environment AzureChinaCloud
以创建与 Azure 的连接。
若要访问多子网前缀预览功能,需要在 Azure 订阅中注册它。 若要详细了解如何在订阅中注册预览功能,请参阅在 Azure 订阅中设置预览功能。
可通过 Microsoft.Features 命名空间获取 Azure 功能公开控件 (AFEC)。 对于此功能,需要在订阅中注册两个 AFEC 标志:
Microsoft.Features/providers/Microsoft.Network/features/AllowMultipleAddressPrefixesOnSubnet
Microsoft.Features/providers/Microsoft.Network/features/AllowDeletionOfIpPrefixFromSubnet
若要注册此功能,请使用以下命令:
Register-AzProviderFeature -FeatureName AllowMultipleAddressPrefixesOnSubnet -ProviderNamespace Microsoft.Network Register-AzProviderFeature -FeatureName AllowDeletionOfIpPrefixFromSubnet -ProviderNamespace Microsoft.Network
创建具有多个前缀的子网
在此部分,请创建具有多个前缀的子网。
使用 New-AzResourceGroup 在 chinanorth3 位置创建一个名为 test-rg 的资源组。
$rg = @{ Name = 'test-rg' Location = 'chinanorth3' } New-AzResourceGroup @rg
使用 New-AzVirtualNetworkSubnetConfig 创建具有多个前缀的子网。
$subnet = @{ Name = 'subnet-1' AddressPrefix = '10.0.0.0/24', '10.0.1.0/24' } $subnetConfig = New-AzVirtualNetworkSubnetConfig @subnet
使用 New-AzVirtualNetwork 创建具有子网的虚拟网络。
$net = @{ Name = 'vnet-1' ResourceGroupName = 'test-rg' Location = 'chinanorth3' AddressPrefix = '10.0.0.0/16' Subnet = $subnetConfig } New-AzVirtualNetwork @net
使用多个前缀更新现有子网
在本部分中,将在现有子网上添加第二个前缀以扩展地址空间。
使用 Get-AzVirtualNetwork 检索变量中的目标虚拟网络配置。
$vnet = Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-1'
使用 Set-AzVirtualNetworkSubnetConfig 向子网配置添加第二个地址前缀。 在此步骤中同时指定现有地址前缀和新地址前缀
重要
此步骤中不得跳过列出现有子网前缀。 只有在下一步中才会应用此处指定的地址前缀,否则将删除所有其他前缀(如果未使用)或导致错误(如果现有网络接口引用了这些前缀)。
Set-AzVirtualNetworkSubnetConfig -Name 'subnet-1' -VirtualNetwork $vnet -AddressPrefix '10.0.0.0/24', '10.0.1.0/24'
使用 Set-AzVirtualNetwork 应用更新的虚拟网络配置。
$vnet | Set-AzVirtualNetwork
使用 Get-AzVirtualNetwork 和 Get-AzVirtualNetwork 检索更新的虚拟网络和子网配置。 验证子网现在是否具有两个地址前缀。
Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-1' | ` Get-AzVirtualNetworkSubnetConfig -Name 'subnet-1' | ` ConvertTo-Json
从子网中删除前缀
还可以从未主动使用的子网中删除地址前缀,也就是说,没有现有网络接口引用这些地址前缀。 在本部分中,你将删除地址 unused
前缀。
使用 Get-AzVirtualNetwork 检索变量中的目标虚拟网络配置。
$vnet = Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-1'
使用 Get-AzVirtualNetworkSubnetConfig 列出目标子网上的所有地址前缀。
Get-AzVirtualNetworkSubnetConfig -Name 'subnet-1' -VirtualNetwork $vnet
使用 Set-AzVirtualNetworkSubnetConfig 更新地址前缀列表,并删除不使用的前缀。
重要
只有在下一步中才会应用此处指定的地址前缀,否则将删除所有其他前缀(如果未使用)或导致错误(如果现有网络接口引用了这些前缀)。
Set-AzVirtualNetworkSubnetConfig -Name 'subnet-1' -VirtualNetwork $vnet -AddressPrefix '10.0.1.0/24'
使用 Set-AzVirtualNetwork 应用更新的虚拟网络配置。
$vnet | Set-AzVirtualNetwork
使用 Get-AzVirtualNetwork 和 Get-AzVirtualNetwork 检索更新的虚拟网络和子网配置。 验证子网现在是否具有两个地址前缀。
Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-1' | ` Get-AzVirtualNetworkSubnetConfig -Name 'subnet-1' | ` ConvertTo-Json