问题描述
查看 terraform documentation 我无法确定如何为 aks 集群将 UAMI 分配为 kubelet_identity
。
将 controlPlane UAMI 设置为 here 的 identity { ... }
块不是我要找的。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