我正在使用下面的Terraform代码来创建一个资源组,创建一个AKS集群,并且我试图允许AKS集群使用相同订阅中的现有ACR,使用数据{}引用。它在没有角色分配块的情况下工作得很好,但是当我使用它时,我仍然会得到以下错误
Error: Invalid index
on main.tf line 40, in resource "azurerm_role_assignment" "aks_to_acr_role":
40: principal_id = azurerm_kubernetes_cluster.aks.kubelet_identity[0].object_id
|----------------
| azurerm_kubernetes_cluster.aks.kubelet_identity is empty list of object
The given key does not identify an element in this collection value.我查看了所有的堆栈交换,微软的蔚蓝文档和Terraform的问题和许多博客文章,老实说,我不知道在这一点上有什么问题。如有任何建议,将不胜感激。
resource "azurerm_resource_group" "rg" {
name = var.resource_group_name
location = var.location
}
resource "azurerm_kubernetes_cluster" "aks" {
name = var.cluster_name
kubernetes_version = var.kubernetes_version
location = var.location
resource_group_name = azurerm_resource_group.rg.name
dns_prefix = var.cluster_name
default_node_pool {
name = "system"
node_count = var.system_node_count
vm_size = "Standard_B2ms"
type = "VirtualMachineScaleSets"
availability_zones = [1, 2, 3]
enable_auto_scaling = false
}
service_principal {
client_id = var.appId
client_secret = var.password
}
}
data "azurerm_container_registry" "acr_name" {
name = "xxxxx"
resource_group_name = "xxxxx"
}
resource "azurerm_role_assignment" "aks_to_acr_role" {
scope = data.azurerm_container_registry.acr_name.id
role_definition_name = "AcrPull"
principal_id = azurerm_kubernetes_cluster.aks.kubelet_identity[0].object_id
skip_service_principal_aad_check = true
}ACR名称和RG名称是xxxxx,只是为了隐私起见不在代码中。
发布于 2021-11-11 05:55:56
当使用Service Principal作为Kubernetes集群的标识时,kubelet_identity将是空,因为在创建AKS集群时还没有定义identity块。Identity block与Service Principal Block冲突,因此不能在一起使用。
解决方案:
kubelet_identity块,它将自动得到预配置,您可以成功地使用azurerm_kubernetes_cluster.aks.kubelet_identity[0].object_id。因此,代码如下所示:提供程序“azurerm”{ features{} data "azurerm_resource_group“"rg”{ name = "ansumantest“}资源"azurerm_kubernetes_cluster”"aks“{ name = "ansumantestaks”location = data.azurerm_resource_group.rg.location resource_group_name = data.azurerm_resource_group.rg.name dns_prefix= "ansumantestaks-dns“default_node_pool { name = "system”node_count =1 vm_size = "Standard_B2ms“type = "VirtualMachineScaleSets”availability_zones = 1,2,3 enable_auto_scaling = false }标识{ type = "SystemAssigned“}}数据"azurerm_container_registry”"acr_name“{ name = "ansumantestacr”resource_group_name = data.azurerm_resource_group.rg.name } resource "azurerm_role_assignment“"aks_to_acr_role”{ scope= azurerm_kubernetes_cluster.aks.kubelet_identity.object_id role_definition_name = "AcrPull“principal_id =AcrPull skip_service_principal_aad_check = true }
Output:



提供程序“azurerm”{功能{} provider"azuread"{} #服务主体,由AKS使用。数据"azuread_service_principal“"akssp"{ display_name = "aksspansuman”}数据"azurerm_resource_group“"rg”{ name = "ansumantest“}资源"azurerm_kubernetes_cluster”"aks“{ name = "ansumantestaks”location = data.azurerm_resource_group.rg.location resource_group_name =data.azurerm_resource_group。rg.name dns_prefix = "ansumantestaks-dns“default_node_pool { name = "system”node_count =1 vm_size = "Standard_B2ms“type = "VirtualMachineScaleSets”availability_zones = 1,2,3 enable_auto_scaling = false } service_principal { client_id =service_principal= "e997Q~xxxxxxxx“}数据"azurerm_container_registry”"acr_name“{ name = "ansumantestacr”resource_group_name = data.azurerm_resource_group.rg.name } resource "azurerm_role_“赋值"aks_to_acr_role“{ scope = data.azurerm_container_registry.acr_name.id role_definition_name = "AcrPull”principal_id =AcrPull skip_service_principal_aad_check = true }
Outputs:


发布于 2022-06-17 03:30:17
我在寻找一些东西,指派一个网络贡献者的角色给AKS。角色分配需要ID.原则,我通过对AKS terraform对象的检查得到它。
terraform state show azurerm_kubernetes_cluster.aks
---
identity {
principal_id = "9966f59f-745a-4210-abcd-123456789"
tenant_id = "18518570-0488-436a-abcd-123456789"
type = "SystemAssigned"
}所以我意识到我只需要改变azurerm_kubernetes_cluster.aks.kubelet_identity[0].object_id的这个部分。

这为我解决了这个问题。
resource "azurerm_role_assignment" "example" {
scope = data.azurerm_resource_group.staging-rg.id
role_definition_name = "Network Contributor"
principal_id = azurerm_kubernetes_cluster.aks.identity[0].principal_id
}

https://stackoverflow.com/questions/69916317
复制相似问题