ข้ามไปที่เนื้อหา
กลับหน้าบล็อก
22 กรกฎาคม 2569•8 นาที
ไร้ปัญหาพอร์ตชนกัน: สถาปัตยกรรม Direct IP Container Sandbox ระดับสเกล
ทางเทคนิค

ไร้ปัญหาพอร์ตชนกัน: สถาปัตยกรรม Direct IP Container Sandbox ระดับสเกล

บทความนี้เกี่ยวกับ Autobahn Bot ซึ่งตอนนี้หยุดปรับปรุงชั่วคราว สิ่งที่บทความเล่าจึงยังใช้งานไม่ได้จนกว่าจะเปิดอีกครั้ง หน้าผลิตภัณฑ์

การรันแอปพลิเคชันของผู้ใช้หลายพันโปรเจกต์บนเซิร์ฟเวอร์เดียวมักพังเพราะพอร์ตเต็ม นี่คือวิธีที่เราออกแบบ Docker Bridge แยกอิสระพร้อมเราต์ไปยัง IP ของ Container โดยตรง เพื่อรองรับได้มากกว่า 65,000 เวิร์กโหลดอย่างปลอดภัย

Autobahn Team
Autobahn Teamทีมวิศวกรรมหลัก
Platform Team
22 กรกฎาคม 2569
8 นาที
#docker#networking#security#devops#infrastructure

ไร้ปัญหาพอร์ตชนกัน: สถาปัตยกรรม Direct IP Container Sandbox ระดับสเกล

เมื่อคุณต้องให้บริการระบบพรีวิวแอปพลิเคชันสดๆ พร้อมกันแก่นักพัฒนาหลายพันคน วิธีการจัดการระบบเครือข่าย Container แบบเดิมๆ มักจะชนเพดานอย่างรวดเร็ว นั่นคือปัญหา พอร์ตบนเครื่องแม่ข่ายเต็ม (Host Port Exhaustion)

หากทุกแอปพลิเคชันของผู้ใช้ที่รันบน https://{subdomain}.autobahn.bot ต้องจองพอร์ตที่ไม่ซ้ำกันบนโฮสต์ (เช่น 3001, 3002, 3003) คุณจะต้องเผชิญกับอุปสรรคใหญ่: 1. Ephemeral Port ของ Linux จะหมดลงอย่างรวดเร็วเมื่อมีการใช้งานพร้อมกันหนาแน่น 2. เกิดปัญหา Race Condition ขณะสร้างและทำลาย Container ชั่วคราวอย่างรวดเร็ว 3. ความเสี่ยงด้านความปลอดภัย: พอร์ตใดก็ตามที่เปิดทิ้งไว้บน 0.0.0.0 ย่อมเสี่ยงต่อการถูกเข้าถึงโดยไม่ได้รับอนุญาต

นี่คือวิธีที่ทีมวิศวกรของเราแก้ปัญหานี้ เพื่อให้รองรับ Sandbox ที่แยกตัวเป็นอิสระได้หลายหมื่นตัวบนเครื่อง Hetzner VPS อย่างราบรื่น

สถาปัตยกรรม: Custom Docker Bridge & Direct IP Routing

แทนที่จะนำพอร์ตของ Container มาผูกกับพอร์ตของเครื่องโฮสต์ เราได้สร้าง Docker Network Bridge แยกพิเศษชื่อ `sandbox-net` ที่มีช่วง IP ส่วนตัวระดับ CIDR (172.28.0.0/16)

Subnet ส่วนตัวนี้มอบ IP เฉพาะได้มากถึง 65,534 หมายเลข

เมื่อผู้ใช้เปิดเซสชันเพื่อเริ่มทำโปรเจกต์: 1. Container Sandbox จะถูกสร้างขึ้นบน sandbox-net พร้อมรับ IP ภายในแบบไดนามิกทันที (เช่น 172.28.0.42) 2. ภายใน Container แอปพลิเคชันจะเปิดรับการเชื่อมต่อผ่านพอร์ตมาตรฐานปกติ (เช่น 3000) 3. ไม่มีการผูกพอร์ตใดๆ เข้ากับเครื่องโฮสต์ ตารางพอร์ตของเครื่องเซิร์ฟเวอร์หลักจึงไม่ถูกแตะต้องเลยแม้แต่น้อย

การกระจายคำขอผ่าน Nginx Dynamic Upstream

เมื่อมีคำขอจากผู้ใช้ภายนอกเข้ามาที่ https://project-alpha.autobahn.bot แล้ว Nginx รู้ได้อย่างไรว่าจะส่งต่อไปยังคอนเทนเนอร์ 172.28.0.42:3000?

Nginx Reverse Proxy ด้านหน้าของเราจะแปลงชื่อ Subdomain ผ่าน Cache ตรวจสอบภายในแบบไดนามิก และส่งต่อข้อมูลไปยัง IP ส่วนตัวของ Container บน Docker Bridge โดยตรง:

nginx
# Direct Container IP Routing without Host Port Binding
location / {
    proxy_pass http://$target_container_ip:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
}

เนื่องจาก Nginx และ Container ทั้งหมดอยู่ในอินเทอร์เฟซเน็ตเวิร์กบริดจ์เดียวกัน ข้อมูลจึงเดินทางระหว่างกันด้วย Latency ต่ำระดับเศษส่วนของมิลลิวินาที

ปราการความปลอดภัย 6 ชั้น (6-Layer Security Boundary)

การแยกเน็ตเวิร์กเป็นเพียงครึ่งหนึ่งของความสำเร็จ แต่ละ Container Sandbox ยังได้รับการปกป้องด้วยเกราะป้องกันความปลอดภัยถึง 6 ชั้น:

  1. 1Namespace Isolation: แยกกระบวนการ PID, Mount, IPC และ Network ชัดเจน
  2. 2Cgroups Resource Limits: กำหนดโควตา RAM เคร่งครัด (ค่าเริ่มต้น 512MB) และจำกัด CPU เพื่อป้องกันไม่ให้มีแอปใดดึงทรัพยากรจนเครื่องค้าง
  3. 3Restricted Network Egress: Container สามารถเรียกออกภายนอกได้เฉพาะพอร์ต HTTP/HTTPS ไปยัง Registry ที่ปลอดภัยเท่านั้น การสแกน TCP ทั่วไปและการเข้าถึง LAN ภายในจะถูกบล็อกที่ระดับ iptables
  4. 4Read-Only Root Filesystem: สิทธิ์การเขียนข้อมูลถูกจำกัดให้อยู่เฉพาะในไดเรกทอรีชั่วคราว /workspace
  5. 5Seccomp Security Profiles: ปิดกั้น System Call ของ Linux ที่อาจเป็นอันตราย
  6. 6Environment Sanitization: กุญแจลับของเครื่องแม่ข่ายและ Metadata Endpoint ของระบบคลาวด์จะไม่สามารถเข้าถึงได้โดยสิ้นเชิง

ผลลัพธ์บนสภาพแวดล้อม Production

สถาปัตยกรรม Direct IP นี้ทำงานบนระบบ Production มาตั้งแต่ต้นปี 2026 ปัญหาพอร์ตชนกันลดลงเหลือศูนย์ เวลาในการเปิดเครื่อง Container ลดลงเหลือไม่ถึง 1.8 วินาทีด้วยการใช้ Base Image ที่เตรียมพร้อมไว้ล่วงหน้า และความเสถียรของระบบพรีวิวสูงถึง 99.98%

Autobahn Team
Autobahn Teamทีมวิศวกรรมหลัก

ทีมวิศวกรรมหลักของ Autobahn ส่งมอบแซนด์บ็อกซ์ที่เสถียรและโครงสร้างพื้นฐานระดับ Edge

อ่านต่อ

View all articles
บันทึกวิศวกรรมอย่างตรงไปตรงมา: ทำไมเราถึงตัดสินใจพักปรับปรุง Autobahn Bot เพื่อยกเครื่องระบบใหม่
ทางเทคนิค6 นาที

บันทึกวิศวกรรมอย่างตรงไปตรงมา: ทำไมเราถึงตัดสินใจพักปรับปรุง Autobahn Bot เพื่อยกเครื่องระบบใหม่

ความโปร่งใสทางวิศวกรรม: เหตุใดเราจึงตัดสินใจหยุดรับการสร้างแอปใหม่บน app.autobahn.bot ชั่วคราว สิ่งที่เราได้เรียนรู้จากแอปที่ผู้คนสร้างขึ้น และก้าวต่อไป

Autobahn Team27 กันยายน 2569
ความทรงจำข้ามเดือน: เจาะลึกโหมด Oracle ที่สังเคราะห์หลักการสถาปัตยกรรมอัตโนมัติ
ทางเทคนิค7 นาที

ความทรงจำข้ามเดือน: เจาะลึกโหมด Oracle ที่สังเคราะห์หลักการสถาปัตยกรรมอัตโนมัติ

การค้นหาข้อความแบบเดิมให้เพียงเศษเสี้ยวบทสนทนาที่ไม่ปะติดปะต่อ โหมด Oracle ใน External Brain เชื่อมโยงบริบทประวัติการทำงานหลายเดือนให้กลายเป็นเหตุผลเชิงสถาปัตยกรรมที่อ้างอิงได้จริง

Alex Chen15 กันยายน 2569
External Brain: ทำไมเราถึงเลิกต่อพ่วงข้อความคำสั่ง แล้วให้ผู้ช่วย AI เรียกใช้เครื่องมือแทน
ทางเทคนิค7 นาที

External Brain: ทำไมเราถึงเลิกต่อพ่วงข้อความคำสั่ง แล้วให้ผู้ช่วย AI เรียกใช้เครื่องมือแทน

การยัดเยียดกฎเกณฑ์และความจำเดิมใส่เข้าไปในคำสั่งตั้งต้นมีแต่จะทำให้ระบบช้าและสับสน นี่คือเหตุผลที่ External Brain มอบเครื่องมือ 14 ตัวให้ผู้ช่วย AI เรียกหากฎที่ต้องใช้ เฉพาะตอนที่ต้องใช้

Alex Chen31 สิงหาคม 2569