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