使用子网 ID 的引用创建 AKS 群集时出错
Error when creating AKS cluster using a reference for the subnet ID
如果 agentPoolProfiles 属性 中的 vnetSubnetId 是参考,我在尝试使用 ARM 模板部署 AKS 群集时遇到错误。我之前使用这个模板没有问题(10 月 4 日),但现在我看到多个不同集群的错误,当我通过 VSTS 管道或手动使用 PowerShell 执行此操作时。
属性是这样设置的:
"agentPoolProfiles": [
{
"name": "agentpool",
"count": "[parameters('agentCount')]",
"vmSize": "[parameters('agentVMSize')]",
"osType": "Linux",
"dnsPrefix": "[variables('agentsEndpointDNSNamePrefix')]",
"osDiskSizeGB": "[parameters('agentOsDiskSizeGB')]",
"vnetSubnetID": "[reference(concat('Microsoft.Network/virtualNetworks/', variables('vnetName'))).subnets[0].id]"
}
]
变量'vnetName'基于我用于集群名称的输入参数,vnet 本身 100% 存在,并作为同一模板的一部分进行部署。
如果我尝试部署新集群,我会收到以下错误:
Message: {
"code": "InvalidParameter",
"message": "The value of parameter agentPoolProfile.vnetSubnetID is invalid.",
"target": "agentPoolProfile.vnetSubnetID"
}
如果我尝试重新部署一个集群,自上次运行以来没有更改模板或输入参数,我会收到以下错误:
Message: {
"code": "PropertyChangeNotAllowed",
"message": "Changing property 'agentPoolProfile.vnetSubnetID' is not allowed.",
"target": "agentPoolProfile.vnetSubnetID"
}
是否发生了某些变化,这意味着我无法再在运行时获取 vnet ID?现在需要作为参数传入吗?如果有什么变化,有什么地方可以找到详细信息吗?
编辑:澄清一下,为了重新部署集群,我已经检查过没有新的子网,而且我在 3 个具有不同 VNet 的不同集群上看到了相同的行为。
从 reference() 切换到 resourceId() 确实解决了问题,因此已被标记为答案,但我仍然不清楚为什么 reference() 停止工作,如果我想的话也会在这里更新出来了。
我认为发生的事情是 subnets[0].id
returns 错误的 (DIFFERENT) subnetId。这就是错误指出的。部署集群后无法更改subnetId。
可能有人在 vnet 中创建了一个新子网。但我要说的是,总的来说,这种方法是有缺陷的。您应该构建 resourceId()
函数或将其作为参数传递
如果 agentPoolProfiles 属性 中的 vnetSubnetId 是参考,我在尝试使用 ARM 模板部署 AKS 群集时遇到错误。我之前使用这个模板没有问题(10 月 4 日),但现在我看到多个不同集群的错误,当我通过 VSTS 管道或手动使用 PowerShell 执行此操作时。
属性是这样设置的:
"agentPoolProfiles": [
{
"name": "agentpool",
"count": "[parameters('agentCount')]",
"vmSize": "[parameters('agentVMSize')]",
"osType": "Linux",
"dnsPrefix": "[variables('agentsEndpointDNSNamePrefix')]",
"osDiskSizeGB": "[parameters('agentOsDiskSizeGB')]",
"vnetSubnetID": "[reference(concat('Microsoft.Network/virtualNetworks/', variables('vnetName'))).subnets[0].id]"
}
]
变量'vnetName'基于我用于集群名称的输入参数,vnet 本身 100% 存在,并作为同一模板的一部分进行部署。
如果我尝试部署新集群,我会收到以下错误:
Message: {
"code": "InvalidParameter",
"message": "The value of parameter agentPoolProfile.vnetSubnetID is invalid.",
"target": "agentPoolProfile.vnetSubnetID"
}
如果我尝试重新部署一个集群,自上次运行以来没有更改模板或输入参数,我会收到以下错误:
Message: {
"code": "PropertyChangeNotAllowed",
"message": "Changing property 'agentPoolProfile.vnetSubnetID' is not allowed.",
"target": "agentPoolProfile.vnetSubnetID"
}
是否发生了某些变化,这意味着我无法再在运行时获取 vnet ID?现在需要作为参数传入吗?如果有什么变化,有什么地方可以找到详细信息吗?
编辑:澄清一下,为了重新部署集群,我已经检查过没有新的子网,而且我在 3 个具有不同 VNet 的不同集群上看到了相同的行为。
从 reference() 切换到 resourceId() 确实解决了问题,因此已被标记为答案,但我仍然不清楚为什么 reference() 停止工作,如果我想的话也会在这里更新出来了。
我认为发生的事情是 subnets[0].id
returns 错误的 (DIFFERENT) subnetId。这就是错误指出的。部署集群后无法更改subnetId。
可能有人在 vnet 中创建了一个新子网。但我要说的是,总的来说,这种方法是有缺陷的。您应该构建 resourceId()
函数或将其作为参数传递