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。
查看 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。