diff --git a/terraform/modules/docker-network/load-balancer.tf b/terraform/modules/docker-network/load-balancer.tf new file mode 100644 index 0000000..e4d723c --- /dev/null +++ b/terraform/modules/docker-network/load-balancer.tf @@ -0,0 +1,58 @@ +resource "hcloud_load_balancer" "docker" { + count = var.number_nodes > 1 ? 1 : 0 + + load_balancer_type = var.loadbalancer_type + name = format("%s_%s", "docker", var.stage_name) + location = var.locations[count.index].name + network_zone = var.locations[count.index].network_zone + algorithm { + type = "round_robin" + } +} + +resource "hcloud_load_balancer_network" "private" { + count = var.number_nodes > 1 ? 1 : 0 + + load_balancer_id = hcloud_load_balancer.docker[count.index].id + subnet_id = var.server_subnet_id + ip = var.loadbalancer_ip +} + +resource "hcloud_load_balancer_target" "nodes" { + count = var.number_nodes > 1 ? var.number_nodes : 0 + + type = "server" + load_balancer_id = hcloud_load_balancer.docker[0].id + server_id = hcloud_server.node[count.index].id + use_private_ip = true +} + +resource "hcloud_load_balancer_service" "http" { + count = var.number_nodes > 1 ? 1 : 0 + + load_balancer_id = hcloud_load_balancer.docker[count.index].id + protocol = "http" + listen_port = 80 + destination_port = 80 + + http { + sticky_sessions = true + cookie_name = "selected_node_for_session" + cookie_ttl = 3600 + } +} + +resource "hcloud_load_balancer_service" "https" { + count = var.number_nodes > 1 ? 1 : 0 + + load_balancer_id = hcloud_load_balancer.docker[count.index].id + protocol = "https" + listen_port = 443 + destination_port = 443 + + http { + sticky_sessions = true + cookie_name = "selected_node_for_session" + cookie_ttl = 3600 + } +} \ No newline at end of file diff --git a/terraform/modules/docker-network/main.tf b/terraform/modules/docker-network/main.tf index 55d9a57..389cb7a 100644 --- a/terraform/modules/docker-network/main.tf +++ b/terraform/modules/docker-network/main.tf @@ -5,32 +5,3 @@ data "hcloud_placement_group" "default" { locals { docker_network_domain = format("%s.%s.%s", "docker", var.stage_name, var.domain) } - -resource "hcloud_load_balancer" "docker" { - count = var.number_nodes > 1 ? 1 : 0 - - load_balancer_type = var.loadbalancer_type - name = format("%s_%s", "docker", var.stage_name) - location = var.locations[count.index].name - network_zone = var.locations[count.index].network_zone - algorithm { - type = "round_robin" - } -} - -resource "hcloud_load_balancer_network" "private" { - count = var.number_nodes > 1 ? 1 : 0 - - load_balancer_id = hcloud_load_balancer.docker[count.index].id - subnet_id = var.server_subnet_id - ip = var.loadbalancer_ip -} - -resource "hcloud_load_balancer_target" "nodes" { - count = var.number_nodes > 1 ? var.number_nodes : 0 - - type = "server" - load_balancer_id = hcloud_load_balancer.docker[0].id - server_id = hcloud_server.node[count.index].id - use_private_ip = true -}