0Pricing
Kubernetes Basics · บทเรียน

DNS และการค้นหาบริการ

ทำความเข้าใจว่า Pod ค้นหากันเองด้วย DNS ในตัวของ Kubernetes อย่างไร และการค้นหาบริการทำงานเบื้องหลังอย่างไร

DNS และการค้นหาบริการ เป็นบทเรียน Kubernetes Basics ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kubernetes Basics และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kubernetes Basics มีบทเรียนทั้งหมด 4 บทเรียน

ปัญหาการค้นหาบริการ

พ็อดเกิดขึ้นและหายไปเรื่อย ๆ และที่อยู่ IP ของพ็อดก็เปลี่ยนแปลงอยู่เสมอ การกำหนดที่อยู่ IP ไว้ตายตัวจะใช้ไม่ได้ทันที Kubernetes แก้ปัญหานี้ด้วยการค้นหาบริการด้วย DNS

แทนที่จะสื่อสารผ่าน IP คุณจะสื่อสารผ่านชื่อที่คงที่

DNS ของคลัสเตอร์

ทุกคลัสเตอร์จะเรียกใช้บริการ DNS (โดยทั่วไปคือ CoreDNS) ซึ่งจะสร้างระเบียน DNS สำหรับบริการและพ็อดโดยอัตโนมัติ ทำให้ชื่อถูกแปลงไปเป็น ClusterIP ที่ถูกต้อง

ชื่อ DNS ของบริการ

บริการจะได้รับชื่อ DNS ตามรูปแบบที่คาดเดาได้:

service-name.namespace.svc.cluster.local

ภายในเนมสเปซเดียวกัน คุณสามารถใช้เพียง service-name ซึ่งเป็นชื่อแบบสั้นได้

# from a Pod in the same namespace
curl http://payment-service:8080

# fully qualified, from any namespace
curl http://payment-service.shop.svc.cluster.local:8080

เนมสเปซและการตั้งชื่อ

เนมสเปซเป็นส่วนหนึ่งของชื่อ หากต้องการเข้าถึงบริการในเนมสเปซอื่น ให้ระบุเนมสเปซนั้นด้วย: service.namespace

# Pod in 'frontend' namespace calling 'backend' namespace
curl http://api.backend.svc.cluster.local

การทดสอบ DNS จากพ็อด

คุณสามารถเปิดใช้พ็อดชั่วคราวเพื่อทดสอบการแปลงชื่อได้

kubectl run dnstest --image=busybox:1.36 --rm -it --restart=Never -- nslookup payment-service

CoreDNS แปลงชื่ออย่างไร

เมื่อพ็อดส่งคำขอชื่อ คำขอจะถูกส่งไปยัง CoreDNS จากนั้น CoreDNS จะค้นหาบริการที่ตรงกันและส่งคืน ClusterIP สำหรับบริการแบบไม่มี IP เสมือน CoreDNS จะส่งคืนที่อยู่ IP ของพ็อดโดยตรง

บริการแบบไม่มี IP เสมือน

บริการแบบไม่มี IP เสมือน (clusterIP: ไม่มี) จะไม่ใช้ IP เสมือนเดียว แต่ DNS จะส่งคืนที่อยู่ IP ของพ็อดแต่ละรายการแทน ซึ่งจำเป็นสำหรับแอปพลิเคชันแบบมีสถานะที่ระบุที่อยู่ของพ็อดโดยตรง

apiVersion: v1
kind: Service
metadata:
  name: db
spec:
  clusterIP: None
  selector:
    app: db
  ports:
  - port: 5432

ระเบียน DNS ของพ็อด

เมื่อใช้บริการแบบไม่มี IP เสมือน พ็อดแต่ละรายการที่อยู่เบื้องหลังยังสามารถมีระเบียน DNS ของตนเองได้ด้วย ซึ่งมีประโยชน์สำหรับ StatefulSets ที่พ็อดมีข้อมูลระบุตัวตนคงที่ เช่น db-0 และ db-1

# stable per-Pod name in a StatefulSet
curl http://db-0.db.default.svc.cluster.local:5432

การตรวจสอบ resolv.conf ของพ็อด

Kubernetes จะใส่การกำหนดค่า DNS ลงในแต่ละพ็อด โดเมนสำหรับค้นหาช่วยให้ชื่อแบบสั้นถูกแปลงได้อย่างถูกต้อง

kubectl exec -it mypod -- cat /etc/resolv.conf
# nameserver 10.96.0.10
# search default.svc.cluster.local svc.cluster.local cluster.local

ตัวแปรสภาพแวดล้อมเทียบกับ DNS

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

ข้อผิดพลาดที่พบบ่อยเกี่ยวกับ DNS

  • ลืมระบุเนมสเปซเมื่อเรียกใช้บริการข้ามเนมสเปซ
  • คาดหวังว่าจะมี DNS สำหรับบริการที่ไม่มีพ็อดตรงกัน (ไม่มีปลายทาง)
  • แคชที่อยู่ IP เก่าไว้ในแอปพลิเคชัน แทนที่จะค้นหาชื่อใหม่อีกครั้ง

ตรวจสอบอย่างรวดเร็ว

เลือกรูปแบบชื่อ DNS ที่ถูกต้อง

สรุปทบทวน

คุณได้เรียนรู้ว่า Kubernetes ใช้ CoreDNS เพื่อกำหนดชื่อ DNS ที่คงที่ให้บริการตามรูปแบบ service.namespace.svc.cluster.local ชื่อแบบสั้นใช้ได้ภายในเนมสเปซเดียวกัน บริการแบบไม่มี IP เสมือนจะแสดงที่อยู่ IP ของพ็อดแต่ละรายการ และ DNS จะสะท้อนสถานะปัจจุบันของคลัสเตอร์อยู่เสมอ

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

บทเรียน “DNS และการค้นหาบริการ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “DNS และการค้นหาบริการ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kubernetes Basics ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kubernetes Basics มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “DNS และการค้นหาบริการ”

ทำความเข้าใจว่า Pod ค้นหากันเองด้วย DNS ในตัวของ Kubernetes อย่างไร และการค้นหาบริการทำงานเบื้องหลังอย่างไร คุณปฏิบัติ Kubernetes Basics ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kubernetes Basics หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kubernetes Basics บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “DNS และการค้นหาบริการ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Kubernetes Basics นี้ได้ไหม

ได้ บทเรียน Kubernetes Basics ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเปิดเผยแอปด้วย Service
  2. ประเภท Service: ClusterIP, NodePort, LoadBalancer
  3. Ingress สำหรับการเข้าถึงจากภายนอก
  4. DNS และการค้นหาบริการ
← กลับไปที่ Kubernetes Basics