1. บทนำ
ระบบทำให้การจัดสรรภาระงาน HTTP(S) ของ Google Cloud ใช้งานได้ที่ Edge ของเครือข่าย Google ในจุดแสดงตัวตน (POP) ของ Google ทั่วโลก การรับส่งข้อมูลของผู้ใช้ซึ่งส่งไปยังตัวจัดสรรภาระงาน HTTP(S) จะป้อน POP ที่อยู่ใกล้กับผู้ใช้มากที่สุด จากนั้นจะมีการจัดสรรภาระงานผ่านเครือข่ายทั่วโลกของ Google ไปยังแบ็กเอนด์ที่ใกล้ที่สุดที่มีความจุเพียงพอ
Cloud Armor คือระบบตรวจจับการปฏิเสธการให้บริการและไฟร์วอลล์เว็บแอปพลิเคชัน (WAF) แบบกระจายของ Google Cloud Armor จะจับคู่กับตัวจัดสรรภาระงาน HTTP ของ Google Cloud อย่างใกล้ชิดและช่วยให้คุณตรวจสอบการรับส่งข้อมูลขาเข้าสำหรับคำขอที่ไม่ต้องการได้ ฟีเจอร์การจำกัดอัตราของบริการนี้ช่วยให้คุณควบคุมการรับส่งข้อมูลไปยังทรัพยากรแบ็กเอนด์โดยอิงตามจำนวนคำขอและป้องกันไม่ให้การรับส่งข้อมูลที่ไม่ต้อนรับใช้ทรัพยากรในเครือข่าย Virtual Private Cloud (VPC) ได้
ในห้องทดลองนี้ คุณจะได้กำหนดค่าตัวจัดสรรภาระงาน HTTP ด้วยแบ็กเอนด์ส่วนกลางดังที่แสดงในแผนภาพด้านล่าง จากนั้นคุณจะต้องทดสอบตัวจัดสรรภาระงาน และเพิ่มนโยบายการจำกัดอัตราของ 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 ของระบบคลาวด์ การใช้งาน 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 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, ภายใน, RDP และ SSH ที่มีอยู่ โปรเจ็กต์ Google Cloud แต่ละโปรเจ็กต์จะเริ่มต้นด้วยเครือข่ายเริ่มต้นและกฎไฟร์วอลล์เหล่านี้
- คลิกสร้างกฎไฟร์วอลล์
- ตั้งค่าต่อไปนี้ และปล่อยให้ค่าอื่นๆ เป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (พิมพ์ค่าหรือเลือกตัวเลือกที่ระบุ) |
ชื่อ | default-allow-health-check |
เครือข่าย | ค่าเริ่มต้น |
เป้าหมาย | แท็กเป้าหมายที่ระบุ |
แท็กเป้าหมาย | http-server |
ตัวกรองแหล่งที่มา | ช่วง IP |
ช่วง IP ต้นทาง | 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
- สำหรับ Series ให้เลือก N1
- คลิก Networking, Disks, Security, Management , Sole-Tenancy
- ไปที่ส่วนการจัดการ -
- ในส่วน Metadata ให้คลิก Add Item และระบุข้อมูลต่อไปนี้
คีย์ | ค่า |
startup-script-url | gs://cloud-training/gcpnet/httplb/startup.sh |
- คลิก Networking
- ตั้งค่าต่อไปนี้และปล่อยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (พิมพ์ค่าหรือเลือกตัวเลือกที่ระบุ) |
เครือข่าย (ภายในอินเทอร์เฟซเครือข่าย) | ค่าเริ่มต้น |
เครือข่ายย่อย (ใต้อินเทอร์เฟซเครือข่าย) | ค่าเริ่มต้น (us-east1) |
แท็กเครือข่าย | http-server |
- คลิกสร้าง
- รอให้มีการสร้างเทมเพลตอินสแตนซ์
ตอนนี้ให้สร้างเทมเพลตอินสแตนซ์อีกรายการสำหรับ subnet-b โดยคัดลอก us-east1-template ดังนี้
- คลิก us-east1-template แล้วคลิกตัวเลือกคัดลอกที่ด้านบน
- สำหรับชื่อ ให้พิมพ์ europe-west1-template
- คลิก Networking, Disks, Security, Management , Sole-Tenancy
- คลิก Networking
- ในส่วนอินเทอร์เฟซเครือข่าย ให้แก้ไขอินเทอร์เฟซเริ่มต้น สำหรับซับเน็ต ให้เลือกค่าเริ่มต้น (europe-west1)
- คลิกสร้าง
สร้างกลุ่มอินสแตนซ์ที่มีการจัดการ
สร้างกลุ่มอินสแตนซ์ที่มีการจัดการใน us-east1 และอีกกลุ่มใน europe-west1
- ขณะยังอยู่ใน Compute Engine ให้คลิกกลุ่มอินสแตนซ์ในเมนูด้านซ้าย
- คลิกสร้างกลุ่มอินสแตนซ์ เลือกกลุ่มอินสแตนซ์ที่มีการจัดการใหม่ (ไม่เก็บสถานะ)
- ตั้งค่าต่อไปนี้ และปล่อยให้ค่าอื่นๆ เป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (พิมพ์ค่าหรือเลือกตัวเลือกที่ระบุ) |
ชื่อ | US-east1-Mig |
ตำแหน่ง | หลายโซน |
ภูมิภาค | US-east1 |
เทมเพลตอินสแตนซ์ | เทมเพลต us-east1 |
การปรับขนาดอัตโนมัติ > นโยบายการปรับขนาดอัตโนมัติ > คลิกไอคอนดินสอ > ประเภทเมตริก | การใช้งาน CPU |
การใช้งาน CPU เป้าหมาย | 80 คลิกเสร็จสิ้น |
ระยะเวลาพัก | 45 |
จำนวนอินสแตนซ์ขั้นต่ำ | 1 |
จำนวนอินสแตนซ์สูงสุด | 5 |
- คลิกสร้าง
ทำขั้นตอนเดียวกันนี้ซ้ำเพื่อสร้างกลุ่มอินสแตนซ์ที่ 2 สำหรับ europe-west1-mig ใน europe-west1 ดังนี้
- คลิกสร้างกลุ่มอินสแตนซ์
- ตั้งค่าต่อไปนี้ และปล่อยให้ค่าอื่นๆ เป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (พิมพ์ค่าหรือเลือกตัวเลือกที่ระบุ) |
ชื่อ | ยุโรป-ตะวันตก1-มิก |
ตำแหน่ง | หลายโซน |
ภูมิภาค | ยุโรป-ตะวันตก1 |
เทมเพลตอินสแตนซ์ | เทมเพลตยุโรป-ตะวันตก1 |
การปรับขนาดอัตโนมัติ > นโยบายการปรับขนาดอัตโนมัติ > คลิกไอคอนดินสอ > ประเภทเมตริก | การใช้งาน CPU |
การใช้งาน CPU เป้าหมาย | 80 คลิกเสร็จสิ้น |
ระยะเวลาพัก | 45 |
จำนวนอินสแตนซ์ขั้นต่ำ | 1 |
จำนวนอินสแตนซ์สูงสุด | 5 |
- คลิกสร้าง
5. กำหนดค่าตัวจัดสรรภาระงาน HTTP
กำหนดค่าตัวจัดสรรภาระงาน HTTP เพื่อสร้างสมดุลให้กับการรับส่งข้อมูลระหว่างแบ็กเอนด์ 2 รายการ (us-east1-mig ใน us-east1 และ europe-west1-mig ใน europe-west1) ดังที่แสดงในแผนภาพเครือข่าย
เริ่มต้นการกำหนดค่า
- ใน Cloud Console ให้คลิกเมนูการนำทาง ( ) > คลิกบริการเครือข่าย > การจัดสรรภาระงาน แล้วคลิกสร้างตัวจัดสรรภาระงาน
- ใน HTTP(S) Load Balancing ให้คลิกเริ่มการกำหนดค่า
- เลือกจากอินเทอร์เน็ตไปยัง VM ของฉัน ตัวจัดสรรภาระงาน HTTP(S) แบบคลาสสิก แล้วคลิกต่อไป
- ตั้งชื่อเป็น http-lb
กำหนดค่าแบ็กเอนด์
บริการแบ็กเอนด์กำหนดเส้นทางการจราจรของข้อมูลขาเข้าไปยังแบ็กเอนด์ที่แนบอย่างน้อย 1 รายการ แบ็กเอนด์แต่ละรายการประกอบด้วยกลุ่มอินสแตนซ์และข้อมูลเมตาความสามารถในการแสดงผลเพิ่มเติม
- คลิกการกำหนดค่าแบ็กเอนด์
- สำหรับบริการแบ็กเอนด์และ ที่เก็บข้อมูลแบ็กเอนด์ ให้คลิกสร้างบริการแบ็กเอนด์
- ตั้งค่าต่อไปนี้ และปล่อยให้ค่าอื่นๆ เป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | มูลค่า (เลือกตัวเลือกตามที่ระบุไว้) |
ชื่อ | http-backend |
กลุ่มอินสแตนซ์ | US-east1-Mig |
โอนย้ายหมายเลข | 80 |
โหมดการจัดสรรภาระงาน | ให้คะแนน |
RPS สูงสุด | 50 (ต่ออินสแตนซ์) |
กำลังการผลิต | 100 |
- คลิกเสร็จสิ้น
- คลิกเพิ่มแบ็กเอนด์
- ตั้งค่าต่อไปนี้ และปล่อยให้ค่าอื่นๆ เป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | มูลค่า (เลือกตัวเลือกตามที่ระบุไว้) |
กลุ่มอินสแตนซ์ | ยุโรป-ตะวันตก1-มิก |
โอนย้ายหมายเลข | 80 |
โหมดการจัดสรรภาระงาน | การใช้งาน |
การใช้งานแบ็กเอนด์สูงสุด | 80 |
กำลังการผลิต | 100 |
- คลิกเสร็จสิ้น
- สำหรับการตรวจสอบประสิทธิภาพการทำงาน ให้เลือกสร้างการตรวจสอบประสิทธิภาพการทำงาน
- ตั้งค่าต่อไปนี้ และปล่อยให้ค่าอื่นๆ เป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | มูลค่า (เลือกตัวเลือกตามที่ระบุไว้) |
ชื่อ | http-health-check |
โปรโตคอล | TCP |
พอร์ต | 80 |
- คลิกบันทึก
- เลือกช่องเปิดใช้การบันทึก
- ตั้งค่าอัตราการสุ่มตัวอย่างเป็น 1:
- คลิกสร้างเพื่อสร้างบริการแบ็กเอนด์
กำหนดค่าฟรอนท์เอนด์
กฎของโฮสต์และเส้นทางจะกำหนดทิศทางการรับส่งข้อมูลของคุณ เช่น คุณกำหนดเส้นทางการเข้าชมวิดีโอไปยังแบ็กเอนด์หนึ่งและส่งการเข้าชมแบบคงที่ไปยังแบ็กเอนด์อื่นได้ แต่คุณไม่ได้กำหนดค่ากฎของโฮสต์และเส้นทางในห้องทดลองนี้
- คลิกการกำหนดค่าฟรอนท์เอนด์
- ระบุข้อมูลต่อไปนี้และให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น
พร็อพเพอร์ตี้ | ค่า (พิมพ์ค่าหรือเลือกตัวเลือกที่ระบุ) |
โปรโตคอล | 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 โดยไปที่ http://[LB_IP_v6] อย่าลืมแทนที่ [LB_IP_v6] ด้วยที่อยู่ IPv6 ของตัวจัดสรรภาระงาน
ทดสอบความเครียดในตัวจัดสรรภาระงาน HTTP
สร้าง VM ใหม่เพื่อจำลองโหลดบนตัวจัดสรรภาระงาน HTTP โดยใช้การโจมตี จากนั้นพิจารณาว่าการรับส่งข้อมูลมีความสมดุลระหว่างแบ็กเอนด์ทั้งสองหรือไม่เมื่อมีภาระงานสูง
- ในคอนโซล ให้ไปที่เมนูการนำทาง ( ) > 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 ในตัวแปรสภาพแวดล้อม ให้เรียกใช้คำสั่งต่อไปนี้ โดยแทนที่ [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 เพื่อหยุดการโจมตี
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
- การจำกัดอัตราการคลิก นโยบายของคุณควรมีลักษณะดังต่อไปนี้
ยืนยันนโยบายความปลอดภัย
- กลับไปที่เทอร์มินัล SSH ของ siege-vm
- เรียกใช้ curl กับ IP ของ LB เพื่อยืนยันว่าคุณยังคงเชื่อมต่อได้ และควรได้รับการตอบกลับ 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 > http-lb-Forwarding-rule > http-lb แล้วคลิกเพิ่ม หรือด้านล่างคือ Query MQL(การตรวจสอบภาษาข้อความค้นหา) ซึ่งคุณสามารถคัดลอกและวางลงในตัวแก้ไข Query -
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
- ขยาย forceSecurityPolicy
โปรดสังเกตว่าการดำเนินการที่กำหนดค่าไว้ตั้งค่าเป็น RATE_BASED_BAN โดยมีชื่อ rate-limit-siege
- สำหรับการตรวจสอบเพิ่มเติม ให้ไปที่เมนูการนำทาง ( ) คลิกบริการเครือข่าย > การจัดสรรภาระงาน คลิก http-lb คลิกแท็บการตรวจสอบ
คุณสามารถดูการเข้าชมที่ถูกโจมตีได้ในกราฟ นอกจากนี้ โปรดทราบว่าอัตราการรับส่งข้อมูลแบบจำกัดจะไม่สามารถเข้าถึงแบ็กเอนด์และถูกบล็อกโดยนโยบาย Cloud Armor
ยินดีด้วย คุณเสร็จสิ้นห้องทดลองนี้เกี่ยวกับการจำกัดอัตราด้วย Cloud Armor แล้ว
©2020 Google LLC สงวนลิขสิทธิ์ Google และโลโก้ของ Google เป็นเครื่องหมายการค้าของ Google LLC ชื่อบริษัทและผลิตภัณฑ์อื่นๆ ทั้งหมดอาจเป็นเครื่องหมายการค้าของบริษัทที่เป็นเจ้าของ
8. ทำความสะอาดห้องปฏิบัติการ
- ไปที่ Network Security >> ชุดเกราะระบบคลาวด์ >> %POLICY NAME% และเลือกลบ -
- ไปที่เครือข่าย >> บริการเครือข่าย >> การจัดสรรภาระงาน เลือกตัวจัดสรรภาระงานที่คุณสร้างและคลิกลบ
เลือกบริการแบ็กเอนด์และการตรวจสอบประสิทธิภาพการทำงานเป็นทรัพยากรเพิ่มเติมที่จะลบ
- ไปที่เมนูการนำทาง ( ) > Compute Engine > กลุ่มอินสแตนซ์ เลือกทั้งอินสแตนซ์ที่มีการจัดการ แล้วคลิกลบ -
ยืนยันการลบโดยพิมพ์ "ลบ" ลงในกล่องข้อความ
รอให้อินสแตนซ์ที่มีการจัดการถูกลบ การดำเนินการนี้จะลบอินสแตนซ์ในกลุ่มด้วย คุณจะลบเทมเพลตได้หลังจากที่ลบอินสแตนซ์แล้วเท่านั้น
- ไปที่เทมเพลตอินสแตนซ์จากแผงด้านซ้าย**** เลือกทั้งเทมเพลตของอินสแตนซ์แล้วคลิกลบ -
- ไปที่อินสแตนซ์ VM จากแผงด้านซ้าย**** เลือกจุดไข่ปลาข้างอินสแตนซ์ siege-vm แล้วคลิกลบ
- ไปที่เมนูการนำทาง ( ) > เครือข่าย VPC > ไฟร์วอลล์ เลือก default-allow-health-check แล้วคลิก Delete -
9. ยินดีด้วย
คุณใช้งานการจำกัดอัตราด้วย Cloud Armor สำเร็จแล้ว คุณได้กำหนดค่าตัวจัดสรรภาระงาน HTTP ที่มีแบ็กเอนด์ใน us-east1 และ europe-west1 จากนั้นก็ทดสอบตัวจัดสรรภาระงานด้วย 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