From 0e5ae504dbd2179171c29313b2ed8da14bf5e2e4 Mon Sep 17 00:00:00 2001 From: Simon Gerber Date: Wed, 16 Aug 2023 10:53:38 +0200 Subject: [PATCH] wip - lb module --- lb.tf | 31 +++++++++++++++++++------ modules/cloudscale-lb/main.tf | 36 ++++++++++++++++++++++++++++++ modules/cloudscale-lb/output.tf | 1 + modules/cloudscale-lb/providers.tf | 9 ++++++++ modules/cloudscale-lb/variables.tf | 36 ++++++++++++++++++++++++++++++ 5 files changed, 106 insertions(+), 7 deletions(-) create mode 100644 modules/cloudscale-lb/main.tf create mode 100644 modules/cloudscale-lb/output.tf create mode 100644 modules/cloudscale-lb/providers.tf create mode 100644 modules/cloudscale-lb/variables.tf diff --git a/lb.tf b/lb.tf index f8ed0ae..d8522bd 100644 --- a/lb.tf +++ b/lb.tf @@ -20,6 +20,22 @@ module "lb" { enable_proxy_protocol = var.lb_enable_proxy_protocol } +module "lb_api" { + source = "./modules/cloudscale-lb" + cluster_id = var.cluster_id + region = var.region + protocol = "tcp" + subnet_uuid = local.subnet_uuid + members = module.master.ip_addresses[*] + port = 6443 + health_check = { + type = "https" + path = "/readyz" + host = "api.${var.cluster_id}.${var.base_domain}" + } +} + +/* resource "cloudscale_load_balancer" "api" { name = "${var.cluster_id}_api" flavor_slug = "lb-standard" @@ -33,13 +49,6 @@ resource "cloudscale_load_balancer_pool" "api" { load_balancer_uuid = cloudscale_load_balancer.api.id } -resource "cloudscale_load_balancer_listener" "api_k8s" { - name = "${var.cluster_id}_api-k8s" - pool_uuid = cloudscale_load_balancer_pool.api.id - protocol = "tcp" - protocol_port = 6443 -} - resource "cloudscale_load_balancer_pool_member" "api" { count = length(module.master.ip_addresses) name = "${var.cluster_id}_api-member-${count.index}" @@ -49,9 +58,17 @@ resource "cloudscale_load_balancer_pool_member" "api" { subnet_uuid = local.subnet_uuid } +resource "cloudscale_load_balancer_listener" "api_k8s" { + name = "${var.cluster_id}_api-k8s" + pool_uuid = cloudscale_load_balancer_pool.api.id + protocol = "tcp" + protocol_port = 6443 +} + resource "cloudscale_load_balancer_health_monitor" "api" { pool_uuid = cloudscale_load_balancer_pool.api.id type = "https" http_url_path = "/readyz" http_host = "api.${var.cluster_id}.${var.base_domain}" } +*/ diff --git a/modules/cloudscale-lb/main.tf b/modules/cloudscale-lb/main.tf new file mode 100644 index 0000000..9462dc8 --- /dev/null +++ b/modules/cloudscale-lb/main.tf @@ -0,0 +1,36 @@ +resource "cloudscale_load_balancer" "lb" { + name = "${var.cluster_id}_${var.role}" + flavor_slug = "lb-standard" + zone_slug = "${var.region}1" +} + +resource "cloudscale_load_balancer_pool" "api" { + name = "${var.cluster_id}_${var_role}" + algorithm = "round_robin" + protocol = var.protocol + load_balancer_uuid = cloudscale_load_balancer.lb.id +} + +resource "cloudscale_load_balancer_pool_member" "lb" { + count = length(var.members) + name = "${var.cluster_id}_api-member-${count.index}" + pool_uuid = cloudscale_load_balancer_pool.api.id + protocol_port = var.port + address = var.members[count.index] + subnet_uuid = var.subnet_uuid + monitor_port = var.health_check.port +} + +resource "cloudscale_load_balancer_listener" "lb" { + name = "${var.cluster_id}_${var.role}_${var.port}" + pool_uuid = cloudscale_load_balancer_pool.lb.id + protocol = var.protocol + protocol_port = var.port +} + +resource "cloudscale_load_balancer_health_monitor" "lb" { + pool_uuid = cloudscale_load_balancer_pool.lb.id + type = var.health_check.type + http_url_path = var.health_check.path + http_host = var.health_check.host +} diff --git a/modules/cloudscale-lb/output.tf b/modules/cloudscale-lb/output.tf new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/modules/cloudscale-lb/output.tf @@ -0,0 +1 @@ + diff --git a/modules/cloudscale-lb/providers.tf b/modules/cloudscale-lb/providers.tf new file mode 100644 index 0000000..f6f7037 --- /dev/null +++ b/modules/cloudscale-lb/providers.tf @@ -0,0 +1,9 @@ +terraform { + required_version = ">= 1.3.0" + required_providers { + cloudscale = { + source = "cloudscale-ch/cloudscale" + version = "4.2.0" + } + } +} diff --git a/modules/cloudscale-lb/variables.tf b/modules/cloudscale-lb/variables.tf new file mode 100644 index 0000000..8de2ad3 --- /dev/null +++ b/modules/cloudscale-lb/variables.tf @@ -0,0 +1,36 @@ +variable "cluster_id" { + type = string +} + +variable "role" { + type = string +} + +variable "region" { + type = string +} + +variable "protocol" { + type = string +} + +variable "subnet_uuid" { + type = string +} + +variable "members" { + type = list(string) +} + +variable "port" { + type = number +} + +variable "health_check" { + type = object({ type = string, path = string, host = string, port = optional(number) }) +} + +variable "internal_vip" { + type = string + default = "" +}