Headless Service trong Kubernetes là gì ?

96

Headless Service trong Kubernetes là gì ?Cuongquach.com | Thông thường khi chúng ta muốn truy cập các ứng dụng trong Kubernetes, chúng ta sẽ khởi tạo một Service để load-balance lưu lượng xuống các Pod ứng dụng. Nhưng có cách nào giúp chúng ta có thể truy cập trực tiếp các Pod IP thông qua DNS endpoint nội bộ không ? Có thể câu trả lời là “Headless Service” trong Kubernetes đấy.

headless-service-kubernetes

Headless Service là gì trong Kubernetes ?

Đôi khi bạn sẽ chẳng cần tính năng Service ClusterIP Load-balancing hoặc một địa chỉ IP Service cụ thể. Thay vào đó bạn có mong muốn được truy cập trực tiếp đến các dịch vụ của Pod thay vì thông qua một lớp Proxy thường thấy với Service abstraction.

Bạn chỉ cần cấu hình phần “.spec.clusterIP” là “None” là bạn đã quy định Service của bạn là loại Headless. Khi đó Cluster IP sẽ không được cấp phát cho Service mà bạn khai báo, kube-proxy sẽ không xử lý đối tượng Service của bạn. Lúc này DNS của Service sẽ trả về thông tin là các địa chỉ IP của Pod khớp với Selector.

Cấu hình Headless Service trong Kubernetes

Chúng ta sẽ cùng lab để hiểu hơn về loại Service Headless :

  • Tạo một Deployment Nginx với 4 pod.
  • Tạo một ClusterIP Service để có thể truy cập cân bằng tải 4 pod Nginx thông qua DNS ClusterIP Service với 1 IP cụ thể.
  • Tạo một Headless Service để có thể truy cập cân bằng tải 4 Pod Nginx thông qua DNS Headless Service đến trực tiếp các IP Private của Pod.

Chúng ta tạo ra một Deployment Nginx với Replica là 4, tương đương 4 Pod.

Kiểm tra các Pod Nginx đang chạy nào.

Kiểm tra các Pod IP.

Giờ ta sẽ tạo một Service với loại mặc định là ClusterIP, khai báo listen ở port 80 (nginx) TCP.

Kiểm tra thông tin Service Cluster IP nginx.

Chúng ta tạo tiếp một Service với loại là Headless Service, khai báo listen ở port 80 (nginx) TCP.

Kiểm tra thông tin Service Headless nginx.

Cuối cùng chúng ta đã chuẩn bị xong 2 loại Service Kubernetes gồm ClusterIPHeadless. Hãy tạo một pod dnsutils và mở terminal shell trên pod đó để kiểm tra tính năng nào.

Mở terminal shell vào con Pod dnsutils nào.

Giờ chúng ta sẽ phân giải tên miền nội bộ Service ClusterIP. Bạn sẽ thấy DNS phân giải về đúng địa chỉ ClusterIP sẽ được dùng để load balance xuống các Pod IP.

Thử curl tên miền nội bộ Service ClusterIP.

Kế đến phân giải tên miền nội bộ của Service Headless. Bạn sẽ thấy DNS phân giải về danh sách các Pod IP, giúp bạn truy cập trực tiếp đến địa chỉ IP của Pod , không thông qua bất kì Proxy Load Balance nào. Việc load balance sẽ thực hiện ở DNS Round-robin.

Vậy là bạn đã hiểu sự khác nhau giữa Headless ServiceClusterIP Service trong Kubernetes rồi phải không nào ? Hãy vận dụng tuỳ vào các tình huống cụ thể phát sinh trong môi trường ứng dụng của bạn nhé.

Nguồn: https://cuongquach.com/

LEAVE A REPLY

Please enter your comment!
Please enter your name here