【问题标题】:Subnets are not getting created while using Powershell Az commands使用 Powershell Az 命令时未创建子网
【发布时间】:2020-11-22 19:25:07
【问题描述】:

我有下面的 PowerShell 脚本来在 Azure 中创建 vnetsubnet

 $virtualNetworkName = 'corp-northeurope-vnet'
 $frontendSubnetName = 'frontendsubnet'
 $vNetAddressPrefix = "10.0.0.0/26"
 $SubnetAddressPrefix = "10.0.1.0/28"


 $virtualNetwork = Get-AzVirtualNetwork -Name $virtualNetworkName -ResourceGroupName $rgName
if ($null -eq $virtualNetwork) {
    $virtualNetwork = New-AzVirtualNetwork `
        -Name $virtualNetworkName `
        -ResourceGroupName $rgName `
        -AddressPrefix $vNetAddressPrefix `
        -Location $location 
}
else {
    Write-Log -Message "[$($virtualNetwork.Name)] already exists"
}


$fesubnet = Get-AzVirtualNetworkSubnetConfig -Name $frontendSubnetName -VirtualNetwork $virtualNetwork
if ($null -eq $fesubnet) {
    $fesubnet = Add-AzVirtualNetworkSubnetConfig `
        -Name $frontendSubnetName `
        -AddressPrefix $subnetAddressPrefix `
        -VirtualNetwork $virtualNetwork

    $virtualNetwork | Set-AzVirtualNetwork
}
else {
    Write-Log -Message "[$($fesubnet.Name)] already exists"
}

但它不起作用。

这里抛出错误

$虚拟网络 |设置-AzVirtualNetwork

子网“frontendsubnet”在虚拟网络“corp-northeurope-vnet”中无效。 StatusCode: 400 ReasonPhrase: Bad Request ErrorCode: NetcfgInvalidSubnet ErrorMessage: Subnet 'frontendsubnet' is |在虚拟网络“corp-northeurope-vnet”中无效。操作ID:06c1ed77-14f1-294d-a19a-41c2epbdd04f

和 IP Range 有关系吗?

【问题讨论】:

  • @Theo 是的错字。出于安全原因,我在这个问题中更改了 vnet 和子网名称。
  • 您是否将 IP 范围更改为随机的?该子网不属于给定的 VNET。

标签: azure powershell azure-powershell azure-virtual-network


【解决方案1】:

子网的 IP 范围不在 VNET 的 IP 范围内,这会导致子网配置无效。

因此,要么将子网地址前缀更改为位于 VNET 地址前缀内,要么扩展 VNET 地址前缀,使其包含您尝试创建的子网范围。

用于规划 IP 地址前缀的好工具是:http://jodies.de/ipcalc?host=10.0.0.0&mask1=26&mask2=

【讨论】:

  • 感谢您指出问题。但是,指定的工具并未提供 VNET 的确切子网地址范围。
  • @kudlatiger 如果您输入您的值,该工具将为您提供正确的输出。该工具被全世界数百万人用来计算他们的地址空间。你输入一个IP地址和网络掩码。例如。 10.0.0.0 / 24,它将为您提供该范围内的最大和最小主机地址的输出
  • @kudlatiger 正如您在屏幕截图中看到的那样,您的 /26 为您提供了 10.0.0.1 到 10.0.0.62 的范围。这是一个完全正确的范围。然后 Azure 会保留前几个地址,因此该范围内的第一个可用地址将是 10.0.0.4。
  • 感谢您的回答。我的问题是,是否有任何工具可以接受输入 VNET IP 范围(10.0.0.0/26)和子网数量(3),输出为“10.0.0.0/28”、“10.0.0.16/28”和“10.0.0.32/28”
  • @kudlatiger 有类似这样的工具:davidc.net/sites/default/subnets/subnets.html 与您要求的并不完全相同,但通常当您创建子网时,您实际上会猜测您需要多少地址,然后创建那个大小的子网,而不是相反。
【解决方案2】:

由您的子网地址前缀引起的错误。当您的 VNet 地址前缀为 10.0.0.0/26 时。那么您的子网地址范围应该小于 10.0.0.0/26。您可以将子网前缀更改为 10.0.0.0/28。那么就没有问题了。

【讨论】:

  • 简短而甜蜜的回答。如果我指定所需的子网数量,是否有任何工具可以帮助我提供子网地址?
  • @kudlatiger 最好的方法是了解网络地址空间。如果你熟悉它,那么你可以在以后解决所有熟悉的问题。看看subnet。如果答案解决了你的问题,你介意接受吗?
  • 完成。我希望 StackOverflow 中有一个选项可以选择多个答案。甚至@Daniel 也提供了解决方案的提示。
【解决方案3】:

一个问题是第二个命令行。

如果您说您已经创建了一个 Vnet、一个子网、一个 Vnet IP CIDR 前缀和一个子网 IP CIDR 前缀,则子网的命令不是 $frontendSubnetName,“前端”是包含的子网的名称在 Vnet “corp-northeurope-vnet”上。

$frontendSubnetName = 'frontendsubnet' 

命令frontendSubnetName是错误的,正确的应该是:

$subnetConfig = 'frontendsubnet'

尝试使用这些命令:

$virtualNetworkName = 'corp-northeurope-vnet'
$subnetConfig = 'frontendsubnet'
$vNetAddressPrefix = "10.0.0.0/26"
$SubnetAddressPrefix = "10.0.1.0/28"

这里是官方文档:https://docs.microsoft.com/en-us/azure/virtual-network/quick-create-powershell

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多