ข้ามไปเนื้อหาหลัก
คอนเทนเนอร์· ~16 นาที· อัปเดตล่าสุด

ต่อภาพเครือข่ายทั้งหมด (+ Lab)

frontend → Service → backend + เปิดสู่ภายนอกด้วย Ingress

ถึงจุดนี้เราจะนำจิ๊กซอว์ทั้งหมดมาต่อรวมกัน เพื่อให้เห็นภาพระบบเต็มตั้งแต่ผู้ใช้เรียกเข้ามา จนถึงตัวแอปพลิเคชันที่รันอยู่

ประกอบร่างเข้าด้วยกัน

บทนี้คือประกอบร่างสิ่งที่เรียนมา: ผู้ใช้ → Ingress → Service (ClusterIP) → กลุ่ม Pod · และ frontend เรียก backend ผ่านชื่อ DNS ภายใน

Ingress ตัวเดียวแยก traffic ตาม path ไปหลาย Service

ผู้ใช้ (HTTPS)
Ingressexample.com
/app →
Service: web
Podsfrontend
/api →
Service: api
Podsbackend
ภาพรวม: Ingress หน้าสุด → Service → Pod · service ภายในคุยกันด้วยชื่อ DNS

🧪 Lab: เปิดเว็บให้เข้าถึงได้จริง

kubectl apply -f deployment.yaml   # Pod (app=web)
kubectl apply -f service.yaml      # Service ClusterIP หน้ากลุ่ม Pod
kubectl apply -f ingress.yaml      # กฎ routing

kubectl get svc,ingress            # ดูว่าได้ IP/ADDRESS ไหม
kubectl exec -it <pod> -- curl http://web   # ทดสอบเรียกด้วยชื่อ DNS
สร้างครบชุด แล้วทดสอบ

สรุป Key Takeaways

  • ภาพรวม: ผู้ใช้ → Ingress → Service → Pod · ภายในเรียกกันด้วยชื่อ DNS
  • บน minikube เปิด addon ingress ก่อนใช้งาน
  • debug service: เช็ค endpoints ว่าง? namespace? targetPort ตรงไหม

คำถามที่พบบ่อย

ต่อ service ไม่ติด ไล่เช็คยังไงเป็นลำดับ

ไล่จากใกล้ไปไกล: (1) pod รันและ Ready ไหม (2) Service selector ตรงกับ label ของ pod ไหม — เช็ค kubectl get endpoints ว่ามี IP ไหม (endpoints ว่าง = selector ผิด) (3) port/targetPort ตรงกับที่แอปฟังไหม (4) ลอง curl จาก pod อื่นด้วยชื่อ DNS — ลำดับนี้เจอสาเหตุเกือบทุกเคส

port, targetPort, nodePort สามตัวนี้ต่างกันยังไง

port = พอร์ตของตัว Service (คนอื่นเรียกเข้า) · targetPort = พอร์ตที่ "container ฟังจริง" · nodePort = พอร์ตบนเครื่อง node (เฉพาะ type NodePort) — ปัญหาคลาสสิก: แอปฟัง 8080 แต่ targetPort ใส่ 80 — traffic มาถึงแต่ไม่มีใครรับ

อ่านจบแล้วอย่าลืมทำเครื่องหมาย