Создайте виртуальную сеть, используя terraform для кластера AKS - PullRequest
1 голос
/ 24 марта 2020

При создании нового кластера aks с использованием azurerm_kubernetes_cluster автоматически создается новая группа ресурсов с именем - MC_%RESOURCE_GROUP_NAME%_%CLUSTER_NAME%_%LOCATION%, которая содержит все сетевые ресурсы для кластера.

enter image description here

Моя цель - использовать один Vnet, который будет хранить эти ресурсы (сетевой ресурс AKS) и другие ресурсы, такие как виртуальные машины и Azure кеш.

На мой взгляд, Есть 2 варианта решения этой проблемы -

  1. Использование вывода terraform и создание нового ресурса внутри Vnet, созданного автоматически, это не идеально, так как я не оказываю никакого влияния на созданную сеть .
  2. Создайте свой собственный Vnet и присоедините кластер AKS к этому Vnet.

В настоящее время я пытаюсь приблизиться к 2, но пока не получилось.

Будем благодарны за любые мысли, рекомендации и примеры.

1 Ответ

2 голосов
/ 24 марта 2020

Это действительно не так работает. Как вы видели, azure создаст новую RG с кучей вещей, связанных с AKS. Но кластер сам по себе будет go в любой RG, в которой вы хотите, чтобы он был. И затем с помощью сетевого плагина azure ваши модули могут затем go на 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
}
...