#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, но я бы не рекомендовал этого.