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

问题描述

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

将 controlPlane UAMI 设置为 hereidentity { ... } 块不是我要找的。​​p>

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

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

解决方法

是否有一种地形方式可以分配额外的 UAMI 身份 {..} 块中的一个并使用它来访问 ACR?

根据您提供的详细信息,您可以创建额外的 UAMI 并将其与 AKS 集群 kubelet 身份关联,然后将角色分配给 UAMI,示例代码如下: 资源“azurerm_kubernetes_cluster”“示例”{ name = "example-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 身份。

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

,

你需要这样的东西,

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...