An instance template is a resource that you can use to create Virtual Machine (VM) instances and managed instance groups (MIGs).
A managed instance group using the instance template to create a cluster
A target pool allows a single access point to all the instances in a group and is necessary for load balancing.
To create the Nginx web server clusters, create the following:
A startup script to be used by every virtual machine instance to setup Nginx server upon startup
An instance template to use the startup script
A target pool
A managed instance group using the instance template
$ gcloud compute instance-templates create nginx-template --metadata-from-file start-script=startup.sh
Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-01-f1f9260bce1a/global/instanceTemplates/nginx-template].
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP
nginx-template n1-standard-1 2020-05-15T12:36:49.558-07:00
$
$ gcloud compute target-pools create nginx-pool
Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-01-f1f9260bce1a/regions/us-central1/targetPools/nginx-pool].
NAME REGION SESSION_AFFINITY BACKUP HEALTH_CHECKS
nginx-pool us-central1 NONE
$
$ gcloud compute instance-groups managed create nginx-group --base-instance-name nginx --size 2 --template nginx-template --target-pool nginx-pool
Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-01-f1f9260bce1a/zones/us-central1-a/instanceGroupManagers/nginx-group].
NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED
nginx-group us-central1-a zone nginx 0 2 nginx-template no
$
$ gcloud compute instances list
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
nginx-2jk3 us-central1-a n1-standard-1 10.128.0.2 35.224.92.57 RUNNING
nginnginx-group us-central1-a zone nginx 0 2 nginx-template no
$
$ gcloud compute firewall-rules create www-firewall --allow tcp:80
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-01-f1f9260bce1a/global/firewalls/www-firewall].
Creating firewall...done.
NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED
www-firewall default INGRESS 1000 tcp:80 False
$
instance group 是target pool的经纪人。target pool是个组合。
Network load balancing allows you to balance the load of your systems based on incoming IP protocol data, such as address, port, and protocol type.You also get some options that are not available, with HTTP(S) load balancing. For example, you can load balance additional TCP/UDP-based protocols such as SMTP traffic. And if your application is interested in TCP-connection-related characteristics, network load balancing allows your app to inspect the packets, where HTTP(S) load balancing does not.
Create an L3 network load balancer (forwarding-rules) targeting your instance group:
$ gcloud compute forwarding-rules create nginx-lb --region us-central1 --ports 80 --target-pool nginx-pool
Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-01-f1f9260bce1a/regions/us-central1/forwardingRules/nginx-lb].
$
$ gcloud compute forwarding-rules list
NAME REGION IP_ADDRESS IP_PROTOCOL TARGET
nginx-lb us-central1 104.198.185.20 TCP us-central1/targetPools/nginx-pool
$
HTTP(S) load balancing provides global load balancing for HTTP(S) requests destined for your instances. You can configure URL rules that route some URLs to one set of instances and route other URLs to other instances. Requests are always routed to the instance group that is closest to the user, provided that group has enough capacity and is appropriate for the request. If the closest group does not have enough capacity, the request is sent to the closest group that does have capacity.
Create a HTTP(s) Load Balancer
create http-health-checks.Health checks verify that the instance is responding to HTTP or HTTPS traffic
map a port name to the relevant port for the instance group
create a backend service
add instance group to the backend service
create a default URL map that directs all incoming requests to all your instances
create a target HTTP proxy to route requests to your URL map
create a global forwarding rule to handle and route incoming requests
instance group <--> backend service <--> url map <--> target-http-proxies <--> forwarding-rules
$ gcloud compute http-health-checks create http-basic-check
Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-01-f1f9260bce1a/global/httpHealthChecks/http-basic-check].
NAME HOST PORT REQUEST_PATH
http-basic-check 80 /
$
$ gcloud compute instance-groups managed set-named-ports nginx-group --named-ports http:80
Updated [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-01-f1f9260bce1a/zones/us-central1-a/instanceGroups/nginx-group].
$
$ gcloud compute backend-services create nginx-backend --protocol HTTP --http-health-checks http-basic-check --global
Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-01-f1f9260bce1a/global/backendServices/nginx-backend].
NAME BACKENDS PROTOCOL
nginx-backend HTTP
$
$ gcloud compute backend-services add-backend nginx-backend --instance-group nginx-group --instance-group-zone us-central1-a --global
Updated [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-01-f1f9260bce1a/global/backendServices/nginx-backend].
$
$ gcloud compute url-maps create web-map --default-service nginx-backend
Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-01-f1f9260bce1a/global/urlMaps/web-map].
NAME DEFAULT_SERVICE
web-map backendServices/nginx-backend
$
$ gcloud compute target-http-proxies create http-lb-proxy --url-map web-map
Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-01-f1f9260bce1a/global/targetHttpProxies/http-lb-proxy].
$
$ gcloud compute forwarding-rules create http-content-rule --global --target-http-proxy http-lb-proxy --ports 80
Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-01-f1f9260bce1a/global/forwardingRules/http-content-rule].
$
$ gcloud compute forwarding-rules list
NAME REGION IP_ADDRESS IP_PROTOCOL TARGET
http-content-rule 34.107.247.121 TCP http-lb-proxy
nginx-lb us-central1 104.198.185.20 TCP us-central1/targetPools/nginx-pool
$