【问题标题】:Create Azure AKS with Managed Identity using Terraform gives AutoUpgradePreview not enabled error使用 Terraform 创建具有托管标识的 Azure AKS 会导致 AutoUpgradePreview 未启用错误
【发布时间】: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" {
│ 

【问题讨论】:

    标签: kubernetes terraform azure-aks azure-managed-identity


    【解决方案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 
      

      你会看到它没有注册如下:


    现在要克服这个问题,您可以尝试以下两种解决方案:

    1. 您可以尝试使用terraform azurerm provider 2.78.0 而不是2.79.1

    2. 其他解决方案是注册该功能,然后您就可以 使用您正在使用的相同代码。

      您可以按照以下步骤操作:

    • 您可以使用以下命令注册该功能(大约需要 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 来配置新集群?
    猜你喜欢
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2020-07-27
    • 2022-11-25
    • 2021-03-26
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多