使用子网 ID 的引用创建 AKS 群集时出错



如果我尝试使用 ARM 模板部署 AKS 群集时出现错误,如果代理池配置文件属性中的 vnetSubnetId 是引用。我之前使用过这个确切的模板,没有问题(在 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?现在是否需要将其作为参数传入?如果有什么变化,我可以在任何地方找到详细信息吗?

编辑:澄清一下,为了重新部署群集,我已经检查过并且没有新的子网,并且在具有不同VNet的3个不同群集上看到了相同的行为。

从 reference(( 切换到 resourceId(( 确实解决了这个问题,因此已被标记为答案,但我仍然不清楚为什么 reference(( 停止工作,如果我弄清楚了,也会在这里更新它。

我认为发生的事情是subnets[0].id返回错误的(不同(子网Id。 这就是错误所指出的。部署群集后,无法更改子网 ID。

可能是有人在 vnet 中创建了一个新子网。但我想说的是,总的来说,这种方法是有缺陷的。您应该构建resourceId()函数或只是将其作为参数传递

最新更新