0

Bài 7. Kubernetes DNS - Làm sao các Pod tìm thấy nhau?

Ở bài trước, chúng ta đã biết Service giúp tạo một địa chỉ IP ổn định để truy cập Pod. Nhưng lại xuất hiện một câu hỏi mới:

Nếu phải nhớ hàng chục địa chỉ IP của các Service thì sao?

May mắn là chúng ta không cần làm điều đó.

Đó chính là lý do Kubernetes DNS ra đời.


Hãy tưởng tượng...

Bạn lưu số điện thoại của bạn bè trong danh bạ bằng tên:

  • Minh
  • Nam
  • Lan

Bạn chỉ cần tìm theo tên, điện thoại sẽ tự biết số của họ là gì.

DNS trong Kubernetes cũng hoạt động tương tự.

Thay vì nhớ:

10.96.15.23

chúng ta chỉ cần nhớ:

backend

hoặc

backend.default.svc.cluster.local

DNS sẽ tự động chuyển tên này thành đúng địa chỉ IP của Service.


1. DNS hoạt động như thế nào?

Giả sử chúng ta có hai ứng dụng:

Frontend
Backend

Backend được tạo dưới dạng một Service:

api-service

Khi Frontend muốn gọi Backend, thay vì dùng IP:

http://10.96.15.23

Frontend chỉ cần gọi:

http://api-service

Kubernetes DNS sẽ tự động tìm IP của api-service và gửi request đến đúng Pod.

Frontend Pod
      │
      ▼
 api-service
      │
      ▼
 Kubernetes DNS
      │
      ▼
10.96.15.23
      │
      ▼
Backend Pod

Đối với ứng dụng, mọi thứ diễn ra hoàn toàn trong suốt.


2. Tên DNS được tạo từ đâu?

Mỗi Service khi được tạo sẽ tự động có một bản ghi DNS.

Ví dụ:

Service:
name: api-service
namespace: default

Có thể truy cập bằng:

api-service

hoặc đầy đủ hơn:

api-service.default.svc.cluster.local

Trong cùng một namespace, bạn thường chỉ cần dùng tên ngắn là đủ.


3. Điều gì xảy ra nếu Pod bị thay thế?

Đây mới là điểm thú vị.

Giả sử Pod Backend bị lỗi và Kubernetes tạo Pod mới.

Backend Pod A ❌
↓
Backend Pod B ✅
  • IP của Pod có thể thay đổi.
  • Nhưng Service vẫn giữ nguyên.
  • DNS vẫn trỏ đến đúng Service.

Frontend không cần thay đổi bất kỳ dòng code nào.

Đó là lý do trong Kubernetes, các ứng dụng gần như không bao giờ giao tiếp trực tiếp với Pod, mà luôn thông qua Service + DNS.


Tóm tắt

  • Mỗi Service đều có một tên DNS.
  • DNS tự động chuyển tên Service thành địa chỉ IP.
  • Ứng dụng chỉ cần nhớ tên Service, không cần nhớ IP.
  • Khi Pod thay đổi, DNS vẫn hoạt động bình thường vì nó luôn trỏ đến Service.

Bài học tiếp theo

Đến đây, các Pod trong Cluster đã có thể tìm thấy nhau bằng tên.

Nhưng nếu người dùng từ Internet muốn truy cập ứng dụng thì sao?

Chúng ta không thể yêu cầu họ truy cập bằng tên Service nội bộ của Kubernetes.

Trong bài tiếp theo, chúng ta sẽ tìm hiểu Ingress – cánh cửa đưa ứng dụng Kubernetes ra bên ngoài Internet.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí