# Router for the private network resource "upcloud_router" "kubernetes" { name = "${var.prefix}-${var.cluster_name}-router" } # Gateway for internet connectivity resource "upcloud_gateway" "kubernetes" { name = "${var.prefix}-${var.cluster_name}-gateway" zone = var.zone features = ["nat"] router { id = upcloud_router.kubernetes.id } } # Private network for the Kubernetes cluster resource "upcloud_network" "kubernetes" { name = "${var.prefix}-${var.cluster_name}-network" zone = var.zone router = upcloud_router.kubernetes.id ip_network { address = var.network_cidr dhcp = true dhcp_default_route = true family = "IPv4" gateway = cidrhost(var.network_cidr, 1) } depends_on = [upcloud_gateway.kubernetes] } # Kubernetes cluster resource "upcloud_kubernetes_cluster" "main" { name = "${var.prefix}-${var.cluster_name}" zone = var.zone network = upcloud_network.kubernetes.id control_plane_ip_filter = var.control_plane_ip_filter private_node_groups = true } # Node group for worker nodes resource "upcloud_kubernetes_node_group" "workers" { cluster = upcloud_kubernetes_cluster.main.id name = "${var.prefix}-${var.cluster_name}-workers" node_count = var.node_count plan = var.node_plan anti_affinity = var.node_count > 1 labels = { prefix = var.prefix cluster = var.cluster_name role = "worker" env = lookup(var.tags, "Environment", "dev") } }