ClusterIP, NodePort, Loadbalance – Các loại service K8S

Trong môi trường Kubernetes, service đóng vai trò quan trọng trong việc duy trì sự kết nối và giao tiếp giữa các ứng dụng và dịch vụ. Trong bài viết này, chúng ta sẽ tìm hiểu về ba loại service chính trong Kubernetes: ClusterIP, NodePort, và LoadBalancer.

Xem thêm:

Tổng quan về kubernetes (k8s)

Containerd là gì ? So sánh Docker và Containerd

1. Cluster IP

Cluster IP là một loại service chỉ cho phép truy cập bên trong cluster. Nghĩa là, các thành phần trong cùng một cluster có thể trao đổi thông tin với nhau, nhưng các thành phần bên ngoài cụm không thể giao tiếp được.

ClusterIP là loại service mặc định trong K8s.

Cluster IP có một địa chỉ IP ảo được sử dụng để truy cập các Pod thuộc service. Địa chỉ IP này được cấp bởi Kubernetes và không thể thay đổi thủ công.

Lợi ích:

  • Bảo mật: Cluster IP cung cấp mức độ bảo mật cao hơn so với các loại service khác vì nó không thể truy cập được từ bên ngoài cluster Kubernetes.
  • Đơn giản: Cluster IP là loại service đơn giản nhất để sử dụng và cấu hình.
apiVersion: v1
kind: Service
metadata:  
  name: my-internal-service
spec:
  selector:    
    app: my-app
  type: ClusterIP
  ports:  
  - name: http
    port: 80
    targetPort: 80
    protocol: TCP
  • targetPort: là cổng trên pod, nơi máy chủ web thực đang chạy, service sẽ chuyển tiếp lưu lượng truy cập đến cổng này. Nếu không có cổng nào được chỉ định, nó sẽ mặc định là 80.
  • port: là port được mở của chính service. cũng giống như tất cả các đối tượng Kubernetes khác, service cũng là một máy chủ ảo trong node, nó cũng sẽ có địa chỉ ip riêng và port là nơi tiếp nhận kết nối đến dịch vụ. Giá trị này là bắt buộc.

2. NodePort

NodePort là một loại service trong k8s cho phép truy cập tới các thành phần từ bên ngoài cụm Kubernetes thông qua một cổng cụ thể trên mỗi Node

  • nodePort: là cổng được sử dụng để truy cập các pod trong kubernetes. Cổng này được chọn ngẫu nhiên trong phạm vi 30000-32767.
apiVersion: v1
kind: Service
metadata:  
  name: my-nodeport-service
spec:
  selector:    
    app: my-app
  type: NodePort
  ports:  
  - name: http
    port: 80
    targetPort: 80
    nodePort: 30036
    protocol: TCP

– Nhược điểm:

  • Bạn chỉ có thể có một service với mỗi port
  • Bạn chỉ có thể sử dụng port từ 30000–32767
  • Nếu địa chỉ IP của Node, VM thay đổi, bạn sẽ phải xử lí điều đó.

3. LoadBalancer

LoadBalancer là dịch vụ cung cấp khả năng cân bằng tải và khả năng truy cập từ bên ngoài cụm Kubernetes thông qua một địa chỉ IP public.

LoadBalancer sử dụng một địa chỉ IP public được cung cấp bởi nhà cung cấp dịch vụ cloud (cloud provider) để truy cập các Pod thuộc service.

– Hạn chế:

  • Chi phí: LoadBalancer tốn kém hơn các loại service khác.
  • LoadBalancer phụ thuộc vào nhà cung cấp dịch vụ cloud để cung cấp địa chỉ IP public.
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 9376
      nodePort: 31000
  selector:
    app: myapp

Hy vọng qua bài viết trên bạn đã có những kiến thức cơ bản về 3 loại dịch vụ chính trong k8s. Cảm ơn bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.

Bài viết liên quan:

Kubenetes Deployments là gì ?

Namespace và Cgroups trong K8S

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em