使用 terraform 为 AKS 集群创建虚拟网络

Ami*_*nes 3 azure azure-virtual-network terraform azure-aks

使用azurerm_kubernetes_cluster自动创建的新资源组创建新的 aks 集群时,会自动调用 -MC_%RESOURCE_GROUP_NAME%_%CLUSTER_NAME%_%LOCATION%其中包含集群的所有网络资源。

在此处输入图片说明

我的目标是使用一个 Vnet 来保存这些资源(AKS 网络资源)和更多资源,例如 VM 和 Azure 缓存。

在我看来,有 2 个选项可以解决此问题 -

  1. 使用 terraform 输出并在自动创建的 Vnet 内创建新资源,这并不理想,因为我对创建的网络的影响为零。
  2. 创建我自己的 Vnet 并将 AKS 群集附加到此 Vnet。

目前,我正在尝试接近 2,但到目前为止还没有运气。

任何想法、建议和示例将不胜感激。

Opt*_*ier 5

它不是那样工作的。如您所见,azure 将创建一个全新的 RG,其中包含一堆与 AKS 相关的内容。但是集群 itef 将进入您希望它位于的任何 RG。然后使用azure网络插件,您的 pod 可以进入您指定的 VNE,并可以访问您的 Vnet 中的其他资源。

这是我在满足我的需求时如何构建它的示例,对您来说应该是一个很好的入门。

resource "azurerm_resource_group" "rg" {
    name            = var.rgname
    location        = var.location
    tags            = var.default-tags
}

resource "azurerm_virtual_network" "vnet" {
    name                        = "vnet"
    location                    = azurerm_resource_group.rg.location
    resource_group_name         = azurerm_resource_group.rg.name
    address_space               = [var.ipspace]
    tags                        = var.default-tags
}

resource "azurerm_subnet" "vmsubnet" {
    name                        = "vmsubnet"
    resource_group_name         = azurerm_resource_group.rg.name
    virtual_network_name        = azurerm_virtual_network.vnet.name
    address_prefix              = var.vmsubnet
}

resource "azurerm_subnet" "akspodssubnet" {
    name                        = "akspodssubnet"
    resource_group_name         = azurerm_resource_group.rg.name
    virtual_network_name        = azurerm_virtual_network.vnet.name
    address_prefix              = var.akspodssubnet
}


resource "azurerm_kubernetes_cluster" "k8s" {
  name                = "K8Scluster"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name # th RG the single cluster entity goes is
  dns_prefix          = "k8s"
  node_resource_group = "K8S${azurerm_resource_group.rg.name}"  #  all the k8s' entities must be in fdifferent RG than where the cluster object itself is
  api_server_authorized_ip_ranges = ["REDACTED"]
  #enable_pod_security_policy      = true
  kubernetes_version  = "1.15.7"

  default_node_pool {
    name                  = "default"
    type                  = "AvailabilitySet"
    vm_size               = var.vmsize # Standard_DC2s_v2 Standard_B1ms
    enable_node_public_ip = false
    enable_auto_scaling   = false
    os_disk_size_gb       = 30
    node_count            = 1
    vnet_subnet_id        = azurerm_subnet.akspodssubnet.id
  }

  addon_profile {
    kube_dashboard { enabled = true }
  }

  network_profile {
    network_plugin    = "azure"
    network_policy    = "azure"
    load_balancer_sku = "standard"
    service_cidr      = var.aksservicecidr
    docker_bridge_cidr = var.dockercidrip
    dns_service_ip    = var.aksdns
  }

  linux_profile {
    admin_username = var.sudouser
    ssh_key { key_data = var.sshpubkey }
  }

  service_principal {
    client_id     = var.client_id
    client_secret = var.client_secret
  }

  tags  = var.default-tags
}

output "client_certificate" {
  value = azurerm_kubernetes_cluster.k8s.kube_config.0.client_certificate
}

output "kube_config" {
  value = azurerm_kubernetes_cluster.k8s.kube_config_raw
}
Run Code Online (Sandbox Code Playgroud)