TerraformAZURE

Azure AKS Cluster

Managed Kubernetes Service in Azure with system node pool, RBAC, and managed identity.

kubernetesaksazurecontainers

Prerequisites

  • Azure CLI installed and authenticated (`az login`)
  • Terraform >= 1.5.0
  • AzureRM provider >= 3.80

Template Code

# ─────────────────────────────────────────────────────────────────────────────
# Azure AKS Cluster with Managed Identity
# ─────────────────────────────────────────────────────────────────────────────

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.80"
    }
  }
}

provider "azurerm" {
  features {}
}

variable "resource_group_name" {}
variable "location"            { default = "East US" }
variable "cluster_name"        { default = "my-aks-cluster" }
variable "kubernetes_version"  { default = "1.28" }
variable "node_count"          { default = 2 }
variable "vm_size"             { default = "Standard_D2_v3" }

resource "azurerm_resource_group" "main" {
  name     = var.resource_group_name
  location = var.location
}

resource "azurerm_kubernetes_cluster" "main" {
  name                = var.cluster_name
  location            = azurerm_resource_group.main.location
  resource_group_name = azurerm_resource_group.main.name
  dns_prefix          = var.cluster_name
  kubernetes_version  = var.kubernetes_version

  default_node_pool {
    name       = "system"
    node_count = var.node_count
    vm_size    = var.vm_size

    # Enable autoscaler
    enable_auto_scaling = true
    min_count           = 1
    max_count           = 5
  }

  identity {
    type = "SystemAssigned"
  }

  network_profile {
    network_plugin    = "azure"
    load_balancer_sku = "standard"
  }

  # Azure AD RBAC
  azure_active_directory_role_based_access_control {
    managed = true
  }

  tags = { Environment = "production" }
}

output "kube_config"    { value = azurerm_kubernetes_cluster.main.kube_config_raw sensitive = true }
output "cluster_name"   { value = azurerm_kubernetes_cluster.main.name }

Usage

az login
terraform init
terraform apply -var="resource_group_name=my-rg"