diff --git a/terraform/firewall.tf b/terraform/firewall.tf
index bf85feb7ac312e735188bcf7780d75700e0f8c47..b585cd6009b6cc4a51db4fb4ff13bf902d9c4c03 100644
--- a/terraform/firewall.tf
+++ b/terraform/firewall.tf
@@ -21,49 +21,49 @@ resource "hcloud_firewall" "k8s-node" {
     direction   = "in"
     protocol    = "tcp"
     port        = "10250"
-    source_ips  = [for s in concat(module.nodes.ipv4_addresses) : "${s}/32"]
+    source_ips  = [for s in concat(module.controllers.ipv4_addresses, module.workers.ipv4_addresses) : "${s}/32"]
   }
   rule {
     description = "Kubernetes NodePort"
     direction   = "in"
     protocol    = "tcp"
     port        = "30000-32767"
-    source_ips  = [for s in concat(module.nodes.ipv4_addresses) : "${s}/32"]
+    source_ips  = [for s in concat([hcloud_load_balancer.lb.ipv4], module.controllers.ipv4_addresses, module.workers.ipv4_addresses) : "${s}/32"]
   }
   rule {
     description = "Kubernetes NodePort"
     direction   = "in"
     protocol    = "udp"
     port        = "30000-32767"
-    source_ips  = [for s in concat(module.nodes.ipv4_addresses) : "${s}/32"]
+    source_ips  = [for s in concat([hcloud_load_balancer.lb.ipv4], module.controllers.ipv4_addresses, module.workers.ipv4_addresses) : "${s}/32"]
   }
   rule {
     description = "Calico BGP"
     direction   = "in"
     protocol    = "tcp"
     port        = "179"
-    source_ips  = [for s in concat(module.nodes.ipv4_addresses) : "${s}/32"]
+    source_ips  = [for s in concat(module.controllers.ipv4_addresses, module.workers.ipv4_addresses) : "${s}/32"]
   }
   rule {
     description = "Calico VXLAN"
     direction   = "in"
     protocol    = "udp"
     port        = "4789"
-    source_ips  = [for s in concat(module.nodes.ipv4_addresses) : "${s}/32"]
+    source_ips  = [for s in concat(module.controllers.ipv4_addresses, module.workers.ipv4_addresses) : "${s}/32"]
   }
   rule {
     description = "Calico Typha"
     direction   = "in"
     protocol    = "tcp"
     port        = "5473"
-    source_ips  = [for s in concat(module.nodes.ipv4_addresses) : "${s}/32"]
+    source_ips  = [for s in concat(module.controllers.ipv4_addresses, module.workers.ipv4_addresses) : "${s}/32"]
   }
   rule {
     description = "Calico Wireguard"
     direction   = "in"
     protocol    = "udp"
     port        = "51820"
-    source_ips  = [for s in concat(module.nodes.ipv4_addresses) : "${s}/32"]
+    source_ips  = [for s in concat(module.controllers.ipv4_addresses, module.workers.ipv4_addresses) : "${s}/32"]
   }
   # Host level services, including the node exporter on ports 9100-9101.
   rule {
@@ -71,7 +71,7 @@ resource "hcloud_firewall" "k8s-node" {
     direction   = "in"
     protocol    = "tcp"
     port        = "9000-9999"
-    source_ips  = [for s in concat(module.nodes.ipv4_addresses) : "${s}/32"]
+    source_ips  = [for s in concat(module.controllers.ipv4_addresses, module.workers.ipv4_addresses) : "${s}/32"]
   }
   # Host level services, including the node exporter on ports 9100-9101.
   rule {
@@ -79,7 +79,7 @@ resource "hcloud_firewall" "k8s-node" {
     direction   = "in"
     protocol    = "udp"
     port        = "9000-9999"
-    source_ips  = [for s in concat(module.nodes.ipv4_addresses) : "${s}/32"]
+    source_ips  = [for s in concat(module.controllers.ipv4_addresses, module.workers.ipv4_addresses) : "${s}/32"]
   }
 }
 
@@ -87,7 +87,7 @@ resource "hcloud_firewall" "k8s-node" {
 resource "hcloud_firewall" "k8s-master" {
   name = "k8s-master"
   apply_to {
-    label_selector = "k8s.io/master"
+    label_selector = "k8s.io/controlplane"
   }
 
   # ICMP is always a good idea
@@ -107,28 +107,28 @@ resource "hcloud_firewall" "k8s-master" {
     direction   = "in"
     protocol    = "tcp"
     port        = "6443"
-    source_ips  = [for s in concat([hcloud_load_balancer.lb.ipv4], module.nodes.ipv4_addresses) : "${s}/32"]
+    source_ips  = [for s in concat([hcloud_load_balancer.lb.ipv4], module.controllers.ipv4_addresses, module.workers.ipv4_addresses) : "${s}/32"]
   }
   rule {
     description = "etcd"
     direction   = "in"
     protocol    = "tcp"
     port        = "2379-2381"
-    source_ips  = [for s in module.nodes.ipv4_addresses : "${s}/32"]
+    source_ips  = [for s in module.controllers.ipv4_addresses : "${s}/32"]
   }
   rule {
     description = "kube-scheduler"
     direction   = "in"
     protocol    = "tcp"
     port        = "10251"
-    source_ips  = [for s in module.nodes.ipv4_addresses : "${s}/32"]
+    source_ips  = [for s in concat(module.controllers.ipv4_addresses, module.workers.ipv4_addresses) : "${s}/32"]
   }
   rule {
     description = "kube-controller-manager"
     direction   = "in"
     protocol    = "tcp"
     port        = "10252"
-    source_ips  = [for s in module.nodes.ipv4_addresses : "${s}/32"]
+    source_ips  = [for s in concat(module.controllers.ipv4_addresses, module.workers.ipv4_addresses) : "${s}/32"]
   }
 }
 
@@ -155,13 +155,13 @@ resource "hcloud_firewall" "k8s-ingress" {
     direction   = "in"
     protocol    = "tcp"
     port        = "32080"
-    source_ips  = [for s in [hcloud_load_balancer.lb.ipv4] : "${s}/32"]
+    source_ips  = [for s in concat([hcloud_load_balancer.lb.ipv4], module.controllers.ipv4_addresses, module.workers.ipv4_addresses) : "${s}/32"]
   }
   rule {
     description = "Public HTTPS"
     direction   = "in"
     protocol    = "tcp"
     port        = "32443"
-    source_ips  = [for s in [hcloud_load_balancer.lb.ipv4] : "${s}/32"]
+    source_ips  = [for s in concat([hcloud_load_balancer.lb.ipv4], module.controllers.ipv4_addresses, module.workers.ipv4_addresses) : "${s}/32"]
   }
 }
diff --git a/terraform/loadbalancer.tf b/terraform/loadbalancer.tf
index f01dca818304fd3be5c6c6d45a2c1261e39aa95c..3ff60529b48f2dea71a1f3ac193d316a5ba06ba3 100644
--- a/terraform/loadbalancer.tf
+++ b/terraform/loadbalancer.tf
@@ -7,7 +7,7 @@ resource "hcloud_load_balancer" "lb" {
 resource "hcloud_load_balancer_target" "lb_target_master" {
   type             = "label_selector"
   load_balancer_id = hcloud_load_balancer.lb.id
-  label_selector   = "k8s.io/master"
+  label_selector   = "k8s.io/controlplane"
   use_private_ip   = false
 }
 
diff --git a/terraform/main.tf b/terraform/main.tf
index cd1dd2a206c5869a571559e29d96970324b9b128..cd652b33d4e9bd2cef173e7b850ae152c01a46bb 100644
--- a/terraform/main.tf
+++ b/terraform/main.tf
@@ -6,17 +6,17 @@ resource "hcloud_placement_group" "k8s" {
   }
 }
 
-module "nodes" {
+module "controllers" {
   source         = "./modules/hcloud_instance"
   instance_count = var.replicas_nodes
   location       = var.location
-  name           = "node"
+  name           = "cp"
   dns_domain     = var.dns_domain
   dns_zone_id    = var.dns_zone_id
   image          = var.image
   labels = {
     "k8s.io/node"    = "true",
-    "k8s.io/master"  = "true",
+    "k8s.io/controlplane"  = "true",
     "k8s.io/ingress" = "true",
   }
   placement_group_id = hcloud_placement_group.k8s.id