Service, DNS, EndpointSlice và Probes
Một Service có ClusterIP nhưng không có backend vẫn không phục vụ được.
Nắm bản chất
Service tạo logical endpoint ổn định trước tập Pods. CoreDNS thường phân giải
tên service.namespace.svc.cluster.local; EndpointSlices cho
dataplane biết những backend endpoints phù hợp. Selector labels sai hoặc
readiness thất bại có thể khiến Service không có endpoint ready.
Liveness kiểm tra khi nào nên restart; readiness kiểm tra khi nào nên đưa Pod vào lưu lượng; startup giúp ứng dụng khởi động chậm không bị liveness kill quá sớm. Health endpoints nên phản ánh đúng điều kiện mục tiêu, không tạo retry storm vô ích.
Luồng hoạt động
Hãy tự giải thích mỗi mũi tên: dữ liệu, quyền hoặc tín hiệu nào được truyền qua bước này?
Lệnh & cấu hình mẫu
kubectl -n app get svc api
kubectl -n app get endpointslices
kubectl -n app describe pod API_POD
kubectl -n app port-forward svc/api 8000:8000
curl -f http://127.0.0.1:8000/health/ready
Lệnh có placeholder hoặc phụ thuộc môi trường thì cần thay thông tin thực tế, kiểm tra quyền và chỉ thực hiện trên tài nguyên được phép.
Bài tập 10–20 phút
Cố tình sửa label selector trên Service lab để không khớp Pods; quan sát EndpointSlices rồi sửa lại. Ghi nhận kiểu lỗi khi endpoint trống.
Lỗi dễ mắc
Đừng để liveness phụ thuộc bắt buộc vào một dependency ngoài có thể tạm down: tất cả Pods có thể restart đồng loạt dù process còn khỏe.
Tự kiểm tra
Container Running đã đồng nghĩa Pod Ready?Xem đáp án ↗
Chưa. Readiness probes và những điều kiện Pod có thể khiến Pod không đủ điều kiện phục vụ traffic.
Học thêm qua lab
Có project thực hành đúng với chương này, kèm README và những giới hạn môi trường cần lưu ý.
↓ Tải mã nguồn thực hành chương 09Đối chiếu tài liệu gốc
Cú pháp và khả năng hỗ trợ có thể thay đổi theo phiên bản. Trước khi dùng Production, hãy kiểm tra tài liệu tương ứng.
Mở tài liệu chính thức ↗