1. บทนำ
ยินดีต้อนรับสู่ LB ของ HTTP ภายนอกที่มี Advanced Traffic Management (Envoy) Codelab
ตัวจัดสรรภาระงาน HTTP(S) ภายนอกเวอร์ชันล่าสุดที่มีการจัดการการรับส่งข้อมูลขั้นสูงมีฟีเจอร์ทั้งหมดของตัวจัดสรรภาระงาน HTTP(S) ภายนอกแบบคลาสสิกที่มีอยู่ในปัจจุบัน แต่มีความสามารถในการจัดการการรับส่งข้อมูลขั้นสูงที่มีเพิ่มขึ้นเรื่อยๆ ความสามารถบางส่วนเหล่านี้เป็นเรื่องใหม่สำหรับตัวจัดสรรภาระงาน และบางรายการก็มีฟีเจอร์ที่มีประสิทธิภาพมากขึ้นสำหรับความสามารถที่มีอยู่ รายการความสามารถบางส่วนเหล่านี้ประกอบด้วย
- การแยกการเข้าชมแบบถ่วงน้ำหนัก
- ขอมิเรอร์
- การตรวจจับ Outlier
- การส่งคำขอซ้ำ
- Fault Injection
- ตัวเลือกกลุ่มความสนใจของเซสชันแบ็กเอนด์เพิ่มเติม
- ตัวเลือกการเปลี่ยนรูปแบบส่วนหัวเพิ่มเติม
- กลไกการแชร์ทรัพยากรข้ามโดเมน (CORS)
- อัลกอริทึมการจัดสรรภาระงานใหม่
สิ่งที่คุณจะได้เรียนรู้
- วิธีตั้งค่าอินสแตนซ์ที่มีการจัดการและกฎของ VPC และไฟร์วอลล์ที่เชื่อมโยง
- วิธีใช้ฟีเจอร์การจัดการการรับส่งข้อมูลขั้นสูงของตัวจัดสรรภาระงานใหม่
- วิธีตรวจสอบว่าฟีเจอร์การจัดการการเข้าชมขั้นสูงทำงานตามที่ต้องการ
สิ่งที่คุณต้องมี
- เครือข่ายพื้นฐานและความรู้เกี่ยวกับ HTTP
- ความรู้พื้นฐานเกี่ยวกับบรรทัดคำสั่ง Unix/Linux
โทโพโลจีของ Codelab และ กรณีการใช้งาน
รูปที่ 1 - โทโพโลยีการกำหนดเส้นทางของตัวจัดสรรภาระงาน HTTP
ใน Code Lab นี้ คุณจะตั้งค่าอินสแตนซ์ที่มีการจัดการ 3 กลุ่ม คือ กลุ่มในฝั่งตะวันออก ตะวันตก และตอนกลาง คุณจะสร้างตัวจัดสรรภาระงาน https ภายนอกทั่วโลก ตัวจัดสรรภาระงานจะใช้ฟีเจอร์ต่างๆ จากรายการความสามารถขั้นสูงที่ตัวจัดสรรภาระงานตาม Envoy รองรับ เมื่อติดตั้งใช้งานแล้ว คุณจะต้องสร้างโหลดจำลองและยืนยันว่าการกำหนดค่าที่ตั้งไว้ทำงานอย่างเหมาะสม
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้และคุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ซึ่งปกติระบุไว้ว่าเป็น
PROJECT_ID
) ดังนั้นหากไม่ชอบ ให้สร้างรหัสแบบสุ่มขึ้นมาอีกรหัสหนึ่ง หรือคุณจะลองใช้รหัสโปรเจ็กต์ของคุณเองแล้วดูว่ารหัสโปรเจ็กต์พร้อมใช้งานหรือไม่ แล้วก็ "แช่แข็ง" หลังจากสร้างโปรเจ็กต์แล้ว - มีค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้
จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบนดังนี้
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้
เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ใช้งานได้ต่อเนื่องและทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานทั้งหมดใน Lab นี้สามารถทำได้โดยใช้เบราว์เซอร์
ก่อนเริ่มต้น
ตรวจสอบว่าตั้งค่ารหัสโปรเจ็กต์ใน Cloud Shell แล้ว
โปรเจ็กต์รายการการกำหนดค่า gcloud
โปรเจ็กต์ชุดการกำหนดค่า gcloud [YOUR-PROJECT-NAME]
PROJECT_ID=[YOUR-PROJECT-NAME]
เสียงสะท้อน $PROJECT_ID
เปิดใช้ API
เปิดใช้บริการที่จำเป็นทั้งหมด
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. สร้างเครือข่าย VPC
สร้างเครือข่าย VPC
จาก Cloud Shell
gcloud compute networks create httplbs --subnet-mode=auto
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs]. NAME: httplbs SUBNET_MODE: AUTO BGP_ROUTING_MODE: REGIONAL IPV4_RANGE: GATEWAY_IPV4:
สร้างกฎไฟร์วอลล์ VPC
หลังจากสร้าง VPC คุณจะสร้างกฎไฟร์วอลล์ ระบบจะใช้กฎไฟร์วอลล์เพื่ออนุญาตให้ IP ทั้งหมดเข้าถึง IP ภายนอกของเว็บไซต์ของแอปพลิเคชันทดสอบบนพอร์ต 80 สำหรับการรับส่งข้อมูล HTTP
จาก Cloud Shell
gcloud compute firewall-rules create httplb-allow-http-rule \ --allow tcp:80 \ --network httplbs \ --source-ranges 0.0.0.0/0 \ --priority 700
เอาต์พุต
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule]. Creating firewall...done. NAME: httplb-allow-http-rule NETWORK: httplbs DIRECTION: INGRESS PRIORITY: 700 ALLOW: tcp:80 DENY: DISABLED: False
4. ตั้งค่าอินสแตนซ์ที่มีการจัดการ
คุณจะต้องตั้งค่าอินสแตนซ์ที่มีการจัดการ ซึ่งรวมถึงรูปแบบของทรัพยากรแบ็กเอนด์ที่ตัวจัดสรรภาระงาน HTTP ใช้ ก่อนอื่น เราจะสร้างเทมเพลตอินสแตนซ์ซึ่งกำหนดการกำหนดค่าสำหรับ VM ที่จะสร้างสำหรับแต่ละภูมิภาค ถัดไป เราจะสร้างอินสแตนซ์ที่มีการจัดการซึ่งอ้างอิงเทมเพลตอินสแตนซ์สำหรับแบ็กเอนด์ในแต่ละภูมิภาค
อินสแตนซ์ที่มีการจัดการจะเป็นระดับโซนหรือระดับภูมิภาคก็ได้ สำหรับแบบฝึกหัดในห้องทดลองนี้ เราจะสร้างอินสแตนซ์ที่มีการจัดการระดับภูมิภาค 3 กลุ่ม คือ กลุ่มใน us-east1, กลุ่ม us-west1 และ 1 ใน us-central1
ในส่วนนี้ คุณจะเห็นสคริปต์เริ่มต้นที่สร้างไว้ล่วงหน้าซึ่งจะอ้างอิงเมื่อสร้างอินสแตนซ์ สคริปต์เริ่มต้นนี้จะติดตั้งและเปิดใช้ความสามารถของเว็บเซิร์ฟเวอร์ซึ่งเราจะใช้เพื่อจำลองเว็บแอปพลิเคชัน ลองดูสคริปต์นี้ได้เลย
สร้างเทมเพลตอินสแตนซ์ฝั่งตะวันออก ตะวันตก และกลาง
ขั้นตอนแรกคือการสร้างเทมเพลตอินสแตนซ์ us-east-1
จาก Cloud Shell
gcloud compute instance-templates create us-east1-template \ --region=us-east1 \ --network=httplbs \ --tags=http-server, \ --image-family=debian-9 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-east1-template]. NAME: us-east1-template MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: CREATION_TIMESTAMP: 2021-11-11T11:02:37.511-08:00
ขั้นตอนถัดไปคือการสร้างเทมเพลตอินสแตนซ์ us-west-1
จาก Cloud Shell
gcloud compute instance-templates create us-west1-template \ --region=us-west1 \ --network=httplbs \ --tags=http-server, \ --image-family=debian-9 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-west1-template]. NAME: us-west1-template MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: CREATION_TIMESTAMP: 2021-11-11T11:03:08.577-08:00
ขั้นตอนถัดไปคือการสร้างเทมเพลตอินสแตนซ์ us-central-1
จาก Cloud Shell
gcloud compute instance-templates create us-central1-template \ --region=us-central1 \ --network=httplbs \ --tags=http-server, \ --image-family=debian-9 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-central1-template]. NAME: us-central1-template MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: CREATION_TIMESTAMP: 2021-11-11T11:03:44.179-08:00
ตอนนี้คุณจะยืนยันว่าสร้างเทมเพลตอินสแตนซ์สำเร็จแล้วด้วยคำสั่ง gcloud ต่อไปนี้
จาก Cloud Shell
gcloud compute instance-templates list
เอาต์พุต
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP us-central1-template n1-standard-1 2021-11-09T09:25:37.263-08:00 us-east1-template n1-standard-1 2021-11-09T09:24:35.275-08:00 us-west1-template n1-standard-1 2021-11-09T09:25:08.016-08:00
สร้างกลุ่มอินสแตนซ์ที่มีการจัดการแบบตะวันออก ตะวันตก และส่วนกลาง
ตอนนี้เราต้องสร้างกลุ่มอินสแตนซ์ที่มีการจัดการจากเทมเพลตอินสแตนซ์ที่เราสร้างไว้ก่อนหน้านี้
จาก Cloud Shell
gcloud compute instance-groups managed create us-east1-mig \ --base-instance-name=us-east1-mig \ --size=1 \ --template=us-east1-template \ --zone=us-east1-b
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-mig]. NAME: us-east1-mig LOCATION: us-east1-b SCOPE: zone BASE_INSTANCE_NAME: us-east1-mig SIZE: 0 TARGET_SIZE: 1 INSTANCE_TEMPLATE: us-east1-template AUTOSCALED: no
จาก Cloud Shell
gcloud compute instance-groups managed create us-west1-mig \ --base-instance-name=us-west1-mig \ --size=1 \ --template=us-west1-template \ --zone=us-west1-a
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroupManagers/us-west1-mig]. NAME: us-west1-mig LOCATION: us-west1-a SCOPE: zone BASE_INSTANCE_NAME: us-west1-mig SIZE: 0 TARGET_SIZE: 1 INSTANCE_TEMPLATE: us-west1-template AUTOSCALED: no
จาก Cloud Shell
gcloud compute instance-groups managed create us-central1-mig \ --base-instance-name=us-central1-mig \ --size=1 \ --template=us-central1-template \ --zone=us-central1-a
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-central1-a/instanceGroupManagers/us-central1-mig]. NAME: us-central1-mig LOCATION: us-central1-a SCOPE: zone BASE_INSTANCE_NAME: us-central1-mig SIZE: 0 TARGET_SIZE: 1 INSTANCE_TEMPLATE: us-central1-template AUTOSCALED: no
เราสามารถยืนยันว่าได้สร้างกลุ่มอินสแตนซ์เสร็จเรียบร้อยแล้วด้วยคำสั่ง gcloud ต่อไปนี้
จาก Cloud Shell
gcloud compute instance-groups list
เอาต์พุต
NAME LOCATION SCOPE NETWORK MANAGED INSTANCES us-central1-mig us-central1 zone httplbs Yes 1 us-west1-mig us-west1 zone httplbs Yes 1 us-east1-mig us-east1 zone httplbs Yes 1
ยืนยันฟังก์ชันการทำงานของเว็บเซิร์ฟเวอร์
แต่ละอินสแตนซ์ได้รับการกำหนดค่าให้เรียกใช้เว็บเซิร์ฟเวอร์ Apache ด้วยสคริปต์ PHP ง่ายๆ ที่แสดงผล
หากต้องการตรวจสอบว่าเว็บเซิร์ฟเวอร์ทำงานได้อย่างถูกต้อง ให้ไปที่ Compute Engine -> อินสแตนซ์ VM ตรวจสอบว่าได้สร้างอินสแตนซ์ใหม่ (เช่น us-east1-mig-xxx) ตามคำจำกัดความของอินสแตนซ์แล้ว
ทีนี้ให้สร้างคำขอเว็บในเบราว์เซอร์เพื่อตรวจสอบว่าเว็บเซิร์ฟเวอร์ทำงานอยู่ (การดำเนินการนี้อาจใช้เวลาสักครู่ในการเริ่มต้น) ในหน้าอินสแตนซ์ VM ใต้ Compute Engine ให้เลือกอินสแตนซ์ที่สร้างโดยอินสแตนซ์ของคุณ แล้วคลิก IP ภายนอก (สาธารณะ) ของอินสแตนซ์
หรือในเบราว์เซอร์ ให้ไปที่ http://<IP_Address>
5. ตั้งค่าตัวจัดสรรภาระงาน
สร้างการตรวจสอบประสิทธิภาพการทำงาน
ก่อนอื่นเราต้องสร้างการตรวจสอบประสิทธิภาพการทำงานเบื้องต้นเพื่อให้แน่ใจว่าบริการของเราทำงานได้สำเร็จ เราจะสร้างการตรวจสอบประสิทธิภาพการทำงานเบื้องต้น โดยยังมีการปรับแต่งขั้นสูงอีกมากมาย
จาก Cloud Shell
gcloud compute health-checks create http http-basic-check \ --port 80
สำรองที่อยู่ IP ภายนอก
ในขั้นตอนนี้ คุณจะต้องจองที่อยู่ IP แบบคงที่ที่พร้อมใช้งานทั่วโลกซึ่งจะแนบกับตัวจัดสรรภาระงานในภายหลัง
จาก Cloud Shell
gcloud compute addresses create lb-ipv4-2 \ --ip-version=IPV4 \ --global
อย่าลืมจดที่อยู่ IP ที่จองไว้
gcloud compute addresses describe lb-ipv4-2 \ --format="get(address)" \ --global
สร้างบริการแบ็กเอนด์
ตอนนี้เราต้องสร้างบริการแบ็กเอนด์สำหรับกลุ่มอินสแตนซ์ที่มีการจัดการแต่ละกลุ่มที่เราสร้างไว้ก่อนหน้านี้ พื้นที่หนึ่งสำหรับฝั่งตะวันออก ตะวันตก และตอนกลาง
การสร้างบริการแบ็กเอนด์สำหรับกลุ่มอินสแตนซ์ที่มีการจัดการแบบตะวันออก
จาก Cloud Shell
gcloud compute backend-services create east-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --port-name=http \ --health-checks=http-basic-check \ --global
การสร้างบริการแบ็กเอนด์สำหรับกลุ่มอินสแตนซ์ที่มีการจัดการในตะวันตก
จาก Cloud Shell
gcloud compute backend-services create west-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --port-name=http \ --health-checks=http-basic-check \ --global
การสร้างบริการแบ็กเอนด์สำหรับกลุ่มอินสแตนซ์ที่มีการจัดการโดย Central
จาก Cloud Shell
gcloud compute backend-services create central-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --port-name=http \ --health-checks=http-basic-check \ --global
เพิ่ม MIG ไปยังบริการแบ็กเอนด์
เมื่อเราสร้างบริการแบ็กเอนด์ที่เกี่ยวข้องสำหรับแต่ละคลัสเตอร์ของแอปพลิเคชันแล้ว เราต้องเพิ่มอินสแตนซ์ที่มีการจัดการที่เราสร้างไว้ก่อนหน้านี้ลงในบริการแบ็กเอนด์แต่ละรายการ
เพิ่ม East MIG ในบริการแบ็กเอนด์
จาก Cloud Shell
gcloud compute backend-services add-backend east-backend-service \ --balancing-mode='UTILIZATION' \ --instance-group=us-east1-mig \ --instance-group-zone=us-east1-b \ --global
เพิ่ม West MIG ไปยังบริการแบ็กเอนด์
จาก Cloud Shell
gcloud compute backend-services add-backend west-backend-service \ --balancing-mode='UTILIZATION' \ --instance-group=us-west1-mig \ --instance-group-zone=us-west1-a \ --global
เพิ่ม Central MIG ในบริการแบ็กเอนด์
จาก Cloud Shell
gcloud compute backend-services add-backend central-backend-service \ --balancing-mode='UTILIZATION' \ --instance-group=us-central1-mig \ --instance-group-zone=us-central1-a \ --global
สร้างแมป URL
แมป URL คือส่วนที่ฟีเจอร์การจัดการการรับส่งข้อมูลขั้นสูงสำหรับห้องทดลองนี้จะให้บริการอยู่ เราต้องสร้างไฟล์ .yaml ซึ่งจะมีการกำหนดค่า ภายในไฟล์ .yaml เราได้สร้างการจับคู่คำนำหน้าใน /roundrobbin ไว้ ดังนั้นมีเพียงการรับส่งที่ตรงกับ /roundrobbin เท่านั้นที่จะได้รับผลกระทบจากการกำหนดค่าเหล่านี้ เราได้ระบุว่า 50% ของการเข้าชมควรไปที่บริการด้านแบ็กเอนด์ และ 50% ควรไปที่บริการแบ็กเอนด์ทางตะวันตก นอกจากนี้ เราได้เพิ่มค่าส่วนหัวของการตอบกลับ {test} ซึ่งจะแสดงในการตอบกลับทั้งหมด สุดท้าย เราได้เพิ่มว่าการรับส่งข้อมูลทั้งหมดควรมิเรอร์ไปยังบริการแบ็กเอนด์ส่วนกลาง การรับส่งข้อมูลจะทำสำเนาและส่งมาที่นี่เพื่อการทดสอบเท่านั้น
บันทึกตัวอย่างเป็นไฟล์ .yaml ในเครื่อง
defaultService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service kind: compute #urlMap name: web-map-http hostRules: - hosts: - '*' pathMatcher: matcher1 pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service name: matcher1 routeRules: - matchRules: - prefixMatch: /roundrobbin priority: 2 headerAction: responseHeadersToAdd: - headerName: test headerValue: value replace: True routeAction: weightedBackendServices: - backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service weight: 50 - backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/west-backend-service weight: 50 retryPolicy: retryConditions: ['502', '504'] numRetries: 3 perTryTimeout: seconds: 1 nanos: 50 requestMirrorPolicy: backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/central-backend-service
สร้าง URL Map เพื่อนำเข้าเอกสารจากเครื่องของคุณ โปรดทราบว่าเส้นทางแหล่งที่มาจะแตกต่างออกไป ขึ้นอยู่กับตำแหน่งที่คุณบันทึกไฟล์ .yaml
จาก Cloud Shell
gcloud compute url-maps import web-map-http \ --source /Users/[USERNAME]/Documents/Codelab/lbconfig.yaml \ --global
สร้างฟรอนท์เอนด์ HTTP
ขั้นตอนสุดท้ายในการสร้างตัวจัดสรรภาระงานคือการสร้างฟรอนท์เอนด์ การดำเนินการนี้จะแมปที่อยู่ IP ที่คุณจองไว้ก่อนหน้านี้กับแมป URL ของตัวจัดสรรภาระงานที่คุณสร้างขึ้น
จาก Cloud Shell
gcloud compute target-http-proxies create http-lb-proxy-adv \ --url-map=web-map-http
จากนั้นคุณต้องสร้างกฎการส่งต่อร่วมซึ่งจะแมปที่อยู่ IP ที่จองไว้ก่อนหน้านี้กับพร็อกซี HTTP
จาก Cloud Shell
gcloud compute forwarding-rules create http-content-rule \ --load-balancing-scheme EXTERNAL_MANAGED \ --address=lb-ipv4-2 \ --global \ --target-http-proxy=http-lb-proxy-adv \ --ports=80
6. ตรวจสอบว่าฟีเจอร์การจราจรขั้นสูงใช้งานได้
คุณต้องสร้างโหลดขึ้นมาเพื่อยืนยันว่าฟีเจอร์การแยกการเข้าชมที่ใช้งานอยู่ใช้งานได้ ในการดำเนินการนี้ เราจะสร้าง VM ใหม่เพื่อจำลองโหลด
สร้างการอนุญาตไฟร์วอลล์ SSH
หากต้องการ SSH ไปยัง VM ที่เราจะสร้างการรับส่งข้อมูลจากคุณก่อนอื่น คุณต้องสร้างกฎไฟร์วอลล์ซึ่งจะอนุญาตการรับส่งข้อมูล SSH ไปยัง VM
จาก Cloud Shell
gcloud compute firewall-rules create fw-allow-ssh \ --network=httplbs \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
เอาต์พุต
NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED fw-allow-ssh httplbs INGRESS 1000 tcp:22 False
สร้าง Siege-Vm
ถึงตอนนี้คุณจะต้องสร้าง siege-vm ที่จะใช้สร้างโหลด
จาก Cloud Shell
gcloud compute instances create siege-vm \ --network=httplbs \ --zone=us-east4-c \ --machine-type=e2-medium \ --tags=allow-ssh,http-server \ --metadata=startup-script='sudo apt-get -y install siege'
เอาต์พุต
NAME ZONE MACHINE_TYPE INTERNAL_IP EXTERNAL_IP STATUS siege-vm us-east4-c e2-medium 10.150.0.3 34.85.218.119 RUNNING
ถัดไป คุณจะ SSH ไปยัง VM ที่สร้างขึ้นได้ เมื่อสร้างแล้ว ให้คลิก SSH เพื่อเปิดใช้งานเทอร์มินัลและเชื่อมต่อ
เมื่อเชื่อมต่อแล้ว ให้เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างโหลด ใช้ที่อยู่ IP ที่คุณจองไว้ก่อนหน้านี้สำหรับตัวจัดสรรภาระงาน HTTP ภายนอก
จาก Cloud Shell
siege -c 250 http://$lb-ipv4-2/roundrobbin
เอาต์พุต
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file [alert] Zip encoding disabled; siege requires zlib support to enable it: No such file or directory ** SIEGE 4.0.2 ** Preparing 250 concurrent users for battle. The server is now under siege...
ตรวจสอบการกระจายภาระงาน
ตอนนี้ Siege กำลังทำงาน ก็ถึงเวลาตรวจสอบว่ามีการกระจายการรับส่งข้อมูลไปยังอินสแตนซ์ที่มีการจัดการในฝั่งตะวันออกและตะวันตกเท่าๆ กัน นอกจากนี้ คุณยังตรวจสอบได้ว่าการมิเรอร์การรับส่งข้อมูลกำลังทำงานและมีการส่งการจราจรของข้อมูลไปยังอินสแตนซ์ที่มีการจัดการส่วนกลาง
ใน Cloud Console ให้คลิกบริการเครือข่าย > ในเมนูการนำทาง การจัดสรรภาระงาน เลือก Web-map-http ของตัวจัดสรรภาระงาน ไปที่แท็บการตรวจสอบ คุณจะเห็นแผนภูมิด้านล่าง
คุณจะเห็นการแยกการเข้าชมไปยัง MIG นี้แบบเรียลไทม์ การรับส่งข้อมูลจะแยกออกเท่าๆ กันเนื่องจากคุณกำหนดค่าการแยก Robbin แบบกลม 50/50
หากต้องการตรวจสอบว่านโยบายการมิเรอร์การรับส่งข้อมูลที่คุณสร้างนั้นใช้งานได้ คุณต้องตรวจสอบการใช้งานของอินสแตนซ์ที่มีการจัดการโดยบริการแบ็กเอนด์ส่วนกลาง โดยไปที่ Compute, Compute Engine, อินสแตนซ์ แล้วเลือก us-central1-mig จากนั้นไปที่แท็บการตรวจสอบ
คุณจะเห็นแผนภูมิที่สร้างไว้ซึ่งแสดงให้เห็นว่าการรับส่งข้อมูลได้รับการมิเรอร์ไปยังอินสแตนซ์ที่มีการจัดการนี้แล้ว
หยุดยั้ง
ตอนนี้คุณได้แสดงให้เห็นว่าการแยกการเข้าชมขั้นสูงใช้ได้ผลแล้ว ตอนนี้ก็ถึงเวลาที่จะหยุดการโจมตี หากต้องการดำเนินการดังกล่าว ให้กลับไปที่เทอร์มินัล SSH ของ siege-vm แล้วกด Ctrl+C เพื่อหยุดการป้องกัน
ตรวจสอบส่วนหัวของการตอบกลับที่ส่ง
ก่อนทำความสะอาด คุณจะตรวจสอบได้อย่างรวดเร็วว่าตัวจัดสรรภาระงาน http ส่งส่วนหัวการตอบกลับที่เหมาะสมแล้ว คุณได้กำหนดค่าให้ส่งการทดสอบส่วนหัวที่มีค่าเนื้อหา การเรียกใช้คำสั่ง curl จาก Cloud Shell จะให้การตอบสนองตามที่คาดไว้
จาก Cloud Shell
curl -svo /dev/null http://lb-ipv4-2/roundrobbin
เอาต์พุต
* Trying lb-ipv4-2.. * TCP_NODELAY set * Connected to lb-ipv4-2 ( lb-ipv4-2) port 80 (#0) > GET /roundrobbin HTTP/1.1 > Host: lb-ipv4-2 > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 404 Not Found < date: Wed, 10 Nov 2021 17:05:27 GMT < server: envoy < Content-Length: 273 < content-type: text/html; charset=iso-8859-1 < via: 1.1 google < test: value < { [273 bytes data] * Connection #0 to host 34.149.2.26 left intact * Closing connection 0
7. ทำความสะอาดห้องปฏิบัติการ
หลังจากใช้สภาพแวดล้อมของห้องทดลองเสร็จแล้ว ก็ได้เวลาแยกชิ้นส่วนลง โปรดเรียกใช้คำสั่งต่อไปนี้เพื่อลบสภาพแวดล้อมการทดสอบ
จาก Cloud Shell
gcloud compute instances delete siege-vm --zone=us-east4-c gcloud compute forwarding-rules delete http-content-rule --global gcloud compute target-http-proxies delete http-lb-proxy-adv gcloud compute url-maps delete web-map-http gcloud compute backend-services delete east-backend-service --global gcloud compute backend-services delete west-backend-service --global gcloud compute backend-services delete central-backend-service --global gcloud compute addresses delete lb-ipv4-2 --global gcloud compute health-checks delete http-basic-check gcloud compute instance-groups managed delete us-east1-mig --zone us-east1-b gcloud compute instance-groups managed delete us-west1-mig --zone us-west1-a gcloud compute instance-groups managed delete us-central1-mig --zone us-central1-a gcloud compute instance-templates delete "us-east1-template" gcloud compute instance-templates delete "us-west1-template" gcloud compute instance-templates delete "us-central1-template" gcloud compute firewall-rules delete httplb-allow-http-rule gcloud compute firewall-rules delete fw-allow-ssh gcloud compute networks delete httplbs
8. ยินดีด้วย
คุณได้ทำ LB ของ HTTP ภายนอกด้วย Advanced Traffic Management (Envoy) Codelab เรียบร้อยแล้ว
หัวข้อที่ครอบคลุม
- วิธีตั้งค่าอินสแตนซ์ที่มีการจัดการและกฎของ VPC และไฟร์วอลล์ที่เชื่อมโยง
- วิธีใช้ฟีเจอร์การจัดการการรับส่งข้อมูลขั้นสูงของตัวจัดสรรภาระงานใหม่
- วิธีตรวจสอบว่าฟีเจอร์การจัดการการเข้าชมขั้นสูงทำงานตามที่ต้องการ
ขั้นตอนถัดไป
- ลองใช้ฟีเจอร์การกำหนดเส้นทางขั้นสูงอื่นๆ เช่น การเขียน URL ใหม่, การเพิ่มส่วนหัว CORS และอีกมากมาย ( ลิงก์)