调用API修改AKS托管集群最大节点数时返回错误
解决AKS API修改最大节点数时的"Changing property 'identity' is not allowed"错误
我来帮你搞定这个问题——你遇到的BadRequest错误其实是Azure ARM API的一个常见限制导致的,下面给你拆解原因和解决办法:
问题根源
你当前用的是PUT请求来更新集群配置,但ARM的PUT方法要求你提交完整的资源属性,而不是只传递要修改的部分。当你只发送agentPoolProfiles和location时,Azure会默认你要清空集群的identity属性,而这个属性是不允许被修改或清空的,所以就触发了这个错误。
解决方案
方案1:改用PATCH请求(推荐)
ARM API的PATCH方法专门用来做部分更新,你不需要提交完整的集群配置,只需要传递你要修改的内容就行,步骤如下:
- 将请求方法从
PUT改为PATCH - 请求体保持你原来的内容不变:
{"properties":{"agentPoolProfiles":[{"name":"agentpool_name","maxCount":3}]}} - 建议把API版本升级到较新的稳定版(比如
2023-07-01),旧版本可能存在部分更新的限制
方案2:在PUT请求中包含完整的identity属性
如果你必须使用PUT请求,那需要先获取集群的当前完整配置,把identity属性完整带进去,步骤如下:
- 先发送GET请求获取集群的全部详情:
GET https://management.azure.com/subscriptions/my_subscription_id/resourceGroups/my_resource_group/providers/Microsoft.ContainerService/managedClusters/my_aks_cluster?api-version=2020-02-01 - 从返回的JSON结果中找到
identity字段,类似这样:"identity": { "type": "SystemAssigned", "principalId": "xxxx-xxxx-xxxx-xxxx", "tenantId": "yyyy-yyyy-yyyy-yyyy" } - 把这个
identity字段添加到你的PUT请求体中,最终的请求体应该是这样:{ "location": "My Location", "identity": { "type": "SystemAssigned", "principalId": "xxxx-xxxx-xxxx-xxxx", "tenantId": "yyyy-yyyy-yyyy-yyyy" }, "properties": { "agentPoolProfiles": [ { "name": "agentpool_name", "maxCount": 3 } ] } }
额外提示
- 优先用
PATCH请求,这是ARM API做部分资源更新的标准方式,能避免很多因遗漏属性导致的错误 - 尽量使用较新的API版本,新版本不仅修复了旧版本的一些问题,还提供了更完善的功能支持
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

