From 56fcb4f88a249692c533ed8c48a609802d3f3bd3 Mon Sep 17 00:00:00 2001 From: Luca Prete Date: Fri, 24 Nov 2023 14:02:34 +0100 Subject: [PATCH] F5 deployment blueprint (#1883) Co-authored-by: Luca Prete --- blueprints/third-party-solutions/README.md | 2 +- .../third-party-solutions/f5-bigip/README.md | 10 +- .../f5-bigip-ha-active-deployment/README.md | 122 +++++++++++++++ .../f5-bigip-ha-active-deployment/backends.tf | 57 +++++++ .../f5-bigip-ha-active-deployment/clients.tf | 30 ++++ .../data/my_key.pub | 1 + .../diagram-flow.png | Bin 0 -> 49502 bytes .../diagram-flow.svg | 1 + .../f5-bigip-ha-active-deployment/diagram.png | Bin 0 -> 64607 bytes .../f5-bigip-ha-active-deployment/diagram.svg | 1 + .../load-balancer.tf | 48 ++++++ .../f5-bigip-ha-active-deployment/main.tf | 128 ++++++++++++++++ .../f5-bigip-ha-active-deployment/outputs.tf | 25 +++ .../variables.tf | 144 ++++++++++++++++++ 14 files changed, 566 insertions(+), 3 deletions(-) create mode 100644 blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/README.md create mode 100644 blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/backends.tf create mode 100644 blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/clients.tf create mode 100644 blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/data/my_key.pub create mode 100644 blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/diagram-flow.png create mode 100644 blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/diagram-flow.svg create mode 100644 blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/diagram.png create mode 100644 blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/diagram.svg create mode 100644 blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/load-balancer.tf create mode 100644 blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/main.tf create mode 100644 blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/outputs.tf create mode 100644 blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/variables.tf diff --git a/blueprints/third-party-solutions/README.md b/blueprints/third-party-solutions/README.md index 7df3abf5..13a441b2 100644 --- a/blueprints/third-party-solutions/README.md +++ b/blueprints/third-party-solutions/README.md @@ -24,6 +24,6 @@ The blueprints in this folder show how to automate installation of specific thir ### F5 BigIP -

These examples show how to deploy both private and public active/active F5 BigIP-VE load balancers in GCP.

+

These examples show how to deploy F5 BigIP-VE load balancers in GCP.


\ No newline at end of file diff --git a/blueprints/third-party-solutions/f5-bigip/README.md b/blueprints/third-party-solutions/f5-bigip/README.md index 98df739a..2697efbb 100644 --- a/blueprints/third-party-solutions/f5-bigip/README.md +++ b/blueprints/third-party-solutions/f5-bigip/README.md @@ -6,6 +6,12 @@ The blueprints in this folder show how to deploy both private and public active/ ### F5 BigIP -

This example shows how to deploy both private and public active/active F5 BigIP-VE load balancers in GCP. It deploys external and/or internal GCP network passthrough load balancers in front of the F5 VMs in order to load balance the ingress traffic between them and it supports both IPv4 and IPv6.

+

This blueprint shows how to deploy both private and public active/active F5 BigIP-VE load balancers in GCP. It deploys external and/or internal GCP network passthrough load balancers in front of the F5 VMs in order to load balance the ingress traffic and it supports both IPv4 and IPv6.

-
\ No newline at end of file +
+ +### F5 BigIP-HA deployment + +

The blueprint demonstrates how to deploy active-active F5 BigIP load balancers in a VPC, leveraging the [f5-big-ha-active blueprint](./f5-bigip-ha-active/README.md). In this example, the load balancer is exposed to internal sample clients only and it can handle both IPv4 and an IPv6 traffic.

+ +
diff --git a/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/README.md b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/README.md new file mode 100644 index 00000000..60723eb7 --- /dev/null +++ b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/README.md @@ -0,0 +1,122 @@ +# F5 Big-IP + +This blueprint shows how to the deploy [F5 BigIP Virtual Edition (VE)](https://www.f5.com/trials/big-ip-virtual-edition) on GCP, leveraging the [f5-bigip-ha-active blueprint](../f5-bigip-ha-active/README.md). + +

+ Networking diagram +

+ +Calling the [f5-bigip-ha-active blueprint](../f5-bigip-ha-active/README.md), we deploy: +- 2 F5 BigIP VMs, each in an unmanaged instance group, in a dedicated zone +- 1 internal network passthrough load balancer in `L3_default` mode, pointing to the F5 instance groups. By default, the load balancer will expose two forwarding rules (IPs): one for IPv4, one for IPv6 + +Additionally, we deploy directly through this blueprint: +- 1 project containing all the other resources (optional) +- 1 dataplane VPC where all VM NICs are attached, equipped with Cloud NAT (so that the backend VMs can access the Internet). One subnet is dedicated to clients. One subnet is dedicated to F5 VMs and backend VMs +- 1 management VPC used by F5 VMs only, equipped with Cloud NAT (for F5 management connectivity) +- 2 demo backend VMs running Nginx, installed at startup +- Different firewall rules to allow the clients to connect to the F5 instances, and the F5 instances to connect to the backends +- 1 static route in the dataplane VPC that forwards traffic destined to the backends to the internal network passthrough load balancer + +## Apply this blueprint + +- If you're leveraging an existing project, make sure you have the roles to attach service accounts and log into VMs (typically, `roles/iam.serviceAccountUser`). +- Register an F5 BigIP-VE license or apply for an F5 BigIP-VE trial license. +- Substitute the default values for each F5 instance in the `instance_dedicated_config` variable. +- Substitute the [default public key](data/my_key.pub) in the `data` folder with your own public key. This should automatically grant you SSH access. +- Run `terraform init, terraform apply` +- At startup, the F5 VMs should download some software and reboot twice. Check the serial console logs to make sure everything works as expected and no errors occur. + +Please, refer to the [blueprint documentation](../f5-bigip-ha-active/README.md) for variables definitions and further module customizations. + +## Access the F5 machines through IAP tunnels + +F5 management IPs are private. If you haven't setup any hybrid connectivity (i.e. VPN/Interconnect) you can still access the VMs with SSH and their GUI leveraging IAP tunnels. + +```shell +gcloud compute ssh YOUR_F5_VM_NAME \ + --project YOUR_PROJECT \ + --zone europe-west8-a -- \ + -L 4431:127.0.0.1:8443 \ + -L 221:127.0.0.1:22 \ + -N -q -f + +gcloud compute ssh YOUR_F5_VM_NAME \ + --project YOUR_PROJECT \ + --zone europe-west8-b -- \ + -L 4432:127.0.0.1:8443 \ + -L 222:127.0.0.1:22 \ + -N -q -f +``` + +Once tunnels are established, from your machine: + +Connect to the machine in zone `a` using: +- SSH: `127.0.0.1`, port `221` +- GUI: `127.0.0.1`, port `4431` + +Connect to the machine in zone `b` using: +- SSH: `127.0.0.1`, port `222` +- GUI: `127.0.0.1`, port `4432` + +The default username is `admin` and the password is `MyFabricSecret123!` + +## F5 configuration + +Please, refer to the [f5-bigip-ha-active blueprint section](../f5-bigip-ha-active/README.md#f5-configuration) + +## Internal IPv4 traffic routing + +For private IPv4 traffic, you have two options: + +- Create as many forwarding rules as you need and point your clients directly to the forwarding rules virtual IPs. +- Create one forwarding rule and create one static route that points to a virtual subnet representing your backend servers, that uses the load balancer VIP as the next-hop. + +The blueprint chooses the second option, although this configuration is not enforced in the [f5-bigip-ha-active blueprint](../f5-bigip-ha-active/README.md) itself. This helps to minimize the number of forwarding rules. + +The diagram shows the path of the traffic and how we modify the packet as it goes through the load balancers. + +

+ IPv4 traffic flow diagram +

+ +Please, note there are a few caveats: + +- Forwarding rules of protocol type `L3_DEFAULT` cannot be set as next-hops of static routes. That's why we set all the IPv4 load balancers with protocol type `TCP`. Anyway, if a load balancer is used as a next-hop for a route it can forward multiple protocols. +- At the moment of writing, IPv6 forwarding rules cannot be used as route next-hops. You will need to create as many IPv6 forwarding rules you need. +- The "route path" doesn't apply to external traffic. +- The backend servers virtual subnet (`192.168.200.0/24`) is (by design) not configured on any VPC and is different from the backend VMs subnet (`192.168.0.0/24`). It's just a commodity subnet used to identify a backend service that we use as the static route destination. Traffic should land on your F5s using a (destination) IP in that subnet. Your irules should match those virtual IPs and change the packets destination IPs, as they forward it to the backends. + +## Variables + +| name | description | type | required | default | +|---|---|:---:|:---:|:---:| +| [prefix](variables.tf#L82) | The name prefix used for resources. | string | ✓ | | +| [project_id](variables.tf#L93) | The project id where we deploy the resources. | string | ✓ | | +| [region](variables.tf#L98) | The region where we deploy the F5 IPs. | string | ✓ | | +| [backend_vm_configs](variables.tf#L17) | The sample backend VMs configuration. Keys are the zones where VMs are deployed. | map(object({…})) | | {…} | +| [forwarding_rules_config](variables.tf#L38) | The optional configurations of the GCP load balancers forwarding rules. | map(any) | | {…} | +| [instance_dedicated_configs](variables.tf#L52) | The F5 VMs configuration. The map keys are the zones where the VMs are deployed. | map(any) | | {…} | +| [instance_shared_config](variables.tf#L73) | The F5 VMs shared configurations. | map(any) | | {…} | +| [project_create](variables.tf#L87) | Whether to automatically create a project. | bool | | false | +| [vpc_config](variables.tf#L103) | VPC and subnet ids, in case existing VPCs are used. | object({…}) | | {…} | + +## Outputs + +| name | description | sensitive | +|---|---|:---:| +| [f5_management_ips](outputs.tf#L17) | The F5 management interfaces IP addresses. | | +| [forwarding_rule_configss](outputs.tf#L22) | The GCP forwarding rules configurations. | | + + +## Test +```hcl +module "f5-deployment" { + source = "./fabric/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment" + prefix = "test" + project_create = true + project_id = "test-project" + region = "europe-west1" +} +# tftest modules=21 resources=45 +``` \ No newline at end of file diff --git a/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/backends.tf b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/backends.tf new file mode 100644 index 00000000..c478240a --- /dev/null +++ b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/backends.tf @@ -0,0 +1,57 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +module "backend-vm-addresses" { + source = "../../../../modules/net-address" + project_id = local.project_id + internal_addresses = { + for k, v in var.backend_vm_configs + : k => { + address = v.address + name = "${var.prefix}-backend-ip-${k}" + region = var.region + subnetwork = module.vpc-dataplane.subnet_self_links["${var.region}/${var.prefix}-dataplane"] + } + } +} + +module "backends-sa" { + source = "../../../../modules/iam-service-account" + project_id = local.project_id + name = "${var.prefix}-backends-sa" +} + +module "backend-vms" { + for_each = var.backend_vm_configs + source = "../../../../modules/compute-vm" + project_id = local.project_id + zone = "${var.region}-${each.key}" + name = "${var.prefix}-backend-${each.key}" + instance_type = "e2-micro" + network_interfaces = [ + { + network = module.vpc-dataplane.self_link + subnetwork = module.vpc-dataplane.subnet_self_links["${var.region}/${var.prefix}-dataplane"] + stack_type = "IPV4_IPV6" + addresses = { + internal = module.backend-vm-addresses.internal_addresses["${var.prefix}-backend-ip-${each.key}"].address + } + } + ] + service_account = { + email = module.backends-sa.email + } +} diff --git a/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/clients.tf b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/clients.tf new file mode 100644 index 00000000..2b0eb184 --- /dev/null +++ b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/clients.tf @@ -0,0 +1,30 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +module "client-vm" { + source = "../../../../modules/compute-vm" + project_id = var.project_id + zone = "${var.region}-${keys(var.backend_vm_configs)[0]}" + name = "${var.prefix}-client" + instance_type = "e2-micro" + + network_interfaces = [ + { + network = module.vpc-dataplane.self_link + subnetwork = module.vpc-dataplane.subnet_self_links["${var.region}/${var.prefix}-clients"] + } + ] +} diff --git a/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/data/my_key.pub b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/data/my_key.pub new file mode 100644 index 00000000..9da6f716 --- /dev/null +++ b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/data/my_key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC+9H0EktDukeR0GZ0jbIfXyGCmt/hCmJMMsXJ6PfHldxbk4BBxV+vYk4n2xTB/6dGeb306vxhXvPMuwnfH1QyUm6OqZ9Qn82K+vHHehy4ChF4mJWAvzruzIr5JMS278PRQtUPFsu2b891c+A2h1VtSt1t65+6JkuRjgLBZm8pkVp8HPADa3btRSuVhFeu85MRJgE3IORQnpodmPf2SQy7NeTxPKICI4M5+JWJnXhVw0UKIcPpxJU3VisP3zAiIcE2RZMORZuAxwccl+dEgjNaNAelE+aOG9KDnrDLHoNeE/vMEMfSifq1mkMna2/EnB4R674o2LBWaq/ooN1Gh6Cq2ZnSsp8UmS3my0KgTe/kRFkqs/NxOC/mV9MKJjF1yKLJKZxXQs/5yH5/DYjlSmGgDGxaicmkhOC1+pjcA2b7HqoKLvZ3tlswplvtdDwIGdQXsVYM0Dg/sEwbM2OZgeY8X5Lnxyij5ZLsEUftLzJLTuuaokGhyrG/aFs0CmwRPBHk= lucaprete@lucaprete-macbookpro.roam.corp.google.com diff --git a/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/diagram-flow.png b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/diagram-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..144e77103b56ddee9b6a5082ad294d76d8d75951 GIT binary patch literal 49502 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 Rfi7am%cwleyZ_Yhe*kq \ No newline at end of file diff --git a/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/diagram.png b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..75f05ddcc52b50cbd83b4bab032edf4e50239e00 GIT binary patch literal 64607 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 EACAlEVgLXD literal 0 HcmV?d00001 diff --git a/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/diagram.svg b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/diagram.svg new file mode 100644 index 00000000..649bd22b --- /dev/null +++ b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/diagram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/load-balancer.tf b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/load-balancer.tf new file mode 100644 index 00000000..9e9a91c0 --- /dev/null +++ b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/load-balancer.tf @@ -0,0 +1,48 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +locals { + instance_shared_config = merge( + var.instance_shared_config, + { service_account = module.f5-sa.email } + ) +} + +module "f5-sa" { + source = "../../../../modules/iam-service-account" + project_id = local.project_id + name = "${var.prefix}-f5-sa" +} + +module "f5-lb" { + source = "../f5-bigip-ha-active" + forwarding_rules_config = var.forwarding_rules_config + instance_dedicated_configs = var.instance_dedicated_configs + instance_shared_config = local.instance_shared_config + prefix = var.prefix + project_id = local.project_id + region = var.region + vpc_config = { + dataplane = { + network = module.vpc-dataplane.self_link + subnetwork = module.vpc-dataplane.subnet_self_links["${var.region}/${var.prefix}-dataplane"] + } + management = { + network = module.vpc-management.self_link + subnetwork = module.vpc-management.subnet_self_links["${var.region}/${var.prefix}-management"] + } + } +} diff --git a/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/main.tf b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/main.tf new file mode 100644 index 00000000..a364eab0 --- /dev/null +++ b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/main.tf @@ -0,0 +1,128 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +locals { + project_id = ( + var.project_create + ? module.project.project_id + : var.project_id + ) +} + +module "project" { + source = "../../../../modules/project" + name = var.project_id + project_create = var.project_create + services = [ + "compute.googleapis.com" + ] +} + +module "vpc-dataplane" { + source = "../../../../modules/net-vpc" + project_id = local.project_id + name = "${var.prefix}-vpc-dataplane" + ipv6_config = { + enable_ula_internal = true + } + routes = { + next-hop = { + description = "Route to virtual backend servers subnet." + dest_range = var.vpc_config.backend_vms_cidr + next_hop_type = "ilb" + next_hop = var.forwarding_rules_config["ipv4"]["address"] + } + } + subnets = [ + { + ip_cidr_range = var.vpc_config.dataplane.subnets.clients.cidr + ipv6 = {} + name = "${var.prefix}-clients" + region = var.region + }, + { + ip_cidr_range = var.vpc_config.dataplane.subnets.dataplane.cidr + ipv6 = {} + name = "${var.prefix}-dataplane" + region = var.region + secondary_ip_ranges = ( + var.vpc_config.dataplane.subnets.dataplane.secondary_ip_ranges + ) + } + ] +} + +module "firewall-rules-dataplane" { + source = "../../../../modules/net-vpc-firewall" + project_id = local.project_id + network = module.vpc-dataplane.name + ingress_rules = { + allow-clients-to-f5 = { + priority = 1001 + source_ranges = [var.vpc_config.dataplane.subnets.clients.cidr] + targets = [module.f5-sa.email] + use_service_accounts = true + } + allow-f5-to-backends = { + priority = 1002 + sources = [module.f5-sa.email] + targets = [module.backends-sa.email] + use_service_accounts = true + } + } +} + +module "nat-dataplane" { + source = "../../../../modules/net-cloudnat" + name = "${var.prefix}-nat-dataplane" + project_id = local.project_id + region = var.region + router_network = module.vpc-dataplane.self_link +} + +# Management + +module "vpc-management" { + source = "../../../../modules/net-vpc" + project_id = local.project_id + name = "${var.prefix}-vpc-management" + ipv6_config = { + enable_ula_internal = true + } + subnets = [ + { + ip_cidr_range = var.vpc_config.management.subnets.management.cidr + ipv6 = {} + name = "${var.prefix}-management" + region = var.region + } + ] +} + +# It installs the default firewall admin rules +module "firewall-rules-management" { + source = "../../../../modules/net-vpc-firewall" + project_id = local.project_id + network = module.vpc-management.name +} + +module "nat-management" { + source = "../../../../modules/net-cloudnat" + name = "${var.prefix}-nat-management" + project_id = local.project_id + region = var.region + router_network = module.vpc-management.self_link +} diff --git a/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/outputs.tf b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/outputs.tf new file mode 100644 index 00000000..ffd0ef38 --- /dev/null +++ b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/outputs.tf @@ -0,0 +1,25 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +output "f5_management_ips" { + description = "The F5 management interfaces IP addresses." + value = module.f5-lb.f5_management_ips +} + +output "forwarding_rule_configss" { + description = "The GCP forwarding rules configurations." + value = module.f5-lb.forwarding_rules_configs +} diff --git a/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/variables.tf b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/variables.tf new file mode 100644 index 00000000..b0b9de32 --- /dev/null +++ b/blueprints/third-party-solutions/f5-bigip/f5-bigip-ha-active-deployment/variables.tf @@ -0,0 +1,144 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +variable "backend_vm_configs" { + description = "The sample backend VMs configuration. Keys are the zones where VMs are deployed." + type = map(object({ + address = string + instance_type = string + startup_script = string + })) + default = { + a = { + address = "192.168.100.101" + instance_type = "e2-micro" + startup_script = "apt update && apt install -y nginx" + } + b = { + address = "192.168.100.102" + instance_type = "e2-micro" + startup_script = "apt update && apt install -y nginx" + } + } +} + +variable "forwarding_rules_config" { + type = map(any) + description = "The optional configurations of the GCP load balancers forwarding rules." + default = { + "ipv4" = { + address = "192.168.100.100" + protocol = "TCP" + } + "ipv6" = { + ip_version = "IPV6" + } + } +} + +variable "instance_dedicated_configs" { + description = "The F5 VMs configuration. The map keys are the zones where the VMs are deployed." + type = map(any) + default = { + a = { + license_key = "AAAAA-BBBBB-CCCCC-DDDDD-EEEEEEE" + network_config = { + alias_ip_range_address = "192.168.101.0/24" + alias_ip_range_name = "f5-a" + } + } + b = { + license_key = "AAAAA-BBBBB-CCCCC-DDDDD-EEEEEEE" + network_config = { + alias_ip_range_address = "192.168.102.0/24" + alias_ip_range_name = "f5-b" + } + } + } +} + +variable "instance_shared_config" { + description = "The F5 VMs shared configurations." + type = map(any) + default = { + enable_ipv6 = true + ssh_public_key = "./data/mykey.pub" + } +} + +variable "prefix" { + type = string + description = "The name prefix used for resources." +} + +variable "project_create" { + description = "Whether to automatically create a project." + type = bool + default = false +} + +variable "project_id" { + type = string + description = "The project id where we deploy the resources." +} + +variable "region" { + type = string + description = "The region where we deploy the F5 IPs." +} + +variable "vpc_config" { + description = "VPC and subnet ids, in case existing VPCs are used." + type = object({ + backend_vms_cidr = string # used by F5s. Not configured on the VPC. + dataplane = object({ + subnets = map(object({ + cidr = optional(string) + secondary_ip_ranges = optional(map(string)) # name -> cidr + })) + }) + management = object({ + subnets = map(object({ + cidr = optional(string) + secondary_ip_ranges = optional(map(string)) # name -> cidr + })) + }) + }) + default = { + backend_vms_cidr = "192.168.200.0/24" + dataplane = { + subnets = { + clients = { + cidr = "192.168.0.0/24" + } + dataplane = { + cidr = "192.168.100.0/24" + secondary_ip_ranges = { + f5-a = "192.168.101.0/24" + f5-b = "192.168.102.0/24" + } + } + } + } + management = { + subnets = { + management = { + cidr = "192.168.250.0/24" + } + } + } + } +}