DNS และ Service Discovery ในคลัสเตอร์
เรียก service ด้วยชื่อแทน IP ผ่าน DNS ภายใน
Service Discovery: คือ กลไกที่ทำให้ระบบต่างๆ สามารถ "ค้นหา" และ "คุย" กันเองได้ โดยใน Kubernetes จะใช้ระบบ DNS ภายในเพื่อให้เรียกหากันด้วยชื่อแทนการจำ IP
DNS ภายในคลัสเตอร์เหมือนสมุดโทรศัพท์ของออฟฟิศ — อยากคุยกับแผนกบัญชีก็โทรหา "บัญชี" ไม่ต้องจำเบอร์ · Pod เรียก service อื่นด้วยชื่อ ระบบแปลงเป็น IP ให้เอง
K8s รัน DNS ภายใน (CoreDNS) ที่ให้ทุก Service มีชื่อโดเมนคงที่ · Pod เรียก service อื่นได้ด้วยชื่อสั้น ๆ โดยไม่ต้องรู้ IP เลย
# ภายใน namespace เดียวกัน — ใช้ชื่อสั้น
http://web
# ข้าม namespace — เติมชื่อ namespace
http://web.production
# ชื่อเต็ม (FQDN)
http://web.production.svc.cluster.localสรุป Key Takeaways
- CoreDNS ให้ทุก Service มีชื่อ DNS คงที่ — เรียกด้วยชื่อ ไม่ใช่ IP
- namespace เดียวกันใช้ชื่อสั้น · ข้าม namespace เติม .<namespace>
- เป็นพื้นฐานของสถาปัตยกรรม microservices บน K8s
คำถามที่พบบ่อย
ชื่อ DNS ภายใน cluster หน้าตาเป็นยังไง
รูปเต็ม: <service>.<namespace>.svc.cluster.local — ภายใน namespace เดียวกันเรียกสั้นๆ แค่ชื่อ service ได้เลย ข้าม namespace ใช้ <service>.<namespace> — จำรูปนี้ได้จะ debug ปัญหา "ต่อ service ไม่ติด" ได้เร็วขึ้นมาก
Headless service คืออะไร ใช้ตอนไหน
Service ที่ตั้ง clusterIP: None — DNS จะคืน IP ของ "ทุก pod" แทนที่จะเป็น IP กลางตัวเดียว ให้ client เลือกคุยกับ pod เจาะจงได้ — จำเป็นกับ StatefulSet (ฐานข้อมูลที่ replica แต่ละตัวไม่เท่ากัน เช่น ต้องคุยกับ primary ตรงๆ)

