使用 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 AZ CLI 本地执行命令限制

使用 Terraform Azure 的多个 VM 和磁盘

Terraform 从 Packer 中制作的托管磁盘映像创建 VM

具有托管标识的数据工厂 Blob 存储链接服务:远程服务器返回错误:(403)

Azure 使用 REST api 和托管标识创建 blob 容器 - 403 错误

使用 terraform 在 route53 上获取托管域的 zone_id