เกี่ยวกับ Codelab นี้
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