Menyiapkan Load Balancer Jaringan passthrough eksternal dengan kumpulan target

Panduan ini berisi petunjuk untuk membuat konfigurasi Load Balancer Jaringan passthrough eksternal dengan backend kumpulan target. Contoh ini mengasumsikan bahwa Anda memiliki beberapa server web di instance Compute Engine yang ingin digunakan untuk menyeimbangkan traffic. Skenario ini menyiapkan konfigurasi load balancing Lapisan 4 untuk mendistribusikan traffic HTTP di berbagai instance yang responsif. Health check HTTP dasar dikonfigurasi untuk memastikan bahwa traffic hanya dikirim ke instance yang responsif.

Contoh ini melakukan load balancing terhadap traffic HTTP, tetapi Anda dapat menggunakan Load Balancer Jaringan passthrough eksternal berbasis kumpulan target untuk melakukan load balancing terhadap traffic TCP, UDP, dan SSL. Sebelum memulai, baca Ringkasan Load Balancer Jaringan passthrough eksternal untuk mengetahui informasi konseptual tentang Load Balancer Jaringan passthrough eksternal.

Sebelum memulai

Instal Google Cloud CLI. Untuk ringkasan lengkap tentang alat ini, lihat Panduan Alat gcloud. Anda dapat menemukan perintah yang terkait dengan load balancing di grup perintah gcloud compute.

Anda juga bisa mendapatkan bantuan terperinci untuk perintah gcloud apa pun menggunakan flag --help:

gcloud compute http-health-checks create --help

Jika Anda belum pernah menjalankan Google Cloud CLI, jalankan gcloud init terlebih dahulu untuk melakukan autentikasi.

Selain itu, Anda harus membuat alamat IP eksternal statis untuk load balancer. Jika Anda menggunakan image yang disediakan oleh Compute Engine, instance virtual machine (VM) akan dikonfigurasi secara otomatis untuk menangani alamat IP ini. Jika menggunakan image lain, Anda harus mengonfigurasi alamat ini sebagai alias pada eth0 atau sebagai loopback pada setiap instance.

Panduan ini mengasumsikan bahwa Anda sudah terbiasa dengan bash.

Mengonfigurasi instance VM Compute Engine

Untuk skenario load balancing ini, Anda akan membuat tiga instance VM Compute Engine dan menginstal Apache di dalamnya. Anda akan menambahkan aturan firewall yang memungkinkan traffic HTTP menjangkau instance.

Instance yang berpartisipasi sebagai VM backend untuk Load Balancer Jaringan passthrough eksternal harus menjalankan Linux Guest Environment, Windows Guest Environment yang sesuai, atau proses lain yang menyediakan fungsi yang setara.

Menyiapkan backend instance

Konsol

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka instance VM

  2. Klik Create instance.

  3. Tetapkan Nama ke www1.

  4. Tetapkan Region ke us-central1.

  5. Set Zona ke us-central1-b.

  6. Di bagian Boot disk, image OS default Debian GNU/Linux 10 (buster) sudah dipilih.

  7. Klik Advanced options.

  8. Klik Networking dan konfigurasikan kolom berikut:

    1. Untuk Tag jaringan, masukkan network-lb-tag.
  9. Klik Management. Masukkan skrip berikut ke kolom Skrip startup.

     #! /bin/bash
     sudo apt-get update
     sudo apt-get install apache2 -y
     sudo service apache2 restart
     echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html
     

    1. Klik Create.
  10. Buat instance bernama www2 dengan setelan yang sama, kecuali dengan skrip berikut yang disisipkan ke kolom Automation dan Skrip startup.

      #! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html
     

  11. Buat instance bernama www3 dengan setelan yang sama, kecuali dengan skrip berikut yang disisipkan ke kolom Automation dan Skrip startup.

        #! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html
      

gcloud

Semua perintah di bawah ini dijalankan di sistem lokal Anda dan menggunakan prompt perintah bash.

Untuk melihat nama, atribut, dan status image OS, gunakan perintah gcloud compute images list.

  1. Buat tiga mesin virtual baru di zona tertentu dan beri mereka semua tag yang sama. Contoh ini menetapkan zona ke us-central1-b. Menyetel kolom tags memungkinkan Anda mereferensikan semua instance ini sekaligus, seperti saat menggunakan aturan firewall. Perintah ini juga akan menginstal Apache di setiap instance dan memberikan halaman beranda yang unik ke setiap instance.

    gcloud compute instances create www1 \
      --image-family debian-10 \
      --image-project debian-cloud \
      --zone us-central1-b \
      --tags network-lb-tag \
      --metadata startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"
    gcloud compute instances create www2 \
      --image-family debian-10 \
      --image-project debian-cloud \
      --zone us-central1-b \
      --tags network-lb-tag \
      --metadata startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html"
    gcloud compute instances create www3 \
      --image-family debian-10 \
      --image-project debian-cloud \
      --zone us-central1-b \
      --tags network-lb-tag \
      --metadata startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html"

api

Buat instance www1 di zona us-central1-b dengan metode instances.insert

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances

{
  "canIpForward": false,
  "deletionProtection": false,
  "disks": [
    {
      "type": "PERSISTENT",
      "boot": true,
      "mode": "READ_WRITE",
      "autoDelete": true,
      "deviceName": "www1",
      "initializeParams": {
        "sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20220719",
        "diskType": "projects/[PROJECT_ID]/zones/us-central1-b/diskTypes/pd-standard",
        "diskSizeGb": "10"
      }
    }
  ],
  "machineType": "projects/[PROJECT_ID]/zones/us-central1-b/machineTypes/e2-standard-2",
  "metadata": {
    "items": [
      {
        "key": "startup-script",
        "value": "sudo apt-get update\nsudo apt-get install apache2 -y\nsudo a2ensite default-ssl\nsudo a2enmod ssl\nsudo service apache2 restart\necho '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"
      }
    ]
  },
  "name": "www1",
  "networkInterfaces": [
    {
      "network": "projects/[PROJECT_ID]/global/networks/default",
      "subnetwork": "projects/[PROJECT_ID]/regions/us-central1/subnetworks/default"
    }
  ],
  "tags": {
    "items": [
      "network-lb-tag"
    ]
  }
}

Buat instance bernama www2 dan www3 dengan setelan yang sama, kecuali ganti www1 di kolom deviceName, value, dan name.

Membuat aturan firewall untuk mengizinkan traffic eksternal ke instance VM ini

Konsol

  1. Di Konsol Google Cloud, buka halaman Firewall policies.

    Buka Kebijakan firewall

  2. Klik Create firewall rule.

  3. Masukkan Nama www-firewall-network-lb.

  4. Pilih Jaringan tempat aturan firewall diterapkan (Default).

  5. Di bagian Target, pilih Tag target yang ditentukan.

  6. Di kolom Target tags, masukkan network-lb-tag.

  7. Tetapkan Filter sumber ke rentang IPv4.

  8. Tetapkan Source IPv4 ranges ke 0.0.0.0/0, yang akan mengizinkan traffic dari sumber apa pun.

  9. Pada bagian Specified protocols and ports, centang kotak TCP, lalu masukkan 80.

  10. Klik Create. Mungkin perlu waktu beberapa saat bagi Konsol untuk menampilkan aturan firewall baru, atau Anda mungkin harus mengklik Refresh untuk melihat aturan tersebut.

gcloud

gcloud compute firewall-rules create www-firewall-network-lb \
    --target-tags network-lb-tag --allow tcp:80

api

Buat aturan firewall yang mengizinkan semua traffic dalam subnet dengan metode firewalls.insert ****

POST https://compute.googleapis.com/compute/projects/[PROJECT_ID]/global/firewalls

{
  "name": "www-firewall-network-lb",
  "direction": "INGRESS",
  "priority": 1000,
  "targetTags": [
    "network-lb-tag"
  ],
  "allowed": [
    {
      "IPProtocol": "tcp",
      "ports": [
        "80"
      ]
    }
  ],
  "sourceRanges": [
    "0.0.0.0/0"
  ]
}

Mendapatkan alamat IP eksternal instance dan memastikan bahwa instance tersebut berjalan

Konsol

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka instance VM

  2. Lihat alamat untuk instance Anda di kolom IP Eksternal.

  3. Pastikan instance Anda sudah berjalan dengan mencari tanda centang hijau di sebelah kiri nama instance. Jika Anda tidak melihat tanda centang hijau, lihat halaman Pemecahan Masalah Umum untuk instance.

gcloud

  1. Cantumkan instance Anda untuk mendapatkan alamat IP-nya dari kolom EXTERNAL_IP.

    gcloud compute instances list
    
  2. Pastikan setiap instance berjalan.

    Pada command line, jalankan curl menggunakan alamat IP eksternal setiap instance untuk mengonfirmasi bahwa semua instance merespons.

    curl http://[IP_ADDRESS]
    

api

Mendapatkan informasi tentang instance www1 dengan metode instances.get

Pastikan kolom status menampilkan RUNNING, dan cari alamat IP eksternal di kolom natIP.

GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/www1

{
 "kind": "compute#instance",
 "id": "6734015273571474749",
 "creationTimestamp": "2018-11-09T11:45:23.487-08:00",
 "name": "www1",
 "description": "",
 "tags": {
  "items": [
   "network-lb-tag"
  ],
  "fingerprint": "9GVlO4gPawg="
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/machineTypes/e2-standard-2",
 "status": "RUNNING",
 "zone": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b",
 "canIpForward": false,
 "networkInterfaces": [
  {
   "kind": "compute#networkInterface",
   "network": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default",
   "subnetwork": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/subnetworks/default",
   "networkIP": "10.128.0.2",
   "name": "nic0",
   "accessConfigs": [
    {
     "kind": "compute#accessConfig",
     "type": "ONE_TO_ONE_NAT",
     "name": "External NAT",
     "natIP": "35.192.37.233",
     "networkTier": "PREMIUM"
    }
   ],
   "fingerprint": "lxD5f5ua_sw="
  }
 ],
 "disks": [
  {
   "kind": "compute#attachedDisk",
   "type": "PERSISTENT",
   "mode": "READ_WRITE",
   "source": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/disks/www1",
   "deviceName": "www1",
   "index": 0,
   "boot": true,
   "autoDelete": true,
   "licenses": [
    "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-10-buster"
   ],
   "interface": "SCSI",
   "guestOsFeatures": [
    {
     "type": "VIRTIO_SCSI_MULTIQUEUE"
    }
   ]
  }
 ],
 "metadata": {
  "kind": "compute#metadata",
  "fingerprint": "IyHRmHoJx6E=",
  "items": [
   {
    "key": "startup-script",
    "value": "#! /bin/bash\n sudo apt-get update\n sudo apt-get install apache2 -y\n sudo service apache2 restart\n echo '\u003c!doctype html\u003e\u003chtml\u003e\u003cbody\u003e\u003ch1\u003ewww1\u003c/h1\u003e\u003c/body\u003e\u003c/html\u003e' | tee /var/www/html/index.html"
   }
  ]
 },
 "serviceAccounts": [
  {
   "email": "674259759219-compute@developer.gserviceaccount.com",
   "scopes": [
    "https://www.googleapis.com/auth/devstorage.read_only",
    "https://www.googleapis.com/auth/logging.write",
    "https://www.googleapis.com/auth/monitoring.write",
    "https://www.googleapis.com/auth/servicecontrol",
    "https://www.googleapis.com/auth/service.management.readonly",
    "https://www.googleapis.com/auth/trace.append"
   ]
  }
 ],
 "selfLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/www1",
 "scheduling": {
  "onHostMaintenance": "MIGRATE",
  "automaticRestart": true,
  "preemptible": false
 },
 "cpuPlatform": "Intel Haswell",
 "labelFingerprint": "42WmSpB8rSM=",
 "startRestricted": false,
 "deletionProtection": false
}

Ulangi panggilan API ini untuk www2 dan www3.

Mengonfigurasi layanan load balancing

Berikutnya, siapkan layanan load balancing.

Ketika mengonfigurasi layanan load balancing, instance virtual machine akan menerima paket yang ditujukan untuk alamat IP eksternal statis yang dikonfigurasi. Jika Anda menggunakan image yang disediakan oleh Compute Engine, instance Anda akan otomatis dikonfigurasi untuk menangani alamat IP ini. Jika menggunakan image lain, Anda harus mengonfigurasi alamat ini sebagai alias pada eth0 atau sebagai loopback pada setiap instance.

Konsol

Anda tidak dapat menggunakan Konsol Google Cloud untuk membuat Load Balancer Jaringan passthrough eksternal berbasis kumpulan target. Sebagai gantinya, gunakan gcloud atau REST API.

gcloud

  1. Buat alamat IP eksternal statis untuk load balancer

    gcloud compute addresses create network-lb-ip-1 \
        --region us-central1
    
  2. Menambahkan resource health check HTTP lama

    Contoh ini menggunakan setelan default untuk mekanisme health check, tetapi Anda juga dapat menyesuaikan sendiri health check.

    gcloud compute http-health-checks create basic-check
    
  3. Menambahkan kumpulan target

    Tambahkan kumpulan target dalam region yang sama dengan instance virtual machine Anda. Gunakan health check yang dibuat pada langkah sebelumnya untuk kumpulan target ini. Kumpulan target memerlukan layanan health check agar dapat berfungsi.

    gcloud compute target-pools create www-pool \
        --region us-central1 --http-health-check basic-check
    
  4. Menambahkan instance ke kumpulan target

    gcloud compute target-pools add-instances www-pool \
        --instances www1,www2,www3 \
        --instances-zone us-central1-b
    

    Instance dalam kumpulan target harus berada di region yang sama, tetapi dapat disebarkan di berbagai zona dalam region yang sama. Misalnya, Anda dapat memiliki instance di zona us-central1-f dan instance di zona us-central1-b dalam satu kumpulan target karena berada di region yang sama, us-central1.

  5. Tambahkan aturan penerusan

    Tambahkan penayangan aturan penerusan atas nama alamat IP eksternal dan rentang port yang mengarah ke kumpulan target Anda. Untuk kolom --address, gunakan alamat IP numerik atau nama yang sepenuhnya memenuhi syarat.

    gcloud compute forwarding-rules create www-rule \
        --region us-central1 \
        --ports 80 \
        --address network-lb-ip-1 \
        --target-pool www-pool
    

api

  1. Buat alamat IP eksternal statis untuk load balancer

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID/regions/us-central1/addresses
    {
      "name": "network-lb-ip-1"
    }
    
  2. Menambahkan health check HTTP lama

    Contoh ini menggunakan setelan default untuk mekanisme health check, tetapi Anda juga dapat menyesuaikannya sendiri.

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks
    {
      "name": "basic-check"
    }
    
  3. Menambahkan kumpulan target

    Tambahkan kumpulan target dalam region yang sama dengan instance virtual machine Anda. Gunakan health check yang dibuat pada langkah sebelumnya untuk kumpulan target ini. Kumpulan target memerlukan layanan health check agar dapat berfungsi.

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools
    {
      "name": "www-pool",
      "healthChecks": [
        "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks/basic-check"
      ]
    }
    
  4. Menambahkan instance ke kumpulan target

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-pool/addInstance
    {
      "instances": [
        {
          "instance": "projects/[PROJECT_ID]/zones/us-central1-b/instances/www1"
        }
      ]
    }
    

    Ulangi panggilan API ini untuk instance www2 dan www3.

    Instance dalam kumpulan target harus berada di region yang sama, tetapi dapat disebarkan di berbagai zona dalam region yang sama. Misalnya, Anda dapat memiliki instance di zona us-central1-f dan instance di zona us-central1-b dalam satu kumpulan target karena berada di region yang sama, us-central1.

  5. Menambahkan aturan penerusan

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules
    {
      "name": "www-rule",
      "portRange": "80",
      "loadBalancingScheme": "EXTERNAL",
      "target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-network-lb"
    }
    

Mengirim traffic ke instance

Setelah layanan load balancing dikonfigurasi, Anda dapat mulai mengirim traffic ke aturan penerusan dan melihat traffic tersebar ke berbagai instance.

Mencari alamat IP eksternal aturan penerusan

Konsol

  1. Buka tab Forward Rules di halaman load balancing Advanced di Konsol Google Cloud.
    Buka tab Aturan Penerusan
  2. Temukan www-rule, aturan penerusan yang digunakan oleh load balancer.
  3. Di kolom IP Address untuk www-rule, catat alamat IP eksternal yang tercantum.

gcloud

Masukkan perintah berikut untuk melihat alamat IP eksternal dari aturan penerusan www-rule yang digunakan oleh load balancer.

gcloud compute forwarding-rules describe www-rule --region us-central1

api

Lihat alamat IP eksternal aturan penerusan www-rule dengan metode forwardingRules.get

Pada output, cari kolom IPAddress.

GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules/www-rule
{
  "kind": "compute#forwardingRule",
  "id": "5133886346582800002",
  "creationTimestamp": "2018-11-09T14:21:33.574-08:00",
  "name": "www-rule",
  "description": "",
  "region": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1",
  "IPAddress": "35.232.228.9",
  "IPProtocol": "TCP",
  "portRange": "80-80",
  "target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-network-lb",
  "selfLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules/www-rule",
  "loadBalancingScheme": "EXTERNAL",
  "networkTier": "PREMIUM"
}

ICMP tidak didukung untuk backend instance

Load Balancer Jaringan passthrough eksternal tidak mengirimkan paket ICMP ke backend instance. Jika Anda mengirim paket ICMP, misalnya dengan ping atau traceroute, balasannya tidak berasal dari backend instance load balancer.

Infrastruktur Google Cloud dapat mengirim balasan ICMP, meskipun Anda memiliki aturan firewall yang melarang traffic ICMP pada instance backend load balancer. Perilaku ini tidak dapat diubah.

Menggunakan perintah curl untuk mengakses alamat IP eksternal

Respons dari perintah curl bergantian secara acak di antara tiga instance. Jika respons di awal tidak berhasil, Anda mungkin perlu menunggu sekitar 30 detik sampai konfigurasi dimuat sepenuhnya dan instance Anda ditandai responsif sebelum mencoba lagi:

$ while true; do curl -m1 IP_ADDRESS; done

Langkah selanjutnya