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

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
รูปแบบชื่อ DNS ของ Service

สรุป 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 ตรงๆ)

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