Từ Code đến System

Kubernetes

[Kubernetes] Phần 7: Khái niệm Services

1. Tổng quan

Về mặt lý thuyết, ta có thể expose để người dùng kết nối trực tiếp tới Pod. Tuy nhiên, Pod trong k8s được tạo mới và tắt đi rất linh hoạt. Mỗi khi 1 pod được tạo mới, chúng sẽ được gắn một địa chỉ riêng. Đồng thời pod tạo K8s có thể được tăng giảm tùy thời điểm (Scale up và Slace down).

Vấn đề:

  • Làm sao để expose được được Pod ra bên ngoài và làm sao người dùng có thể sử dụng dịch vụ?
  • Làm sao để để Pod chạy dịch vụ frontend có thể kết nối dịch vụ backend (vd: Pod chạy source code WordPress kết nối Pod chạy dịch vụ MariaDB)?

Để giải quyết vấn đề trên, K8s sinh ra thành phần Service. Khi Service được sinh ra, nó sẽ được gắn 1 IP chỉ định (còn gọi là clusterIP), IP này sẽ không thay đổi khi cho đên khi Service bị xóa. Qua đó, ta sẽ sử dụng Service để expose service tại tập các Pod. Và Pod có thể nói chuyện trực tiếp với Service trong bài toán Pod frontend service (WordPress) cần kết nối với Pod backend service (MariaDB).

Tóm tắt:

  • Service có IP chỉ định, đại diện cho tập các Pod thuộc 1 Deployment
  • Service sẽ tự cân bẳng tải tới tập các Pod
  • Service có thể định nghĩa bằng file Json hoặc Yaml.

2. Các loại Service

  • Có 3 kiểu services:
    • ClusterIP:
      • IP nội bộ K8s đại diện cho diện cho tập các Pod
      • Traffic tới sẽ được cân bằng tải tới tập các Pod thuộc deployment
    • Node Port:
      • Sử dụng để expose IP nội bộ bên trong Cluster ra bên ngoài
      • Mapping 1 cặp IP + Port nội bộ tới cặp 1 cặp IP + Port Bên ngoài để có thể truy cập từ internet vào dịch vụ bên trong Cluster
      • Traffic được cân bằng tải tới tập các Pod thuộc deployment
    • LoadBalancer
      • Gắn cho Deployment 1 IP Public
      • Có thể truy cập dịch vụ thông qua IP Public
      • Traffic được cân bằng tải tới tập các Pod bên trong Cluster

3. Mô hình triển khai ứng dụng cơ bản

4. Nguồn

https://collabnix.github.io/kubelabs/Slides_Services101/Services101.html

https://collabnix.github.io/kubelabs/Services101/#deploying–a-kubernetes-service

Leave a Reply