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:

Tìm hiểu về Service trong Kubernetes

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 của ứng dụng bên trong cluster
  • còn –target-port là port sẽ được expose ra bên ngoài.

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

Tìm hiểu về Service trong Kubernetes

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!

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:

Tìm hiểu về Service trong Kubernetes

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:

Tìm hiểu về Service trong Kubernetes

Truy cập tới địa chỉ http://localhost:8080/, 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ụ mình xoá Service tên là “kubernetes” của mình, kết quả sẽ như sau:

Tìm hiểu về Service trong Kubernetes

Chia sẽ bài viết này ...Share on Facebook
Facebook
0Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin

Add Comment