ข้ามไปเนื้อหาหลัก
คอนเทนเนอร์· ~15 นาที

ประเภทของ Service (ClusterIP / NodePort / LoadBalancer)

เลือกวิธีเปิดให้เข้าถึงจากในคลัสเตอร์หรือจากภายนอก

เปรียบเทียบให้เห็นภาพ

เทียบระดับการเปิดประตู: ClusterIP = ประตูภายในออฟฟิศ (คนในเท่านั้น), NodePort = เปิดหน้าต่างเลขห้องเฉพาะให้คนนอกปีนเข้า, LoadBalancer = จ้างประชาสัมพันธ์หน้าตึกคอยพาลูกค้าเข้ามา

ยิ่งลงล่างยิ่งเปิดกว้างสู่ภายนอก (สร้างต่อยอดกัน)

ClusterIPภายในคลัสเตอร์เท่านั้น
NodePortเปิดพอร์ตเดียวกันบนทุก node
LoadBalancerLB จริงจาก cloud หน้าสุด

LoadBalancer → ใช้ NodePort → ใช้ ClusterIP เบื้องหลัง

ClusterIP (ในคลัสเตอร์) → NodePort (เปิดพอร์ตทุก node) → LoadBalancer (LB ของ cloud หน้าสุด)
  • ClusterIP (ค่าเริ่มต้น) — เข้าถึงได้เฉพาะภายในคลัสเตอร์ เหมาะให้ service คุยกันเอง (เช่น frontend → backend)
  • NodePort — เปิดพอร์ตเดียวกันบนทุก node (ช่วง 30000–32767) ให้เข้าจากภายนอกผ่าน <NodeIP>:<port> เหมาะทดสอบ/on-prem
  • LoadBalancer — ขอload balancer จริงจาก cloud (เช่น AWS ELB) มาไว้หน้าสุด เหมาะเปิดสู่อินเทอร์เน็ตใน production บน cloud
  • ExternalName — แมป service เป็นชื่อ DNS ภายนอก (ไม่มี proxy) ใช้ชี้ไปบริการนอกคลัสเตอร์
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  type: ClusterIP          # เปลี่ยนเป็น NodePort/LoadBalancer ได้
  selector:
    app: web               # ส่ง traffic ให้ Pod ที่ label app=web
  ports:
    - port: 80             # พอร์ตที่ Service เปิด
      targetPort: 8080     # พอร์ตของ container ปลายทาง
service.yaml — ClusterIP หน้ากลุ่ม Pod app=web

สรุป Key Takeaways

  • ClusterIP = ภายในเท่านั้น (ดีฟอลต์) · NodePort = เปิดพอร์ตทุก node · LoadBalancer = LB จริงจาก cloud
  • ทั้งหมดสร้างต่อยอดกัน: LoadBalancer → NodePort → ClusterIP
  • production บน cloud เปิดสู่โลกภายนอกด้วย LoadBalancer (มักผ่าน Ingress)
อ่านจบแล้วอย่าลืมทำเครื่องหมาย