1. บทนำ
การจัดสรรภาระงาน HTTP(S) ของ Google Cloud จะได้รับการติดตั้งใช้งานที่ขอบของเครือข่าย Google ในจุดเชื่อมต่อ (POP) ของ Google ทั่วโลก การเข้าชมของผู้ใช้ที่นำไปยังตัวจัดสรรภาระงาน HTTP(S) จะเข้าสู่ POP ที่ใกล้ผู้ใช้มากที่สุด จากนั้นจะมีการจัดสรรภาระงานผ่านเครือข่ายทั่วโลกของ Google ไปยังแบ็กเอนด์ที่ใกล้ที่สุดซึ่งมีความจุเพียงพอ
Cloud Armor คือระบบตรวจจับการปฏิเสธการให้บริการแบบกระจายและไฟร์วอลล์สำหรับเว็บแอปพลิเคชัน (WAF) ของ Google Cloud Armor ทำงานร่วมกับตัวจัดสรรภาระงาน HTTP ของ Google Cloud อย่างใกล้ชิด และช่วยให้คุณตรวจสอบการรับส่งข้อมูลขาเข้าเพื่อหาคำขอที่ไม่ต้องการได้ ฟีเจอร์การจำกัดอัตราของบริการนี้ช่วยให้คุณลดการรับส่งข้อมูลไปยังทรัพยากรแบ็กเอนด์ตามปริมาณคำขอ และป้องกันไม่ให้การรับส่งข้อมูลที่ไม่พึงประสงค์ใช้ทรัพยากรในเครือข่าย Virtual Private Cloud (VPC)
ในแล็บนี้ คุณจะกำหนดค่าตัวจัดสรรภาระงาน HTTP ที่มีแบ็กเอนด์ทั่วโลก ดังที่แสดงในแผนภาพด้านล่าง จากนั้นคุณจะทำการทดสอบความเครียดของ Load Balancer และเพิ่มนโยบายการจำกัดอัตราของ Cloud Armor เพื่อจำกัดการเข้าชมที่เข้าถึงทรัพยากรแบ็กเอนด์

สิ่งที่คุณจะได้เรียนรู้
- วิธีตั้งค่าตัวจัดสรรภาระงาน HTTP ด้วยการตรวจสอบประสิทธิภาพการทำงานที่เหมาะสม
- วิธีสร้างนโยบายการจำกัดอัตราของ Cloud Armor
- วิธีตรวจสอบว่านโยบายการจำกัดอัตรากำลังบล็อกการรับส่งข้อมูลเมื่อเรียกใช้การทดสอบความเครียดจาก VM
สิ่งที่คุณต้องมี
- ความรู้พื้นฐานด้านเครือข่ายและความรู้เกี่ยวกับ HTTP
- ความรู้พื้นฐานเกี่ยวกับบรรทัดคำสั่ง Unix/Linux
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ โดยเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ และคุณสามารถอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (และโดยทั่วไปจะระบุเป็น
PROJECT_ID) ดังนั้นหากไม่ชอบรหัสที่สร้างขึ้น ให้สร้างรหัสแบบสุ่มอีกรหัส หรือจะลองใช้รหัสของคุณเองและดูว่ามีรหัสนั้นหรือไม่ก็ได้ จากนั้นจะ "หยุด" หลังจากสร้างโปรเจ็กต์แล้ว - นอกจากนี้ยังมีค่าที่ 3 คือหมายเลขโปรเจ็กต์ ซึ่ง API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดแหล่งข้อมูลเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตามวิธีการ "ล้างข้อมูล" ที่ตอนท้ายของ Codelab ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
จาก GCP Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อเสร็จแล้ว คุณควรเห็นข้อความคล้ายกับตัวอย่างต่อไปนี้

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดในห้องทดลองนี้ได้โดยใช้เพียงเบราว์เซอร์
ก่อนเริ่มต้น
ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์ใน Cloud Shell แล้ว
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
เปิดใช้ API
เปิดใช้บริการทั้งหมดที่จำเป็น
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. กำหนดค่ากฎไฟร์วอลล์เพื่ออนุญาตให้มีการรับส่งข้อมูล HTTP กับแบ็กเอนด์
กำหนดค่ากฎไฟร์วอลล์เพื่ออนุญาตให้มีการรับส่งข้อมูล HTTP กับแบ็กเอนด์จากการตรวจสอบประสิทธิภาพการทำงานของ Google Cloud และตัวจัดสรรภาระงาน
เราจะใช้เครือข่าย VPC เริ่มต้นที่สร้างในโปรเจ็กต์ของคุณ สร้างกฎไฟร์วอลล์เพื่ออนุญาตให้มีการรับส่งข้อมูล HTTP กับแบ็กเอนด์ การตรวจสอบประสิทธิภาพการทำงานจะกำหนดว่าอินสแตนซ์ของตัวจัดสรรภาระงานใดที่รับการเชื่อมต่อใหม่ได้ สำหรับการจัดสรรภาระงาน HTTP โพรบการตรวจสอบประสิทธิภาพการทำงานไปยังอินสแตนซ์ที่จัดสรรภาระงานจะมาจากที่อยู่ในช่วง 130.211.0.0/22 และ 35.191.0.0/16 กฎไฟร์วอลล์ VPC ต้องอนุญาตการเชื่อมต่อเหล่านี้ นอกจากนี้ ตัวจัดสรรภาระงานยังสื่อสารกับแบ็กเอนด์ใน IP ช่วงเดียวกันด้วย
- ใน Cloud Console ให้ไปที่เมนูการนำทาง (
) > เครือข่าย VPC > ไฟร์วอลล์

- โปรดสังเกตกฎไฟร์วอลล์ ICMP, internal, RDP และ SSH ที่มีอยู่ โปรเจ็กต์ Google Cloud แต่ละโปรเจ็กต์จะเริ่มต้นด้วยเครือข่ายเริ่มต้นและกฎไฟร์วอลล์เหล่านี้
- คลิกสร้างกฎไฟร์วอลล์
- ตั้งค่าต่อไปนี้ โดยปล่อยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (ป้อนค่าประเภทหรือเลือกตัวเลือกตามที่ระบุ) |
ชื่อ | default-allow-health-check |
เครือข่าย | ค่าเริ่มต้น |
เป้าหมาย | แท็กเป้าหมายที่ระบุ |
แท็กเป้าหมาย | http-server |
ตัวกรองแหล่งที่มา | ช่วง IP |
ช่วง IP ต้นทาง | 130.211.0.0/22, 35.191.0.0/16 |
โปรโตคอลและพอร์ต | โปรโตคอลและพอร์ตที่ระบุ แล้วตรวจสอบ tcp |
- คลิกสร้าง
หรือหากคุณใช้บรรทัดคำสั่ง gcloud คำสั่งมีดังนี้
gcloud compute firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=http-server
4. กำหนดค่าเทมเพลตอินสแตนซ์และสร้างกลุ่มอินสแตนซ์ที่มีการจัดการ
กลุ่มอินสแตนซ์ที่มีการจัดการใช้เทมเพลตอินสแตนซ์เพื่อสร้างกลุ่มอินสแตนซ์ที่เหมือนกัน ใช้สิ่งเหล่านี้เพื่อสร้างแบ็กเอนด์ของตัวจัดสรรภาระงาน HTTP
กำหนดค่าเทมเพลตอินสแตนซ์
เทมเพลตอินสแตนซ์คือทรัพยากร API ที่คุณใช้เพื่อสร้างอินสแตนซ์ VM และกลุ่มอินสแตนซ์ที่มีการจัดการ เทมเพลตอินสแตนซ์กำหนดประเภทเครื่อง อิมเมจดิสก์สำหรับบูต เครือข่ายย่อย ป้ายกำกับ และพร็อพเพอร์ตี้อื่นๆ ของอินสแตนซ์ สร้างเทมเพลตอินสแตนซ์ 1 รายการสำหรับ us-east1 และอีก 1 รายการสำหรับ europe-west1
- ใน Cloud Console ให้ไปที่เมนูการนำทาง (
) > Compute Engine > เทมเพลตอินสแตนซ์ แล้วคลิกสร้างเทมเพลตอินสแตนซ์ - สำหรับชื่อ ให้พิมพ์ us-east1-template
- สำหรับซีรีส์ ให้เลือก N1
- คลิกเครือข่าย ดิสก์ ความปลอดภัย การจัดการ การเช่าเดี่ยว

- ไปที่ส่วนการจัดการ -

- ในส่วนข้อมูลเมตา ให้คลิกเพิ่มรายการ แล้วระบุข้อมูลต่อไปนี้
คีย์ | ค่า |
startup-script-url | gs://cloud-training/gcpnet/httplb/startup.sh |
- คลิกเครือข่าย
- ตั้งค่าต่อไปนี้และปล่อยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (ป้อนค่าประเภทหรือเลือกตัวเลือกตามที่ระบุ) |
เครือข่าย (ในส่วนอินเทอร์เฟซเครือข่าย) | ค่าเริ่มต้น |
ซับเน็ต (ในส่วนอินเทอร์เฟซเครือข่าย) | ค่าเริ่มต้น (us-east1) |
แท็กเครือข่าย | http-server |
- คลิกสร้าง
- รอให้ระบบสร้างเทมเพลตอินสแตนซ์
ตอนนี้ให้สร้างเทมเพลตอินสแตนซ์อีกรายการสำหรับ subnet-b โดยการคัดลอก us-east1-template
- คลิก us-east1-template แล้วคลิกตัวเลือกคัดลอกจากด้านบน
- สำหรับชื่อ ให้พิมพ์ europe-west1-template
- คลิกเครือข่าย ดิสก์ ความปลอดภัย การจัดการ การเช่าเดี่ยว
- คลิกเครือข่าย
- ในส่วนอินเทอร์เฟซเครือข่าย ให้แก้ไขอินเทอร์เฟซเริ่มต้น สำหรับซับเน็ต ให้เลือกค่าเริ่มต้น (europe-west1)
- คลิกสร้าง
สร้างกลุ่มอินสแตนซ์ที่มีการจัดการ
สร้างกลุ่มอินสแตนซ์ที่มีการจัดการใน us-east1 และอีกกลุ่มใน europe-west1
- ขณะที่ยังอยู่ใน Compute Engine ให้คลิกกลุ่มอินสแตนซ์ในเมนูด้านซ้าย

- คลิกสร้างกลุ่มอินสแตนซ์ เลือกกลุ่มอินสแตนซ์ใหม่ที่มีการจัดการ (ไม่เก็บสถานะ)
- ตั้งค่าต่อไปนี้ โดยปล่อยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (ป้อนค่าประเภทหรือเลือกตัวเลือกตามที่ระบุ) |
ชื่อ | us-east1-mig |
ตำแหน่ง | หลายโซน |
ภูมิภาค | us-east1 |
เทมเพลตอินสแตนซ์ | us-east1-template |
การปรับขนาดอัตโนมัติ > นโยบายการปรับขนาดอัตโนมัติ > คลิกไอคอนดินสอ > ประเภทเมตริก | การใช้งาน CPU |
การใช้งาน CPU เป้าหมาย | 80 แล้วคลิกเสร็จสิ้น |
ระยะเวลาพัก | 45 |
จำนวนอินสแตนซ์ขั้นต่ำ | 1 |
จำนวนอินสแตนซ์สูงสุด | 5 |
- คลิกสร้าง
ตอนนี้ให้ทำตามขั้นตอนเดียวกันเพื่อสร้างกลุ่มอินสแตนซ์ที่ 2 สำหรับ europe-west1-mig ใน europe-west1
- คลิกสร้างกลุ่มอินสแตนซ์
- ตั้งค่าต่อไปนี้ โดยปล่อยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (ป้อนค่าประเภทหรือเลือกตัวเลือกตามที่ระบุ) |
ชื่อ | europe-west1-mig |
ตำแหน่ง | หลายโซน |
ภูมิภาค | europe-west1 |
เทมเพลตอินสแตนซ์ | europe-west1-template |
การปรับขนาดอัตโนมัติ > นโยบายการปรับขนาดอัตโนมัติ > คลิกไอคอนดินสอ > ประเภทเมตริก | การใช้งาน CPU |
การใช้งาน CPU เป้าหมาย | 80 แล้วคลิกเสร็จสิ้น |
ระยะเวลาพัก | 45 |
จำนวนอินสแตนซ์ขั้นต่ำ | 1 |
จำนวนอินสแตนซ์สูงสุด | 5 |
- คลิกสร้าง
5. กำหนดค่าตัวจัดสรรภาระงาน HTTP
กำหนดค่าตัวจัดสรรภาระงาน HTTP เพื่อกระจายการรับส่งข้อมูลระหว่างแบ็กเอนด์ 2 รายการ (us-east1-mig ใน us-east1 และ europe-west1-mig ใน europe-west1) ดังที่แสดงในแผนภาพเครือข่าย

เริ่มการกำหนดค่า
- ใน Cloud Console ให้คลิกเมนูการนำทาง (
) > คลิกบริการเครือข่าย > การจัดสรรภาระงาน แล้วคลิกสร้างตัวจัดสรรภาระงาน - ในส่วนการจัดสรรภาระงาน HTTP(S) ให้คลิกเริ่มการกำหนดค่า

- เลือกจากอินเทอร์เน็ตไปยัง VM ของฉัน ตัวจัดสรรภาระงาน HTTP(S) แบบคลาสสิก แล้วคลิกต่อไป
- ตั้งค่า Name เป็น http-lb
กำหนดค่าแบ็กเอนด์
บริการแบ็กเอนด์จะกำหนดเส้นทางการรับส่งข้อมูลขาเข้าไปยังแบ็กเอนด์ที่แนบอย่างน้อย 1 รายการ แบ็กเอนด์แต่ละรายการประกอบด้วยกลุ่มอินสแตนซ์และข้อมูลเมตาความจุในการแสดงผลเพิ่มเติม
- คลิกการกำหนดค่าแบ็กเอนด์
- สำหรับบริการแบ็กเอนด์และที่เก็บข้อมูลแบ็กเอนด์ ให้คลิกสร้างบริการแบ็กเอนด์
- ตั้งค่าต่อไปนี้ โดยปล่อยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (เลือกตัวเลือกตามที่ระบุ) |
ชื่อ | http-backend |
กลุ่มอินสแตนซ์ | us-east1-mig |
โอนย้ายหมายเลข | 80 |
โหมดการจัดสรรภาระงาน | ให้คะแนน |
RPS สูงสุด | 50 (ต่ออินสแตนซ์) |
กำลังการผลิต | 100 |
- คลิกเสร็จสิ้น
- คลิกเพิ่มแบ็กเอนด์
- ตั้งค่าต่อไปนี้ โดยปล่อยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (เลือกตัวเลือกตามที่ระบุ) |
กลุ่มอินสแตนซ์ | europe-west1-mig |
โอนย้ายหมายเลข | 80 |
โหมดการจัดสรรภาระงาน | การใช้งาน |
การใช้งานแบ็กเอนด์สูงสุด | 80 |
กำลังการผลิต | 100 |
- คลิกเสร็จสิ้น
- สําหรับการตรวจสอบประสิทธิภาพการทํางาน ให้เลือกสร้างการตรวจสอบประสิทธิภาพการทํางาน

- ตั้งค่าต่อไปนี้ โดยปล่อยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (เลือกตัวเลือกตามที่ระบุ) |
ชื่อ | http-health-check |
โปรโตคอล | TCP |
พอร์ต | 80 |

- คลิกบันทึก
- เลือกช่องเปิดใช้การบันทึก
- ตั้งค่าอัตราการสุ่มตัวอย่างเป็น 1 โดยทำดังนี้

- คลิกสร้างเพื่อสร้างบริการแบ็กเอนด์

กำหนดค่าฟรอนท์เอนด์
กฎของโฮสต์และเส้นทางจะระบุการกำหนดเส้นทางการรับส่งข้อมูล เช่น คุณกำหนดเส้นทางการรับส่งข้อมูลวิดีโอไปยังแบ็กเอนด์หนึ่ง และการรับส่งข้อมูลแบบคงที่ไปยังแบ็กเอนด์อื่นได้ อย่างไรก็ตาม คุณไม่ได้กำหนดค่ากฎของโฮสต์และเส้นทางใน Lab นี้
- คลิกการกำหนดค่าฟรอนท์เอนด์
- ระบุค่าต่อไปนี้ โดยปล่อยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (ป้อนค่าประเภทหรือเลือกตัวเลือกตามที่ระบุ) |
โปรโตคอล | HTTP |
เวอร์ชัน IP | IPv4 |
ที่อยู่ IP | ชั่วคราว |
พอร์ต | 80 |
- คลิกเสร็จสิ้น
- คลิกเพิ่มพอร์ตและ IP ฟรอนท์เอนด์
- ระบุค่าต่อไปนี้ โดยปล่อยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (ป้อนค่าประเภทหรือเลือกตัวเลือกตามที่ระบุ) |
โปรโตคอล | HTTP |
เวอร์ชัน IP | IPv6 |
ที่อยู่ IP | ชั่วคราว |
พอร์ต | 80 |
- คลิกเสร็จสิ้น
ตรวจสอบและสร้างตัวจัดสรรภาระงาน HTTP
- คลิกตรวจสอบและทำให้สิ้นสุด

- ตรวจสอบบริการแบ็กเอนด์และฟรอนต์เอนด์

- คลิกสร้าง
- รอให้ระบบสร้างตัวจัดสรรภาระงาน
- คลิกชื่อของตัวจัดสรรภาระงาน (http-lb)
- จดที่อยู่ IPv4 และ IPv6 ของตัวจัดสรรภาระงานสำหรับงานถัดไป โดยจะเรียกว่า [LB_IP_v4] และ [LB_IP_v6] ตามลำดับ
6. ทดสอบตัวจัดสรรภาระงาน HTTP
ตอนนี้คุณได้สร้างตัวจัดสรรภาระงาน HTTP สำหรับแบ็กเอนด์แล้ว ให้ตรวจสอบว่าระบบได้ส่งต่อการรับส่งข้อมูลไปยังบริการแบ็กเอนด์
เข้าถึงตัวจัดสรรภาระงาน HTTP
หากต้องการทดสอบการเข้าถึง IPv4 ไปยังตัวจัดสรรภาระงาน HTTP ให้เปิดแท็บใหม่ในเบราว์เซอร์ แล้วไปที่ http://[LB_IP_v4] โปรดตรวจสอบว่าได้แทนที่ [LB_IP_v4] ด้วยที่อยู่ IPv4 ของตัวปรับโหลดแล้ว
หากคุณมีที่อยู่ IPv6 ในเครื่อง ให้ลองใช้ที่อยู่ IPv6 ของ HTTP Load Balancer โดยไปที่ http://[LB_IP_v6] อย่าลืมแทนที่ [LB_IP_v6] ด้วยที่อยู่ IPv6 ของตัวโหลดบาลานซ์

ทดสอบประสิทธิภาพตัวจัดสรรภาระงาน HTTP
สร้าง VM ใหม่เพื่อจำลองภาระงานในตัวจัดสรรภาระงาน HTTP โดยใช้ Siege จากนั้นพิจารณาว่ามีการกระจายการเข้าชมในแบ็กเอนด์ทั้ง 2 รายการเมื่อมีการโหลดสูงหรือไม่
- ในคอนโซล ให้ไปที่เมนูการนำทาง (
) > Compute Engine > อินสแตนซ์ VM - คลิกสร้างอินสแตนซ์
- ตั้งค่าต่อไปนี้ โดยปล่อยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (ป้อนค่าประเภทหรือเลือกตัวเลือกตามที่ระบุ) |
ชื่อ | siege-vm |
ภูมิภาค | us-west1 |
โซน | us-west1-c |
ชุด | N1 |
- คลิกสร้าง
- รอให้ระบบสร้างอินสแตนซ์ siege-vm
- สำหรับ siege-vm ให้คลิก SSH เพื่อเปิดใช้เทอร์มินัลและเชื่อมต่อ
- เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้ง Siege
sudo apt-get -y install siege
- หากต้องการจัดเก็บที่อยู่ IPv4 ของ HTTP Load Balancer ในตัวแปรสภาพแวดล้อม ให้เรียกใช้คำสั่งต่อไปนี้ โดยแทนที่ [LB_IP_v4] ด้วยที่อยู่ IPv4
export LB_IP=[LB_IP_v4]
- หากต้องการจำลองการโหลด ให้เรียกใช้คำสั่งต่อไปนี้
siege -c 250 http://$LB_IP
เอาต์พุตควรมีลักษณะดังนี้ (อย่าคัดลอก นี่คือตัวอย่างเอาต์พุต)
New configuration template added to /home/student/.siege Run siege -C to view the current settings in that file ** SIEGE 4.0.4 ** Preparing 250 concurrent users for battle. The server is now under siege...
- ใน Cloud Console ให้คลิกเมนูการนำทาง (
) แล้วคลิกบริการเครือข่าย > การปรับสมดุลโหลด - คลิก http-lb
- คลิกแท็บการตรวจสอบ ตรวจสอบการรับส่งข้อมูลระหว่างอเมริกาเหนือกับแบ็กเอนด์ทั้ง 2 เป็นเวลา 2-3 นาที
ในตอนแรก ระบบจะนำการรับส่งข้อมูลไปยัง us-east1-mig เท่านั้น แต่เมื่อ RPS เพิ่มขึ้น ระบบจะนำการรับส่งข้อมูลไปยัง europe-west1-mig ด้วย

ซึ่งแสดงให้เห็นว่าโดยค่าเริ่มต้น ระบบจะส่งต่อการเข้าชมไปยังแบ็กเอนด์ที่ใกล้ที่สุด แต่หากมีการโหลดสูงมาก ระบบจะกระจายการเข้าชมไปยังแบ็กเอนด์ต่างๆ

- กลับไปที่เทอร์มินัล SSH ของ siege-vm
- กด CTRL+C เพื่อหยุด Siege
7. สร้างนโยบายการจำกัดอัตราของ Cloud Armor
ในส่วนนี้ คุณจะใช้ Cloud Armor เพื่อปฏิเสธไม่ให้ siege-vm เข้าถึงตัวจัดสรรภาระงาน HTTP โดยการตั้งค่านโยบายการจำกัดอัตรา
- ใน Cloud Shell(ดู "เริ่มใช้ Cloud Shell" ในส่วน "การตั้งค่าและข้อกำหนด" เพื่อดูวิธีการใช้ Cloud Shell) ให้สร้างนโยบายความปลอดภัยผ่าน gcloud ดังนี้
gcloud compute security-policies create rate-limit-siege \
--description "policy for rate limiting"
- จากนั้นเพิ่มกฎการจำกัดอัตราดังนี้
gcloud beta compute security-policies rules create 100 \
--security-policy=rate-limit-siege \
--expression="true" \
--action=rate-based-ban \
--rate-limit-threshold-count=50 \
--rate-limit-threshold-interval-sec=120 \
--ban-duration-sec=300 \
--conform-action=allow \
--exceed-action=deny-404 \
--enforce-on-key=IP
- แนบนโยบายความปลอดภัยกับบริการแบ็กเอนด์ http-backend
gcloud compute backend-services update http-backend \
--security-policy rate-limit-siege –-global
- ในคอนโซล ให้ไปที่เมนูการนำทาง > ความปลอดภัยของเครือข่าย > Cloud Armor
- คลิก rate-limit-siege นโยบายของคุณควรมีลักษณะดังนี้

ยืนยันนโยบายความปลอดภัย
- กลับไปที่เทอร์มินัล SSH ของ siege-vm
- เรียกใช้ curl กับ IP ของ LB เพื่อยืนยันว่าคุณยังเชื่อมต่อกับ IP นั้นได้ และควรได้รับการตอบกลับ 200
curl http://$LB_IP
- ในเทอร์มินัล SSH ของ siege-vm ให้เรียกใช้คำสั่งต่อไปนี้เพื่อจำลองการโหลด
siege -c 250 http://$LB_IP
เอาต์พุตควรมีลักษณะดังนี้ (อย่าคัดลอก นี่คือตัวอย่างเอาต์พุต)
** SIEGE 4.0.4 ** Preparing 250 concurrent users for battle. The server is now under siege...
- สํารวจบันทึกนโยบายความปลอดภัยเพื่อดูว่ามีการบล็อกการเข้าชมนี้ด้วยหรือไม่
- ในคอนโซล ให้ไปที่เมนูการนำทาง > ความปลอดภัยของเครือข่าย > Cloud Armor
- คลิก rate-limit-siege
- คลิกบันทึก

- คลิกดูบันทึกนโยบาย
- ในหน้าการบันทึก ให้ล้างข้อความทั้งหมดในตัวอย่างการค้นหา
- เลือกทรัพยากรเป็น Cloud HTTP Load Balancer > http-lb-forwarding-rule > http-lb แล้วคลิกเพิ่ม หรือคุณจะคัดลอกและวางคำค้นหา MQL(ภาษาการค้นหาการตรวจสอบ) ด้านล่างลงในตัวแก้ไขคำค้นหาก็ได้
resource.type="http_load_balancer" resource.labels.forwarding_rule_name="http-lb-forwarding-rule" resource.labels.url_map_name="http-lb"
- ตอนนี้คลิกเรียกใช้การค้นหา
- ขยายรายการบันทึกในผลการค้นหา
- ขยาย httpRequest คำขอควรมาจากที่อยู่ IP ของ siege-vm หากไม่พบ ให้ขยายรายการบันทึกอื่น
- ขยาย jsonPayload
- ขยาย enforcedSecurityPolicy

โปรดสังเกตว่า configuredAction ตั้งค่าเป็น RATE_BASED_BAN โดยมีชื่อว่า rate-limit-siege
- หากต้องการตรวจสอบเพิ่มเติม ให้ไปที่เมนูการนำทาง (
) แล้วคลิกบริการเครือข่าย > การปรับสมดุลโหลด คลิก http-lb แล้วคลิกแท็บการตรวจสอบ

คุณจะเห็นการเข้าชมที่เกิดจากการโจมตีในกราฟ นอกจากนี้ คุณยังจะเห็นว่าการเข้าชมที่ถูกจำกัดอัตราจะไม่ไปถึงแบ็กเอนด์และจะถูกบล็อกโดยนโยบาย Cloud Armor
ยินดีด้วย คุณทำ Lab นี้เกี่ยวกับการจำกัดอัตราด้วย Cloud Armor เสร็จแล้ว
©2020 Google LLC สงวนลิขสิทธิ์ Google และโลโก้ของ Google เป็นเครื่องหมายการค้าของ Google LLC ชื่อบริษัทและผลิตภัณฑ์อื่นๆ ทั้งหมดอาจเป็นเครื่องหมายการค้าของบริษัทที่เป็นเจ้าของ
8. การล้างข้อมูลใน Lab
- ไปที่การรักษาความปลอดภัยของเครือข่าย >> Cloud Armor >> %ชื่อนโยบาย% แล้วเลือก "ลบ"

- ไปที่เครือข่าย >> บริการเครือข่าย >> การปรับสมดุลโหลด เลือกตัวจัดสรรภาระงานที่คุณสร้างขึ้น แล้วคลิกลบ

เลือกบริการแบ็กเอนด์และการตรวจสอบประสิทธิภาพการทำงานเป็นทรัพยากรเพิ่มเติมที่จะลบ -

- ไปที่เมนูการนำทาง (
) > Compute Engine > กลุ่มอินสแตนซ์ เลือกทั้งกลุ่มอินสแตนซ์ที่มีการจัดการ แล้วคลิกลบ -

ยืนยันการลบโดยพิมพ์ "ลบ" ในกล่องข้อความ
รอให้ระบบลบกลุ่มอินสแตนซ์ที่มีการจัดการ การดำเนินการนี้จะลบอินสแตนซ์ในกลุ่มด้วย คุณจะลบเทมเพลตได้หลังจากลบกลุ่มอินสแตนซ์แล้วเท่านั้น
- ไปที่เทมเพลตอินสแตนซ์จากแผงด้านซ้ายมือ** เลือกทั้งเทมเพลตอินสแตนซ์แล้วคลิกลบ -

- ไปที่อินสแตนซ์ VM จากแผงด้านซ้ายมือ** เลือกจุดไข่ปลาข้างอินสแตนซ์ siege-vm แล้วคลิกลบ

- ไปที่เมนูการนำทาง (
) > เครือข่าย VPC > ไฟร์วอลล์ เลือก default-allow-health-check แล้วคลิกลบ -

9. ยินดีด้วย
คุณใช้การจำกัดอัตรากับ Cloud Armor ได้สำเร็จแล้ว คุณกำหนดค่าตัวจัดสรรภาระงาน HTTP ที่มีแบ็กเอนด์ใน us-east1 และ europe-west1 จากนั้นคุณได้ทดสอบความทนทานของ Load Balancer ด้วย VM และยกเลิกการบล็อกที่อยู่ IP ผ่านการจำกัดอัตราด้วย Cloud Armor คุณสามารถสำรวจบันทึกนโยบายความปลอดภัยเพื่อระบุสาเหตุที่การเข้าชมถูกบล็อก
สิ่งที่เราได้พูดถึง
- วิธีตั้งค่าเทมเพลตอินสแตนซ์และสร้างกลุ่มอินสแตนซ์ที่มีการจัดการ
- วิธีตั้งค่าตัวจัดสรรภาระงาน HTTP
- วิธีสร้างนโยบายการจำกัดอัตราของ Cloud Armor
- วิธีตรวจสอบว่านโยบายการจำกัดอัตราทำงานตามที่ต้องการ
ขั้นตอนถัดไป
- ลองตั้งค่านโยบายการจำกัดอัตราตามช่วง IP ต้นทาง ตัวอย่างคำสั่งด้านล่าง
gcloud alpha compute security-policies rules create 105 \
--security-policy sec-policy \
--src-ip-ranges "1.2.3.0/24" \
--action throttle \
--rate-limit-threshold-count 100 \
--rate-limit-threshold-interval-sec 60 \
--conform-action allow \
--exceed-action deny-429 \
--enforce-on-key IP
- ลองตั้งค่านโยบายการจำกัดอัตราตามรหัสภูมิภาค ตัวอย่างคำสั่งด้านล่าง
gcloud alpha compute security-policies rules create 101 \
--security-policy sec-policy \
--expression "origin.region_code == 'US'" \
--action rate-based-ban \
--rate-limit-threshold-count 10 \
--rate-limit-threshold-interval-sec 60 \
--ban-duration-sec 300 \
--ban-threshold-count 1000 \
--ban-threshold-interval-sec 600 \
--conform-action allow \
--exceed-action deny-403 \
--enforce-on-key IP