187 lines
6.6 KiB
Terraform
187 lines
6.6 KiB
Terraform
|
# Main load balancer. L4, backed by Octavia
|
||
|
resource "openstack_lb_loadbalancer_v2" "main_lb" {
|
||
|
vip_subnet_id = module.common_variables.main_private_subnet_id
|
||
|
name = module.common_variables.octavia_information.main_lb_name
|
||
|
description = module.common_variables.octavia_information.main_lb_description
|
||
|
flavor_id = module.common_variables.octavia_information.octavia_flavor_id
|
||
|
vip_address = module.common_variables.basic_services_ip.octavia_main
|
||
|
loadbalancer_provider = "amphora"
|
||
|
}
|
||
|
|
||
|
# Allocate a floating IP
|
||
|
resource "openstack_networking_floatingip_v2" "main_lb_ip" {
|
||
|
pool = module.common_variables.floating_ip_pools.main_public_ip_pool
|
||
|
# The DNS association does not work because of a bug in the OpenStack API
|
||
|
# dns_name = "main-lb"
|
||
|
# dns_domain = module.common_variables.dns_zone.zone_name
|
||
|
description = module.common_variables.octavia_information.main_lb_description
|
||
|
}
|
||
|
|
||
|
resource "openstack_networking_floatingip_associate_v2" "main_lb" {
|
||
|
floating_ip = openstack_networking_floatingip_v2.main_lb_ip.address
|
||
|
port_id = openstack_lb_loadbalancer_v2.main_lb.vip_port_id
|
||
|
}
|
||
|
|
||
|
locals {
|
||
|
recordset_name = "${module.common_variables.octavia_information.main_lb_hostname}.${module.common_variables.dns_zone.zone_name}"
|
||
|
}
|
||
|
|
||
|
resource "openstack_dns_recordset_v2" "main_lb_dns_recordset" {
|
||
|
zone_id = module.common_variables.dns_zone_id
|
||
|
name = local.recordset_name
|
||
|
description = "Public IP address of the main load balancer"
|
||
|
ttl = 8600
|
||
|
type = "A"
|
||
|
records = [openstack_networking_floatingip_v2.main_lb_ip.address]
|
||
|
}
|
||
|
|
||
|
# Main HAPROXY stats listener
|
||
|
resource "openstack_lb_listener_v2" "main_haproxy_stats_listener" {
|
||
|
loadbalancer_id = openstack_lb_loadbalancer_v2.main_lb.id
|
||
|
protocol = "TCP"
|
||
|
protocol_port = 8880
|
||
|
description = "Listener for the stats of the main HAPROXY instances"
|
||
|
name = "main_haproxy_stats_listener"
|
||
|
allowed_cidrs = [module.common_variables.ssh_sources.d4s_vpn_1_cidr,module.common_variables.ssh_sources.d4s_vpn_2_cidr,module.common_variables.ssh_sources.s2i2s_vpn_1_cidr,module.common_variables.ssh_sources.s2i2s_vpn_2_cidr]
|
||
|
|
||
|
}
|
||
|
|
||
|
resource "openstack_lb_pool_v2" "main_haproxy_stats_pool" {
|
||
|
listener_id = openstack_lb_listener_v2.main_haproxy_stats_listener.id
|
||
|
protocol = "TCP"
|
||
|
lb_method = "LEAST_CONNECTIONS"
|
||
|
name = "main-haproxy-lb-stats"
|
||
|
description = "Pool for the stats of the main HAPROXY instances"
|
||
|
persistence {
|
||
|
type = "SOURCE_IP"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
resource "openstack_lb_members_v2" "main_haproxy_stats_pool_members" {
|
||
|
pool_id = openstack_lb_pool_v2.main_haproxy_stats_pool.id
|
||
|
member {
|
||
|
name = "haproxy l7 1"
|
||
|
address = module.common_variables.basic_services_ip.haproxy_l7_1
|
||
|
protocol_port = 8880
|
||
|
}
|
||
|
member {
|
||
|
name = "haproxy l7 2"
|
||
|
address = module.common_variables.basic_services_ip.haproxy_l7_2
|
||
|
protocol_port = 8880
|
||
|
}
|
||
|
}
|
||
|
|
||
|
resource "openstack_lb_monitor_v2" "main_haproxy_stats_monitor" {
|
||
|
pool_id = openstack_lb_pool_v2.main_haproxy_stats_pool.id
|
||
|
name = "main_haproxy_stats_monitor"
|
||
|
type = "TCP"
|
||
|
delay = 20
|
||
|
timeout = 5
|
||
|
max_retries = 3
|
||
|
admin_state_up = true
|
||
|
}
|
||
|
|
||
|
# Main HAPROXY HTTP
|
||
|
resource "openstack_lb_listener_v2" "main_haproxy_http_listener" {
|
||
|
loadbalancer_id = openstack_lb_loadbalancer_v2.main_lb.id
|
||
|
protocol = "TCP"
|
||
|
protocol_port = 80
|
||
|
description = "HTTP listener of the main HAPROXY instances"
|
||
|
name = "main_haproxy_http_listener"
|
||
|
admin_state_up = true
|
||
|
}
|
||
|
|
||
|
resource "openstack_lb_pool_v2" "main_haproxy_http_pool" {
|
||
|
listener_id = openstack_lb_listener_v2.main_haproxy_http_listener.id
|
||
|
protocol = "PROXYV2"
|
||
|
lb_method = "LEAST_CONNECTIONS"
|
||
|
name = "main-haproxy-lb-http"
|
||
|
description = "Pool for the HTTP listener of the main HAPROXY instances"
|
||
|
persistence {
|
||
|
type = "SOURCE_IP"
|
||
|
}
|
||
|
admin_state_up = true
|
||
|
}
|
||
|
|
||
|
resource "openstack_lb_members_v2" "main_haproxy_http_pool_members" {
|
||
|
pool_id = openstack_lb_pool_v2.main_haproxy_http_pool.id
|
||
|
member {
|
||
|
name = "haproxy l7 1"
|
||
|
address = module.common_variables.basic_services_ip.haproxy_l7_1
|
||
|
protocol_port = 80
|
||
|
}
|
||
|
member {
|
||
|
name = "haproxy l7 2"
|
||
|
address = module.common_variables.basic_services_ip.haproxy_l7_2
|
||
|
protocol_port = 80
|
||
|
}
|
||
|
}
|
||
|
|
||
|
resource "openstack_lb_monitor_v2" "main_haproxy_http_monitor" {
|
||
|
pool_id = openstack_lb_pool_v2.main_haproxy_http_pool.id
|
||
|
name = "main_haproxy_http_monitor"
|
||
|
type = "HTTP"
|
||
|
http_method = "GET"
|
||
|
url_path = "/_haproxy_health_check"
|
||
|
expected_codes = "200"
|
||
|
delay = 20
|
||
|
timeout = 5
|
||
|
max_retries = 3
|
||
|
admin_state_up = true
|
||
|
}
|
||
|
|
||
|
# Main HAPROXY HTTPS
|
||
|
resource "openstack_lb_listener_v2" "main_haproxy_https_listener" {
|
||
|
loadbalancer_id = openstack_lb_loadbalancer_v2.main_lb.id
|
||
|
protocol = "TCP"
|
||
|
protocol_port = 443
|
||
|
description = "HTTPS listener of the main HAPROXY instances"
|
||
|
name = "main_haproxy_https_listener"
|
||
|
admin_state_up = true
|
||
|
}
|
||
|
|
||
|
resource "openstack_lb_pool_v2" "main_haproxy_https_pool" {
|
||
|
listener_id = openstack_lb_listener_v2.main_haproxy_https_listener.id
|
||
|
protocol = "PROXYV2"
|
||
|
lb_method = "LEAST_CONNECTIONS"
|
||
|
name = "main-haproxy-lb-https"
|
||
|
description = "Pool for the HTTPS listener of the main HAPROXY instances"
|
||
|
persistence {
|
||
|
type = "SOURCE_IP"
|
||
|
}
|
||
|
admin_state_up = true
|
||
|
}
|
||
|
|
||
|
resource "openstack_lb_members_v2" "main_haproxy_https_pool_members" {
|
||
|
pool_id = openstack_lb_pool_v2.main_haproxy_https_pool.id
|
||
|
member {
|
||
|
name = "haproxy l7 1"
|
||
|
address = module.common_variables.basic_services_ip.haproxy_l7_1
|
||
|
protocol_port = 443
|
||
|
}
|
||
|
member {
|
||
|
name = "haproxy l7 2"
|
||
|
address = module.common_variables.basic_services_ip.haproxy_l7_2
|
||
|
protocol_port = 443
|
||
|
}
|
||
|
}
|
||
|
|
||
|
resource "openstack_lb_monitor_v2" "main_haproxy_https_monitor" {
|
||
|
pool_id = openstack_lb_pool_v2.main_haproxy_https_pool.id
|
||
|
name = "main_haproxy_https_monitor"
|
||
|
type = "HTTPS"
|
||
|
http_method = "GET"
|
||
|
url_path = "/_haproxy_health_check"
|
||
|
expected_codes = "200"
|
||
|
delay = 20
|
||
|
timeout = 5
|
||
|
max_retries = 3
|
||
|
admin_state_up = true
|
||
|
}
|
||
|
|
||
|
output "main_loadbalancer_ip" {
|
||
|
description = "Main Load balancer IP address"
|
||
|
value = openstack_lb_loadbalancer_v2.main_lb.vip_address
|
||
|
}
|
||
|
|