Terraform Azure AKS - 如何为 AKS 集群将 UAMI 设置为 kubelet_identity

Terraform Azure AKS - how to set UAMI as kubelet_identity for AKS cluster

查看 terraform documentation 我无法确定如何将 UAMI 分配为 kubelet_identity 用于 aks 集群。

设置 controlPlane UAMI 的 identity { ... }here 不是我要找的。

问题是 - 除了 identity {..} 块中的 UAMI 之外,是否有一种 terraform 方式可以分配额外的 UAMI 并使用它来访问 ACR?

我想按照描述设置一个单独的 UAMI 作为 kubelet 身份here

你需要这样的东西,

resource "azurerm_kubernetes_cluster" "kube_cluster" {
  name                = local.cluster_name
  dns_prefix          = local.cluster_name
  location            = var.location
  resource_group_name = local.resource_group

  default_node_pool {
    name       = "default"
    node_count = 2
    vm_size    = "Standard_DS2_v2"
  }

  identity {
    type                      = "UserAssigned"
    user_assigned_identity_id = data.azurerm_user_assigned_identity.managed_identity.id
  }
}

resource "azurerm_role_assignment" "acr_role_assignment" {
  principal_id         = azurerm_kubernetes_cluster.kube_cluster.kubelet_identity[0].object_id
  scope                = data.azurerm_container_registry.container_registry.id
  role_definition_name = "AcrPull"
}

您可以在此处script查看全部内容

is there a terraform way I can assign additional UAMI apart from the one in identity {..} block and use it to access ACR?

根据您提供的详细信息,您可以创建一个额外的UAMI并将其与AKS集群kubelet身份关联,然后将角色分配给UAMI,示例代码在这里: 资源“azurerm_kubernetes_cluster”“示例”{ 名称=“例子-aks1” 位置 = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name dns_prefix = "exampleaks1"

  default_node_pool {
    name       = "default"
    node_count = 1
    vm_size    = "Standard_D2_v2"
  }

  identity {
    type = "SystemAssigned"
  }

  kubelet_identity {
    client-id = azurerm_user_assigned_identity.kubelet.client_id
    object-id = azurerm_user_assigned_identity.kubelet.principal_id
    user_assigned_identity_id = azurerm_user_assigned_identity.kubelet.id
  }
  ...
}

resource "azurerm_role_assignment" "acr_for_kubelet" {
  principal_id         = azurerm_user_assigned_identity.kubelet.client_id
  scope                = azurerm_container_registry.container_registry.id
  role_definition_name = "AcrPull"
}

更新:

实际上,当您创建 AKS 并启用系统分配的托管标识时,它会为 AKS 群集创建两个用户分配的标识,一个用于访问其他资源,一个用于管理 AKS集群本身,这个是 kubelet 身份。

分配kubelet身份权限访问ACR没有意义。您需要做的是分配 AKS 身份权限以访问 ACR。或者使用Kubernetes内部的secret和service account访问ACR。