Skip to content

Instantly share code, notes, and snippets.

@FelipeAlafy
Created April 23, 2024 22:32
Show Gist options
  • Select an option

  • Save FelipeAlafy/448b4d26611ef5a0a7e3b9f64d1870e4 to your computer and use it in GitHub Desktop.

Select an option

Save FelipeAlafy/448b4d26611ef5a0a7e3b9f64d1870e4 to your computer and use it in GitHub Desktop.

Revisions

  1. FelipeAlafy created this gist Apr 23, 2024.
    91 changes: 91 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,91 @@
    # First Task
    gcloud config set project PROJECT_ID_CAN_BE_FOUND_ON_YOUR_LAB
    gcloud config set compute/region REGION
    gcloud config set compute/zone ZONE
    gcloud compute instances create nucleus-webserver1 --machine-type=e2-micro

    #Seccond task - copy and past the following lines into your cloud console to create the startup.sh file which will be the base for your template startup script
    cat << EOF > startup.sh
    #! /bin/bash
    apt-get update
    apt-get install -y nginx
    service nginx start
    sed -i -- 's/nginx/Google Cloud Platform - '"\$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
    EOF

    -- Other commands:
    gcloud compute instance-templates create lb-backend-template \
    --region=REGION \
    --network=default \
    --subnet=default \
    --tags=allow-health-check \
    --machine-type=e2-medium \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --metadata-from-file startup-script=startup.sh

    #Creating the pool
    gcloud compute target-pools create nginx-pool

    gcloud compute instance-groups managed create lb-backend-group --base-instance-name nginx --template=lb-backend-template --size=2 --target-pool nginx-pool --zone=us-east1-b

    #Creating a firewall for tcp:80
    gcloud compute firewall-rules create www-firewall --allow tcp:80

    #Allowing tcp connection through the firewall
    gcloud compute firewall-rules create permit-tcp-rule-586 \
    --network=default \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp:80
    --target-pool nginx-pool

    # Creating an external IPV4 address
    gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --global

    # Health check for port 80
    gcloud compute health-checks create http http-basic-check --port 80

    # Forwarding Rule to the nginx-pool
    gcloud compute forwarding-rules create nginx-lb \
    --region REGION \
    --ports=80 \
    --target-pool nginx-pool

    # Creating a basic http check
    gcloud compute http-health-checks create http-basic-check

    #Defining the ports to http:80 to the mangened group
    gcloud compute instance-groups managed set-named-ports lb-backend-group --named-ports http:80

    #Backend service
    gcloud compute backend-services add-backend web-backend-service --instance-group=lb-backend-group --instance-group-zone=ZONE --global

    #URL Map
    gcloud compute url-maps create web-map-http --default-service web-backend-service

    #Proxy
    gcloud compute target-http-proxies create http-lb-proxy --url-map web-map-http

    #Forwarding rule to the proxy
    gcloud compute forwarding-rules create http-content-rule \
    --address=lb-ipv4-1\
    --global \
    --target-http-proxy=http-lb-proxy \
    --ports=80

    #Adding the VM Instances to the firewall, it won't load at the browser if you don't do the followings steps, neither count as done
    gcloud compute instances add-tags NAME_OF_INSTANCE_1 --tags http-server,https-server

    gcloud compute instances add-tags NAME_OF_INSTANCE_2 --tags http-server,https-server

    gcloud compute firewall-rules create default-allow-http --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tc
    p:80 --source-ranges=0.0.0.0/0 --target-tags=http-server

    # OPTIONAL
    # you can check your instances from the loadbalancer external ip address only http will work, because of the certification need for https
    http://[EXTERNAL_IP]:80