Kubernetes Service và những điều cần biết

2047
28-02-2024
Kubernetes Service và những điều cần biết

Kubernetes Service là gì?

Kubernetes Service chính là một phần quan trọng trong hệ thống Kubernetes và được sử dụng để quản lý, cung cấp truy cập chạy trên các container.

Kubernetes Service có tác dụng cung cấp định nghĩa các tập hợp ứng dụng gồm các pod và cung cấp một cách để truy cập đến chúng thông qua địa chỉ IP duy nhất. Lúc này, service có tác dụng cung cấp cơ chế cân bằng tải để phân phối lưu lượng truy cập đến các ứng dụng trong cluster.

Người dùng có thể hiểu Kubernetes là một nền tảng nguồn mở, khả chuyển và có thể mở rộng quản lý các ứng dụng được đóng gói và các service. Điều này giúp thuận lợi trong việc cấu hình và tự động hóa việc triển khai ứng dụng. Kubernetes cũng là một hệ sinh thái lớn và đang phát triển nhanh chóng từ các dịch vụ, hỗ trợ, công cụ.

Kubernetes được bắt nguồn từ tiếng Hy Lạp, còn có nghĩa là người lái tàu hoặc hoa tiêu. Google đã mở mã nguồn Kubernetes từ năm 2014. Kubernetes được xây dựng dựa trên một thập kỷ rưỡi kinh nghiệm mà Google có được đối với việc vận hành một khối lượng lớn workload trong thực tế, cùng với đó là việc kết hợp với các ý tưởng và thực tiễn tốt nhất từ cộng đồng.

Các loại Kubernetes Service

Kubernetes Service được biết là một chủ đề phức tạp. Vì thế bạn cần hiểu nhu cầu của ứng dụng để triển khai thành công ứng dụng đó trên Kubernetes. Điều này đồng nghĩa với việc các loại dịch vụ bạn muốn cung cấp về quy mô, vị trí và cụm của bạn cũng như loại lưu lượng truy cập mà bạn mong đợi ứng dụng mình nhận được.

Có 4 loại Kubernetes service hỗ trợ cụ thể gồm: ClusterIP, NodePort, LoadBalancer và Ingress.

Trong mỗi loại sẽ có bộ yêu cầu riêng để kích hoạt chúng cho ứng dụng. Vì vậy bạn cần hiểu mình cần yêu cầu nào trước khi thực hiện triển khai.

Ví dụ: Đối với NodePort sẽ cho phép các nhóm ở trong cùng một nút giao tiếp với nhau mà không cần chỉ định địa chỉ IP. Trong khi đó, cụm Kubernetes của bạn sẽ cần ít nhất hai nút để loại giao tiếp mạng này có thể hoạt động một cách chính xác. Ngoài ra, NodePort còn chỉ hoạt động được truy cập từ bên trong cụm, chúng trái ngược với Load Balancers hoặc Ingress đều cho phép truy cập từ bên ngoài.

1. ClusterIP ở trong Kubernetes

ClusterIP được hiểu đơn giản như sau: Service này chỉ có thể truy cập từ bên trong cụm Kubernetes và không thể truy cập từ bên ngoài.

ClusterIP còn là service mặc định cho phép liên lạc giữa nhiều nhóm trong cụm. Theo đó, service của bạn sẽ hiển thị trên ClusterIP nếu bạn không xác định thủ công. ClusterIP dù không thể được truy cập từ thế giới bên ngoài. Tuy nhiên, proxy Kubernetes lại có thể được sử dụng để truy cập service của bạn. Vì vậy loại service này được sử dụng để kết nối mạng nội bộ giữa các khối lượng công việc của bạn, trong khi gỡ lỗi các service của bạn, hiển thị bảng thông tin nội bộ,...

ClusterIP ở trong Kubernetes

2. NodePort

NodePort được biết là loại mạng đơn giản nhất. Ở Service này sẽ cho phép truy cập từ bên ngoài cụm Kubernetes thông qua một cổng được mở trên tất cả các node trong cụm.

NodePort không yêu cầu cấu hình và chỉ định tuyến lưu lượng truy cập trên một cổng ngẫu nhiên trên máy chủ đến một cổng ngẫu nhiên trên vùng chứa. Điều này phù hợp với hầu hết các trường hợp, nhưng nó sẽ có một số nhược điểm như sau:

- Có thể cần đến cách xoay ngược để sử dụng proxy ngược (như Nginx) mới có thể đảm bảo rằng các yêu cầu web được định tuyến chính xác.

- Chỉ có thể hiển thị một dịch vụ duy nhất trên mỗi cổng.

- IP vùng chứa sẽ khác nhau mỗi khi nhóm khởi động, khiến việc phân giải DNS không thể thực hiện được.

- Vùng chứa không thể truy cập localhost từ bên ngoài nhóm vì không có IP được định cấu hình.

Tuy nhiên, có thể sử dụng NodePort trong quá trình thử nghiệm và cho các trường hợp sử dụng tạm thời, chẳng hạn như bản demo, POC và đào tạo nội bộ để hiển thị cách hoạt động của định tuyến lưu lượng truy cập. Lưu ý, không nên sử dụng NodePort trong quá trình sản xuất để lộ các dịch vụ.

NodePort

3. Load Balancer

Service này được sử dụng một cân bằng tải với mục đích sử dụng để phân phối lưu lượng truy cập đến các pod trong cụm Kubernetes.

Load Balancer là loại service được sử dụng phổ biến nhất cho mạng Kubernetes. Đây là dịch vụ cân bằng tải tiêu chuẩn chạy trên mỗi nhóm và thiết lập kết nối với thế giới bên ngoài, với các mạng như Internet hoặc trong trung tâm dữ liệu của người dùng.

Load Balancer đồng thời sẽ giữ các kết nối mở với các nhóm đang hoạt động và đóng các kết nối với các nhóm không hoạt động. Điều này tương tự như những gì bạn có trên AWS với ELB hoặc Azure với Cổng ứng dụng. Trong khi tuyến trên cung cấp định tuyến Lớp 4 cho lưu lượng HTTP(S), thì Tuyến dưới cung cấp định tuyến Lớp 7 cho lưu lượng HTTP(S).

Có thể định tuyến lưu lượng truy cập theo số cổng đích, giao thức và tên máy chủ hoặc sử dụng nhãn ứng dụng. Người dùng có thể gửi hầu hết mọi loại lưu lượng truy cập đến loại dịch vụ này, chẳng hạn như HTTP, TCP, UDP, Grpc... Sử dụng phương pháp này để hiển thị trực tiếp các service của bạn.

Load Balancer

4. Ingress

Ingress không được coi là Kubernetes service chính thức, nhưng nó có thể được sử dụng để hiển thị các service. Bạn có thể định cấu hình dịch vụ Ingress bằng cách tạo quy tắc để xác định kết nối gửi đến nào sẽ tiếp cận service nào.

Ingress là một đối tượng Kubernetes nằm trước nhiều service và hoạt động như một bộ định tuyến thông minh. Nó xác định cách lưu lượng truy cập bên ngoài có thể tiếp cận các service của cụm và định cấu hình một bộ quy tắc để cho phép các kết nối gửi đến tiếp cận các service trên cụm.

Quy tắc xâm nhập thường được xác định bằng chú thích. Bộ điều khiển Ingress đọc các chú thích này và định cấu hình iptables hoặc NGINX tương ứng. Có nhiều loại bộ điều khiển Ingress sở hữu các khả năng khác nhau. Bạn có thể tìm thấy danh sách các bộ điều khiển xâm nhập tại đây .

Ingress là loại service mạnh mẽ nhất được sử dụng để hiển thị các service và nó chỉ yêu cầu bạn duy trì một bộ cân bằng tải, điều này có thể rẻ hơn so với việc sử dụng loại Load Balancer service.

Dưới đây là bảng so sánh đơn giản để giúp bạn hiểu nhanh về các loại service.

Bảng so sánh giữa các services

Cách tạo và quản lý Kubernetes Service

1. Cách tạo Kubernetes Service

Để tạo Kubernetes Service, bạn có thể sử dụng các lệnh và tệp cấu hình YAML sau đây:

1. Tạo một Service trong Kubernetes bằng cách sử dụng lệnh kubectl create:

Cách tạo Kubernetes Service 1

Ví dụ:

Cách tạo Kubernetes Service 2

2. Hoặc bạn cũng có thể tạo một tệp cấu hình YAML để định nghĩa Service:

Cách tạo Kubernetes Service 3

3. Sau khi tạo Service, bạn có thể sử dụng lệnh kubectl get để kiểm tra trạng thái của Service:

Cách tạo Kubernetes Service 4

4. Để quản lý Service, bạn có thể sử dụng lệnh kubectl edit để chỉnh sửa cấu hình Service:

Cách tạo Kubernetes Service 5

5. Bạn cũng có thể sử dụng lệnh kubectl delete để xóa Service:

Cách tạo Kubernetes Service 6

Ngoài ra, bạn cũng có thể sử dụng các công cụ quản lý Kubernetes như Kubernetes Dashboard để tạo và quản lý Service một cách trực quan và dễ dàng hơn.

2. Quản lý Kubernetes Service

1. Sử dụng lệnh kubectl: Với lệnh kubectl, bạn có thể tạo, xem, sửa đổi và xóa Service trong Kubernetes.

Ví dụ:

- Tạo một Service: kubectl create service --tcp=

- Xem danh sách các Service: kubectl get services

- Xem chi tiết về một Service: kubectl describe service

- Xóa một Service: kubectl delete service

2. Sử dụng tệp cấu hình YAML: Bạn có thể tạo một tệp cấu hình YAML để định nghĩa Service và quản lý nó thông qua việc chỉnh sửa tệp cấu hình và áp dụng nó vào Kubernetes.

3. Sử dụng Kubernetes Dashboard: Kubernetes Dashboard là một giao diện người dùng đồ họa cho phép bạn quản lý các tài nguyên trong Kubernetes, bao gồm cả Service. Bạn có thể sử dụng Dashboard để tạo, xem và quản lý Service một cách trực quan.

4. Sử dụng các công cụ quản lý Kubernetes khác: Ngoài ra, có nhiều công cụ quản lý Kubernetes khác như k9s, Octant, Lens, Rancher,... cho phép bạn quản lý service và các tài nguyên khác trong Kubernetes một cách dễ dàng và hiệu quả.

Quá trình quản lý Kubernetes Service có thể được thực hiện thông qua các công cụ dòng lệnh, tệp cấu hình YAML hoặc các giao diện người dùng đồ họa, tùy thuộc vào sở thích và nhu cầu của bạn.

Lợi ích khi sử dụng Kubernetes Service

Kubernetes Service mang lại nhiều lợi ích quan trọng khi triển khai ứng dụng trong môi trường Kubernetes. Dưới đây là một số lợi ích chính khi sử dụng Kubernetes Service cụ thể:

- Load Balancing: Kubernetes Service cung cấp khả năng cân bằng tải tự động giữa các phiên bản của ứng dụng hoặc microservices. Điều này sẽ giúp phân phối lưu lượng truy cập đến các phiên bản khác nhau một cách hiệu quả và làm giảm tải cho mỗi phiên bản cũng như tăng tính sẵn sàng của hệ thống.

- Service Discovery: Kubernetes Service cho phép các ứng dụng khác trong cụm Kubernetes dễ dàng tìm và truy cập các dịch vụ khác thông qua tên dịch vụ thay vì địa chỉ IP cụ thể. Điều này giúp giảm sự phụ thuộc vào các địa chỉ IP cụ thể và tạo ra một cách tiếp cận dịch vụ linh hoạt hơn.

- IP và DNS Stability: Kubernetes Service cung cấp một cơ chế ổn định để truy cập các dịch vụ thông qua IP và DNS. Khi dịch vụ được triển khai lại hoặc mở rộng, IP và DNS của dịch vụ không thay đổi, giúp ứng dụng khác trong cụm duy trì tính liên tục.

- External Service Exposure: Kubernetes Service cho phép bạn dễ dàng tiếp cận các dịch vụ từ bên ngoài cụm thông qua các kỹ thuật như NodePort, LoadBalancer hoặc Ingress. Điều này giúp kết nối ứng dụng Kubernetes với môi trường bên ngoài một cách dễ dàng.

- Tính sẵn sàng và mở rộng: Kubernetes Service giúp tạo ra một cơ chế mở rộng và có khả năng chịu lỗi cho các dịch vụ trong cụm Kubernetes. Khi một phiên bản mới của dịch vụ được triển khai, Service sẽ tự động cập nhật và bắt đầu chuyển hướng lưu lượng đến phiên bản mới một cách mượt mà.

Tóm lại, Kubernetes Service mang lại nhiều lợi ích quan trọng như cân bằng tải, khám phá dịch vụ, ổn định về IP và DNS, tiếp cận dịch vụ từ bên ngoài và tính sẵn sàng, mở rộng cho các dịch vụ trong môi trường Kubernetes.

Kết luận

Hy vọng với những thông tin về kubernetes service trong bài viết trên đã giúp bạn hiểu rõ hơn về 4 loại service được cung cấp trong Kubernetes. Thông qua đó nắm rõ hơn về từng loại service và sử dụng chúng cho nhu cầu của mình một cách phù hợp nhất.

SHARE