使用 Terraform 创建具有托管标识的 Azure AKS 会导致 AutoUpgradePreview 未启用错误
Posted
技术标签:
【中文标题】使用 Terraform 创建具有托管标识的 Azure AKS 会导致 AutoUpgradePreview 未启用错误【英文标题】:Create Azure AKS with Managed Identity using Terraform gives AutoUpgradePreview not enabled error 【发布时间】:2021-11-27 12:48:14 【问题描述】:我正在尝试使用 Terraform 创建具有托管标识的 AKS 群集。到目前为止,这是我的代码,非常基本和标准,来自我在网上找到的一些文档和博客文章。
terraform
required_providers
azurerm =
source = "hashicorp/azurerm"
version = "2.79.1"
provider "azurerm"
features
use_msi = true
resource "azurerm_resource_group" "rg"
name = "prod_test"
location = "northeurope"
resource "azurerm_kubernetes_cluster" "cluster"
name = "prod_test_cluster"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
dns_prefix = "weak"
default_node_pool
name = "default"
node_count = "4"
vm_size = "standard_ds3_v2"
identity
type = "SystemAssigned"
这是我无法找到解决方案的错误消息。有什么想法吗?
Error: creating Managed Kubernetes Cluster "prod_test_cluster" (Resource Group "prod_test"): containerservice.ManagedClustersClient#CreateOrUpdate: Failure sending request: StatusCode=0 -- Original Error: Code="BadRequest" Message="Feature Microsoft.ContainerService/AutoUpgradePreview is not enabled. Please see https://aka.ms/aks/previews for how to enable features."
│
│ with azurerm_kubernetes_cluster.cluster,
│ on main.tf line 19, in resource "azurerm_kubernetes_cluster" "cluster":
│ 19: resource "azurerm_kubernetes_cluster" "cluster"
│
【问题讨论】:
【参考方案1】:我在我的环境中对其进行了测试,并遇到了与您在下面看到的相同的问题:
所以,为了描述AutoChannelUpgrade
去的问题
到 2021 年 8 月公开预览。根据 terraform azurerm provider 2.79.0
,它默认将该值传递给 none
后端,但由于我们尚未注册该功能,因此无法提供
错误Feature Microsoft.ContainerService/AutoUpgradePreview is not enabled
。
要确认您没有注册该功能,您可以使用 下面的命令:
az feature show -n AutoUpgradePreview --namespace Microsoft.ContainerService
你会看到它没有注册如下:
现在要克服这个问题,您可以尝试以下两种解决方案:
您可以尝试使用terraform azurerm provider 2.78.0
而不是2.79.1
。
其他解决方案是注册该功能,然后您就可以 使用您正在使用的相同代码。
您可以按照以下步骤操作:
您可以使用以下命令注册该功能(大约需要 5 分钟注册):
az login --identity az feature register --namespace Microsoft.ContainerService -n AutoUpgradePreview
完成上述操作后,您可以使用以下命令检查注册状态:
az feature registration show --provider-namespace Microsoft.ContainerService -n AutoUpgradePreview
功能状态注册后,您可以将 terraform 应用到您的代码。
我在我的虚拟机上使用以下代码对其进行了测试:
provider "azurerm" features subscription_id = "948d4068-xxxxx-xxxxxx-xxxx-e00a844e059b" tenant_id = "72f988bf-xxxxx-xxxxxx-xxxxx-2d7cd011db47" use_msi = true resource "azurerm_resource_group" "rg" name = "terraformtestansuman" location = "west us 2" resource "azurerm_kubernetes_cluster" "cluster" name = "prod_test_cluster" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name dns_prefix = "weak" default_node_pool name = "default" node_count = "4" vm_size = "standard_ds3_v2" identity type = "SystemAssigned"
输出:
参考:
Github Issue
Install Azure CLI if not installed on the VM using Microsoft Installer
【讨论】:
我已经阅读了有关更新的信息,并尝试降级到 2.78.0 版本,但由于某种原因它也不起作用。但是,您的解决方案 2)就像一个魅力!非常感谢您花时间和精力来给出这个描述性的回复! 很高兴能帮上忙!! @AnsumanBa-MT 你通常为每个资源组创建一个托管标识吗? 你好@everspader,我通常使用我的凭据使用 az login 进行 terraform 身份验证。为了在 VM 上使用 terraform,我为该 VM 使用系统托管标识,并将角色设置为订阅者或所有者。这样我就不必在每个资源组中为该 msi 分配角色。 这可能是一个愚蠢的问题,但为什么要在此处使用带有 Terraform 的 VM 来配置新集群?以上是关于使用 Terraform 创建具有托管标识的 Azure AKS 会导致 AutoUpgradePreview 未启用错误的主要内容,如果未能解决你的问题,请参考以下文章
Terraform 从 Packer 中制作的托管磁盘映像创建 VM
具有托管标识的数据工厂 Blob 存储链接服务:远程服务器返回错误:(403)