Tìm hiểu về Service trong Kubernetes

Như mình nói trong bài viết trước, sau khi đã tạo Deployment cho ứng dụng của chúng ta thì ứng dụng này sẽ chỉ có thể access bên trong các Node của cluster. Để bên ngoài cluster có thể access được, chúng ta cần sử dụng đối tượng Service bằng cách chạy câu lệnh “expose”.

Ví dụ như mình đang có đối tượng Deployment được tạo với spec như sau:

Bây giờ mình sẽ expose Deployment này ra ngoài bằng câu lệnh “expose” như sau:

với:

  • node-hello là tên của Deployment trong Kubernetes,
  • –type là kiểu Deployment sẽ được expose. Có tất cả 4 type mà chúng ta có thể expose, đó là: ClusterIp (ứng dụng chỉ có thể access bên trong cluster, đây là kiểu mặc định trong trường hợp chúng ta không truyền tham số –type trong câu lệnh trên), NodePort (ứng dụng có thể access từ bên ngoài Node thông qua địa chỉ IP của Node), LoadBalancer (ứng dụng có thể access từ bên ngoài cluster thông qua Cloud Provider Endpoint) và ExternalName (nếu các bạn muốn gắn một domain trỏ đến ứng dụng của mình thì có thể sử dụng kiểu expose này).
  • –port là port sẽ được expose ra bên ngoài
  • còn –target-port là port của ứng dụng bên trong cluster.

Kết quả của mình sau khi chạy câu lệnh trên sẽ như sau:

Vì mình đang sử dụng Kubernetes ở local, nên lúc này nếu mình request tới địa chỉ http://localhost:8080/ trên máy của mình, các bạn sẽ thấy kết quả như sau:

Tìm hiểu về Service trong Kubernetes

Vậy là chúng ta đã expose thành công rồi đó các bạn!

Các bạn có thể lấy thông tin tất cả các Service có trong Kubernetes cluster sử dụng câu lệnh sau:

Kết quả của mình như sau:

Nếu bây giờ các bạn chạy câu lệnh describe service vừa mới tạo của chúng ta:

các bạn sẽ thấy kết quả như sau:

Chúng ta cũng có thể tạo đối tượng Service trực tiếp từ các Pod.

Trong trường hợp này, Service sẽ sử dụng Label và Selector để select Pod cần expose. Ví dụ mình có một Pod tên là “huongdanjava-app” được tạo bởi spec như sau:

Tìm hiểu về Service trong Kubernetes

Khi đó, mình có thể định nghĩa spec sau để tạo mới đối tượng Service expose Pod “huongdanjava-app” ra bên ngoài như sau:

Kết quả sau khi tạo mới Service từ tập tin spec này:

Truy cập tới địa chỉ http://localhost:8081/, các bạn cũng thấy kết quả tương tự như khi mình expose từ đối tượng Deployment.

Chúng ta có thể delete một Service bất kỳ sử dụng câu lệnh kubectl delete như sau:

Ví dụ của mình như sau:

Kết quả:

5/5 - (1 bình chọn)

Add Comment