Skip to content

Create an Internal Load Balancer UPDATED CONTENT #26

@bhaireshm

Description

@bhaireshm

#!/bin/bash

Variables

PROJECT_ID=$(gcloud config get-value project)
REGION="us-west1"
ZONE_1="${REGION}-c"
ZONE_2="${REGION}-b" # You may need to adjust this if a different zone is specified
NETWORK="my-internal-app"
SUBNET_A="subnet-a"
SUBNET_B="subnet-b"

Function to check if a resource is ready

check_resource() {
local resource_type=$1
local resource_name=$2
local max_attempts=10
local attempt=1

while [ $attempt -le $max_attempts ]; do
    if gcloud $resource_type describe $resource_name --quiet >/dev/null 2>&1; then
        echo "$resource_type $resource_name is ready."
        return 0
    fi
    echo "Waiting for $resource_type $resource_name to be ready... (Attempt $attempt/$max_attempts)"
    sleep 10
    ((attempt++))
done

echo "Timeout waiting for $resource_type $resource_name to be ready."
return 1

}

Create internal IP address

echo "Creating internal IP address..."
gcloud compute addresses create my-ilb-ip
--region=$REGION
--subnet=$SUBNET_B
--addresses=10.10.30.5

check_resource "compute addresses" "my-ilb-ip --region=$REGION"

Create forwarding rule

echo "Creating forwarding rule..."
gcloud compute forwarding-rules create my-ilb-forwarding-rule
--load-balancing-scheme=internal
--network=$NETWORK
--subnet=$SUBNET_B
--address=my-ilb-ip
--ports=80
--region=$REGION
--backend-service=my-ilb-backend-service

check_resource "compute forwarding-rules" "my-ilb-forwarding-rule --region=$REGION"

sleep 10 # Wait for firewall rule to propagate

Create instance templates

echo "Creating instance template 1..."
gcloud compute instance-templates create instance-template-1
--machine-type=e2-medium
--network=$NETWORK
--subnet=$SUBNET_A
--tags=lb-backend
--metadata=startup-script-url=gs://cloud-training/gcpnet/ilb/startup.sh
--region=$REGION

echo "Creating instance template 2..."
gcloud compute instance-templates create instance-template-2
--machine-type=e2-medium
--network=$NETWORK
--subnet=$SUBNET_B
--tags=lb-backend
--metadata=startup-script-url=gs://cloud-training/gcpnet/ilb/startup.sh
--region=$REGION

sleep 20 # Wait for instance templates to be fully created

Create managed instance groups

echo "Creating managed instance group 1..."
gcloud compute instance-groups managed create instance-group-1
--template=instance-template-1
--size=1
--zone=$ZONE_1

echo "Creating managed instance group 2..."
gcloud compute instance-groups managed create instance-group-2
--template=instance-template-2
--size=1
--zone=$ZONE_2

sleep 60 # Wait for instances to be created and initialized

Configure autoscaling for instance groups

echo "Configuring autoscaling for instance group 1..."
gcloud compute instance-groups managed set-autoscaling instance-group-1
--max-num-replicas=5
--target-cpu-utilization=0.8
--cool-down-period=45
--zone=$ZONE_1

echo "Configuring autoscaling for instance group 2..."
gcloud compute instance-groups managed set-autoscaling instance-group-2
--max-num-replicas=5
--target-cpu-utilization=0.8
--cool-down-period=45
--zone=$ZONE_2

sleep 30 # Wait for autoscaling to be configured

Create utility VM

echo "Creating utility VM..."
gcloud compute instances create utility-vm
--zone=$ZONE_1
--machine-type=e2-micro
--network=$NETWORK
--subnet=$SUBNET_A
--private-network-ip=10.10.20.50

check_resource "compute instances" "utility-vm --zone=$ZONE_1"

Create health check

echo "Creating health check..."
gcloud compute health-checks create tcp my-ilb-health-check
--port=80
--region=$REGION

sleep 10 # Wait for health check to be created

Create backend service

echo "Creating backend service..."
gcloud compute backend-services create my-ilb-backend-service
--load-balancing-scheme=internal
--protocol=tcp
--region=$REGION
--health-checks=my-ilb-health-check
--health-checks-region=$REGION

check_resource "compute backend-services" "my-ilb-backend-service --region=$REGION"

Add instance groups to backend service

echo "Adding instance groups to backend service..."
gcloud compute backend-services add-backend my-ilb-backend-service
--instance-group=instance-group-1
--instance-group-zone=$ZONE_1
--region=$REGION

gcloud compute backend-services add-backend my-ilb-backend-service
--instance-group=instance-group-2
--instance-group-zone=$ZONE_2
--region=$REGION

sleep 30 # Wait for backends to be added

Create internal IP address

echo "Creating internal IP address..."
gcloud compute addresses create my-ilb-ip
--region=$REGION
--subnet=$SUBNET_B
--addresses=10.10.30.5

check_resource "compute addresses" "my-ilb-ip --region=$REGION"

Create forwarding rule

echo "Creating forwarding rule..."
gcloud compute forwarding-rules create my-ilb-forwarding-rule
--load-balancing-scheme=internal
--network=$NETWORK
--subnet=$SUBNET_B
--address=my-ilb-ip
--ports=80
--region=$REGION
--backend-service=my-ilb-backend-service

check_resource "compute forwarding-rules" "my-ilb-forwarding-rule --region=$REGION"

echo "Setup complete!"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions