AKS терраформирования и ссылка на node_resource_group

#terraform #azure-aks

#terraform #azure-aks

Вопрос:

Итак, я пытаюсь создать шлюз приложений с использованием Terraform для использования в качестве AGIC. Я хотел бы иметь ресурсы для этого в той же группе ресурсов, что и узлы, которая создается автоматически.

AKS

 # Create aks cluster
# A new resource group will be auto created for node_resource_group
resource "azurerm_kubernetes_cluster" "aks" {
  name                            = "${var.RESOURCE_GRP_NAME}-AKS"
  location                        = var.LOCATION
  resource_group_name             = azurerm_resource_group.k8s_resource_grp.name
  dns_prefix                      = "${var.RESOURCE_GRP_NAME}-AKS"
  node_resource_group             = "${var.RESOURCE_GRP_NAME}-INF"
  kubernetes_version              = var.KUBERNETES.KubernetesVersion
  api_server_authorized_ip_ranges = var.KUBERNETES_ALLOWED_IP_RANGES
  tags                            = var.TAGS


  default_node_pool {
    name                = "default"
    type                = "VirtualMachineScaleSets"
    node_count          = var.KUBERNETES.NodeCount
    availability_zones  = var.KUBERNETES.AvailabilityZones
    vm_size             = var.KUBERNETES.NodeVmSize
    enable_auto_scaling = var.KUBERNETES.AutoScaleBool
    os_disk_size_gb     = var.KUBERNETES.OSDiskSize
    max_pods            = var.KUBERNETES.MaxPods
    node_labels         = var.KUBERNETES.Labels
    node_taints         = var.KUBERNETES.Taints
    min_count           = var.KUBERNETES.AutoScaleMinCount
    max_count           = var.KUBERNETES.AutoScaleMaxCount
  }

  identity {
    type = "SystemAssigned"
  }

  role_based_access_control {
    enabled = true

    azure_active_directory {
      managed = true
      admin_group_object_ids = var.KUBERNETES.AdminGroupObjectIds
    }
  }

  addon_profile {
    oms_agent {
      enabled = true
      log_analytics_workspace_id = azurerm_log_analytics_workspace.log_analytics_workspace.id
    }
    kube_dashboard {
      enabled = false
    }
    azure_policy {
      enabled = true
    }
  }

  network_profile {
    load_balancer_sku  = "standard"
    outbound_type      = "loadBalancer"
    network_plugin     = "azure"
    network_policy     = "azure"
    dns_service_ip     = "10.0.0.10"
    docker_bridge_cidr = "172.17.0.1/16"
    service_cidr       = "10.0.0.0/16"
  }
}
  

Просто пытаюсь сделать что-то вроде этого:

 resource "azurerm_virtual_network" "aks_vnet" {
    name                        = "vnet"
    location                    = var.LOCATION
    resource_group_name         = "${var.RESOURCE_GRP_NAME}-INF"
    address_space               = ["10.0.0.0/8"]
    tags                        = var.TAGS
    depends_on = [azurerm_kubernetes_cluster.aks]
}
  

ВОЗВРАТ Error: Cycle: azurerm_virtual_network.aks_vnet, azurerm_subnet.pods_subnet, azurerm_kubernetes_cluster.aks

Почему нельзя azurerm_kubernetes_cluster использовать в depends_on ?

Я также попытался сослаться на группу ресурсов, которая будет создана следующим образом:

 resource "azurerm_virtual_network" "aks_vnet" {
    name                        = "vnet"
    location                    = var.LOCATION
    resource_group_name         = azurerm_kubernetes_cluster.aks.node_resource_group
    address_space               = ["10.0.0.0/8"]
    tags                        = var.TAGS
}
  

Что дает мне Error: Cycle: azurerm_kubernetes_cluster.aks, azurerm_virtual_network.aks_vnet, azurerm_subnet.pods_subnet


Почему это происходит? Я не могу ссылаться ни на что внутри azurerm_kubernetes_cluster .

Ответ №1:

Короткий ответ: вы не можете. По крайней мере, не простым и рекомендуемым способом.

Можно поместить вашу виртуальную сеть в эту группу ресурсов, но не в том случае, если вы хотите использовать ее и для AKS. Основываясь на вашем сообщении об ошибке, я ожидаю, что вы используете azurerm_subnet.pods_subnet в своей настройке AKS like vnet_subnet_id = azurerm_subnet.pods_subnet.id (in default_node_pool ), что действительно создает циклическую зависимость.

Можно импортировать управляемую виртуальную сеть (которая создается для AKS, когда вы не указываете vnet_subnet_id и не добавляете подсети в эту виртуальную сеть для AGIC, но я бы не рекомендовал этого.