Cloud administrators can leverage the Google Cloud Platform (GCP) plug-in to create load balancers to support custom solutions, including high availability.
You can configure several aspects of load balancer configuration to support specific requirements. These features can support provisioning infrastructure for SAP NetWeaver and SAP Hana, for example. This configuration enables you to deploy different load balancer instances in different availability zones.
- Create a GCP cloud account if you do not have one.
- Set up flavor and image mappings.
- Create a default network profile.
- Create compute availability zones and tag them appropriately. These tags enable you to provision instances and instance groups to specific availability zones in a template.
- The template should model the appropriate load balancer configuration with specifications for health checks, instances, instance groups, backend services, forwarding rules, and firewalls.
- The template should specify the virtual machines and availability zones in which they should be deployed.
Setting up an internal TCP load balancer
This example template uses allocation helpers to provide allocation logic for several resources. The template contains two instances, instance groups, a health check resource, a firewall resource, a backend service resource, and a forwarding rule resource.
After deploying this template, you can log in to your Google Cloud Console to filter and choose the instances you want to add to your instance group. Only instances in the same zone as the instance group will be shown as options. See Instance groups in your Google Cloud Console.
formatVersion: 1
inputs:
suffix:
type: string
title: ''
resources:
Allocations_Image_1:
type: Allocations.Image
properties:
image: ubuntu
Allocations_Compute_1:
type: Allocations.Compute
properties:
accountType: gcp
constraints:
- tag: zone-a
Allocations_Compute_2:
type: Allocations.Compute
properties:
constraints:
- tag: zone-b
Allocations_Flavor_1:
type: Allocations.Flavor
properties:
flavor: medium
Idem_GCP_COMPUTE_NETWORK_1:
type: Idem.GCP.COMPUTE.NETWORK
properties:
name: network-doc-1-${input.suffix}
account: ${resource.Allocations_Compute_1.selectedCloudAccount.name}
auto_create_subnetworks: false
Idem_GCP_COMPUTE_SUBNETWORK_1:
type: Idem.GCP.COMPUTE.SUBNETWORK
properties:
name: subnetwork-doc-1-${input.suffix}
account: ${resource.Allocations_Compute_1.selectedCloudAccount.name}
network: ${Idem_GCP_COMPUTE_NETWORK_1.resource_id}
region: ${resource.Allocations_Compute_1.selectedRegion.name}
ip_cidr_range: '10.0.10.0/24'
Idem_GCP_COMPUTE_INSTANCE_1:
type: Idem.GCP.COMPUTE.INSTANCE
properties:
name: vm-doc-1-${input.suffix}
zone: ${resource.Allocations_Compute_1.selectedPlacementCompute.id}
account: ${resource.Allocations_Compute_1.selectedCloudAccount.name}
can_ip_forward: false
project: ${resource.Allocations_Compute_1.selectedCloudAccount.additionalProperties.gcp.project}
network_interfaces:
- name: nic0
stack_type: IPV4_ONLY
subnetwork: ${Idem_GCP_COMPUTE_SUBNETWORK_1.resource_id}
disks:
- initialize_params:
disk_name: disk-doc-boot-1-${input.suffix}
source_image: ${resource.Allocations_Image_1.selectedImageId}
disk_size_gb: 12
disk_type: ${'/projects/' + resource.Allocations_Flavor_1.selectedCloudAccount.additionalProperties.gcp.project + '/zones/' + resource.Allocations_Compute_1.selectedPlacementCompute.id + '/diskTypes/pd-standard'}
boot: true
auto_delete: true
machine_type: ${'/projects/' + resource.Allocations_Flavor_1.selectedCloudAccount.additionalProperties.gcp.project + '/zones/' + resource.Allocations_Compute_1.selectedPlacementCompute.id + '/machineTypes/' + resource.Allocations_Flavor_1.selectedInstanceTypeName}
tags:
items:
- net-tag-1
- net-tag-2
Idem_GCP_COMPUTE_INSTANCE_2:
type: Idem.GCP.COMPUTE.INSTANCE
properties:
name: vm-doc-2-${input.suffix}
zone: ${resource.Allocations_Compute_2.selectedPlacementCompute.id}
account: ${resource.Allocations_Compute_1.selectedCloudAccount.name}
can_ip_forward: false
project: ${resource.Allocations_Compute_1.selectedCloudAccount.additionalProperties.gcp.project}
network_interfaces:
- name: nic0
stack_type: IPV4_ONLY
subnetwork: ${Idem_GCP_COMPUTE_SUBNETWORK_1.resource_id}
disks:
- initialize_params:
disk_name: disk-doc-boot-2-${input.suffix}
source_image: ${resource.Allocations_Image_1.selectedImageId}
disk_size_gb: 12
disk_type: ${'/projects/' + resource.Allocations_Flavor_1.selectedCloudAccount.additionalProperties.gcp.project + '/zones/' + resource.Allocations_Compute_1.selectedPlacementCompute.id + '/diskTypes/pd-standard'}
boot: true
auto_delete: true
machine_type: ${'/projects/' + resource.Allocations_Flavor_1.selectedCloudAccount.additionalProperties.gcp.project + '/zones/' + resource.Allocations_Compute_2.selectedPlacementCompute.id + '/machineTypes/' + resource.Allocations_Flavor_1.selectedInstanceTypeName}
tags:
items:
- net-tag-1
- net-tag-2
Idem_GCP_COMPUTE_INSTANCE_GROUP_1:
type: Idem.GCP.COMPUTE.INSTANCE_GROUP
properties:
name: ig-doc-1-${input.suffix}
account: ${resource.Allocations_Compute_1.selectedCloudAccount.name}
zone: ${resource.Allocations_Compute_1.selectedPlacementCompute.id}
network: ${Idem_GCP_COMPUTE_NETWORK_1.resource_id}
Idem_GCP_COMPUTE_INSTANCE_GROUP_2:
type: Idem.GCP.COMPUTE.INSTANCE_GROUP
properties:
name: ig-doc-2-${input.suffix}
account: ${resource.Allocations_Compute_1.selectedCloudAccount.name}
zone: ${resource.Allocations_Compute_2.selectedPlacementCompute.id}
network: ${Idem_GCP_COMPUTE_NETWORK_1.resource_id}
Idem_GCP_COMPUTE_HEALTH_CHECK_1:
type: Idem.GCP.COMPUTE.HEALTH_CHECK
properties:
name: hc-doc-1-${input.suffix}
account: ${resource.Allocations_Compute_1.selectedCloudAccount.name}
type_: TCP
check_interval_sec: 10
timeout_sec: 10
unhealthy_threshold: 2
healthy_threshold: 2
tcp_health_check:
port: 80
proxy_header: NONE
Idem_GCP_COMPUTE_FIREWALL_1:
type: Idem.GCP.COMPUTE.FIREWALL
properties:
name: f-doc-1-${input.suffix}
account: ${resource.Allocations_Compute_1.selectedCloudAccount.name}
network: ${Idem_GCP_COMPUTE_NETWORK_1.resource_id}
direction: INGRESS
target_tags:
- net-tag-1
- net-tag-2
allowed:
- ip_protocol: tcp
ports:
- ${resource.Idem_GCP_COMPUTE_HEALTH_CHECK_1.tcp_health_check.port}
Idem_GCP_COMPUTE_BACKEND_SERVICE_1:
type: Idem.GCP.COMPUTE.BACKEND_SERVICE
properties:
name: bs-doc-1-${input.suffix}
account: ${resource.Allocations_Compute_1.selectedCloudAccount.name}
health_checks:
- ${resource.Idem_GCP_COMPUTE_HEALTH_CHECK_1.resource_id}
load_balancing_scheme: INTERNAL
region: ${resource.Allocations_Compute_1.selectedRegion.id}
network: ${Idem_GCP_COMPUTE_NETWORK_1.resource_id}
failover_policy:
drop_traffic_if_unhealthy: true
disable_connection_drain_on_failover: true
failover_ratio: 1
backends:
- group: ${resource.Idem_GCP_COMPUTE_INSTANCE_GROUP_1.resource_id}
- group: ${resource.Idem_GCP_COMPUTE_INSTANCE_GROUP_2.resource_id}
failover: true
Idem_GCP_COMPUTE_FORWARDING_RULE_1:
type: Idem.GCP.COMPUTE.FORWARDING_RULE
properties:
ip_protocol: TCP
name: fr-doc-1-${input.suffix}
account: ${resource.Allocations_Compute_1.selectedCloudAccount.name}
load_balancing_scheme: INTERNAL
backend_service: ${resource.Idem_GCP_COMPUTE_BACKEND_SERVICE_1.resource_id}
all_ports: true
region: ${resource.Allocations_Compute_1.selectedRegion.id}
subnetwork: ${Idem_GCP_COMPUTE_SUBNETWORK_1.resource_id}
ip_address: '10.0.10.102'