ฉันพยายามทำความเข้าใจว่าการกำหนดเส้นทางทำงานอย่างไรใน AWS VPC ที่มีซับเน็ตสาธารณะ/ส่วนตัว

ฉันมีการตั้งค่าตามที่ amazon แนะนำด้วย ELB และ NAT ในซับเน็ตสาธารณะและเว็บเซิร์ฟเวอร์ในซับเน็ตส่วนตัว ฉันมีกลุ่มความปลอดภัย (SG) ที่กำหนดค่าตามhttp://blogs.aws.amazon.com/security/blog/tag/NATและทุกอย่างทำงานได้ตามที่คาดไว้ ยอดเยี่ยม!

สถาปัตยกรรมอ้างอิงพร้อมการกำหนดค่า Amazon VPC

สิ่งที่ฉันยังไม่เข้าใจคือวิธีการส่งคืนการตอบกลับ HTTP จากอินสแตนซ์ของเว็บเซิร์ฟเวอร์ในสถาปัตยกรรมด้านบน

ดังนั้นคำขอเว็บจึงมาจากอินเทอร์เน็ตสาธารณะผ่าน HTTP,80 ฮิต ELB และ ELB นำไปยัง IP ส่วนตัวของเว็บเซิร์ฟเวอร์ ตอนนี้เว็บเซิร์ฟเวอร์ต้องตอบกลับ จากสิ่งที่ฉันเข้าใจการตอบกลับจะผ่านพอร์ต TCP ที่สูงกว่าที่แตกต่างกัน (1024-65535) NAT SG อนุญาตเฉพาะการรับส่งข้อมูลขาออกผ่านพอร์ต 80 & 443 ดังนั้นคำตอบนี้จะกลับไปสู่อินเทอร์เน็ตสาธารณะได้อย่างไร ไม่สามารถผ่าน NAT ได้ นี่หมายความว่าการตอบกลับจะส่งกลับผ่าน ELB หรือไม่ ไดอะแกรม Amazon ไม่ได้ระบุว่าลูกศรบอกทิศทางการรับส่งข้อมูลของ ELB เป็นแบบสองทิศทาง และเอกสารประกอบของ ELB ไม่ได้ระบุว่า ELB มีพฤติกรรมเหมือน NAT แบบระบุสถานะ ทำมัน?

answer

ลูกศรในไดอะแกรมระบุทิศทางของการสร้างการเชื่อมต่อเท่านั้น ไม่ใช่การไหลของการจราจร

ใช่ การรับส่งข้อมูลขากลับจะย้อนกลับผ่าน ELB

แต่ไม่ใช่ NAT แบบเก็บสถานะ แต่เป็นพร็อกซีการเชื่อมต่อ TCP เครื่อง ELB ยอมรับการเชื่อมต่อ TCP บนพอร์ตการรับฟังที่กำหนดค่าไว้ ยกเลิกเซสชัน SSL หากกำหนดค่าไว้ และสร้างการเชื่อมต่อ TCP ใหม่ไปยังเซิร์ฟเวอร์ส่วนหลัง หากผู้ฟังได้รับการกำหนดค่าสำหรับ HTTP ELB จะทำงานในโหมดแยกวิเคราะห์ บันทึกข้อมูล และส่งต่อคำขอ HTTP ไปยังส่วนหลัง มิฉะนั้นจะเป็นแบบไม่เชื่อเรื่องพระเจ้า สร้างการเชื่อมต่อ TCP ใหม่ 1:1 กับส่วนหลัง สำหรับการเชื่อมต่อขาเข้าแต่ละครั้ง และ "การผูกไปป์เข้าด้วยกัน" (โดยไม่มีการรับรู้หรือแก้ไขระดับ HTTP)

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

ในโหมด http ELB จะเพิ่ม (หรือต่อท้าย) X-Forwarded-Forส่วนหัวเพื่อให้แอปพลิเคชันของคุณสามารถระบุ IP ของไคลเอ็นต์เดิมได้ รวมทั้งX-Forwarded-Proto: [ http | https ]ระบุว่าการเชื่อมต่อไคลเอ็นต์ใช้ SSL หรือไม่ และX-Forwarded-Portเพื่อระบุพอร์ตส่วนหน้า


อัปเดต:ข้อมูลข้างต้นอ้างอิงถึงประเภทของตัวโหลดบาลานซ์ที่ตอนนี้รู้จักกันในชื่อ "ELB Classic" หรือ ELB/1.0 (พบในสตริง User Agent ที่ส่งด้วยการตรวจสอบสภาพ HTTP)

ตัวสร้างสมดุล Layer 7, Application Load Balancer หรือ ELB/2.0 ที่ใหม่กว่าทำงานในลักษณะเดียวกันโดยคำนึงถึงกระแสการรับส่งข้อมูล ความสามารถของ Layer 4 ("transparent" TCP) จะถูกลบออกจาก ALB และคุณลักษณะของเลเยอร์ 7 ที่ได้รับการปรับปรุงอย่างมาก

โหลดบาลานเซอร์ชนิดใหม่ล่าสุด Network Load Balancer คือเลเยอร์ 3 บาลานเซอร์ ซึ่งแตกต่างจากอีกสองรายการอื่น มันทำงานเหมือนกับ NAT แบบไดนามิก การจัดการการเชื่อมต่อขาเข้า (ที่มาจากภายนอก) เท่านั้น การแมป source-addr+port ผ่าน EIP-addr+port ไปยัง instance-private-ip:adde+port - ด้วย EIP ผูกกับ "บาลานเซอร์" -- และไม่เหมือนกับบาลานเซอร์สองประเภทอื่น ๆ อินสแตนซ์จะต้องอยู่บนเครือข่ายย่อยสาธารณะ และใช้ IP สาธารณะของตนเองสำหรับสิ่งนี้

ตามแนวคิดแล้ว Network Load Balancer ดูเหมือนจะปรับเปลี่ยนพฤติกรรมของ Internet Gateway จริงๆ ซึ่งก็คือ ตัวมันเอง เป็นอ็อบเจ็กต์เชิงตรรกะที่ไม่สามารถปิดใช้งาน แทนที่ หรือประสบกับความล้มเหลวในแง่ที่มีความหมายใดๆ ซึ่งตรงกันข้ามกับ ELB และ ALB ซึ่งทำงานบนอินสแตนซ์ EC2 ที่ "ซ่อน" อยู่จริง NLB ทำงานบนโครงสร้างพื้นฐานของเครือข่ายด้วยตัวมันเองโดยลักษณะที่ปรากฏทั้งหมด

ตามเอกสารประกอบของ AWS สำหรับ NLB เป็นเลเยอร์ 4 ไม่ใช่เลเยอร์ 3 นอกจากนี้ แบ็กเอนด์หรือเซิร์ฟเวอร์เป้าหมายไม่จำเป็นต้องอยู่บนเครือข่ายย่อยสาธารณะ ตามความเป็นจริง ช่วงที่อยู่ IP ของกลุ่มเป้าหมายจะต้องเป็นอย่างใดอย่างหนึ่งต่อไปนี้: ประเภทเป้าหมายที่เป็นไปได้ดังต่อไปนี้:

อินสแตนซ์ เป้าหมายถูกระบุโดย ID อินสแตนซ์

ip เป้าหมายถูกระบุโดยที่อยู่ IP

เมื่อประเภทเป้าหมายคือ ip คุณสามารถระบุที่อยู่ IP จากหนึ่งในบล็อก CIDR ต่อไปนี้:

ซับเน็ตของ VPC สำหรับกลุ่มเป้าหมาย

10.0.0.0/8 (RFC 1918)

100.64.0.0/10 (RFC 6598)

172.16.0.0/12 (RFC 1918)

192.168.0.0/16 (RFC 1918)

สำคัญ

คุณไม่สามารถระบุที่อยู่ IP ที่กำหนดเส้นทางแบบสาธารณะได้

ฉันหวังว่านี่จะช่วยได้.