Chuyển tới nội dung chính

What is EKS?

Amazon Elastic Kubernetes Service (EKS) là dịch vụ Kubernetes được quản lý (Managed Kubernetes). Nó loại bỏ gánh nặng vận hành Control Plane, giúp bạn tập trung vào ứng dụng.

Yêu cầu kiến thức nền

Tài liệu này giả định bạn đã có kiến thức cơ bản về Kubernetes (Pod, Deployment, Service, Namespace và cách dùng kubectl).

1. Kiến trúc tổng quan

EKS chia làm 2 phần rõ rệt: Control Plane (AWS quản lý) và Data Plane (Bạn quản lý).

EKS Architecture

1.1. Control Plane

  • Chạy trong VPC riêng của AWS.
  • Được scale tự động và đảm bảo HA (High Availability) trên 3 Availability Zones (AZs).
  • AWS tự động backup etcd và patch lỗi bảo mật.
  • Bạn truy cập qua endpoint (Public hoặc Private).
  • Các thành phần bao gồm:
    • etcd: Kho lưu trữ key–value phân tán. EKS chạy tối thiểu 3 node etcd (tối đa 5 để tăng độ bền) nhằm đảm bảo quorum và bầu chọn leader.
    • API server: Nhiều instance xử lý toàn bộ yêu cầu Kubernetes API (ví dụ: các lệnh kubectl cho pods, deployments, services).
    • scheduler: Phân công Pod vào các node dựa trên yêu cầu tài nguyên, node labels, taints và affinity rules.
    • Controller Manager: Chạy các vòng điều khiển (control loops) để đưa trạng thái thực tế của cluster về khớp với trạng thái mong muốn (ví dụ: duy trì đúng số lượng bản sao Pod).

1.2. Data Plane (Worker Nodes)

Nơi các Pods của bạn thực sự chạy. Có 3 cách để chạy Worker Nodes:

  1. Self-Managed Node Groups:
    • Bạn tự tạo EC2, tự cài Kubelet, tự join vào cluster.
    • Linh hoạt nhất nhưng cực nhất.
  2. Managed Node Groups (Khuyên dùng):
    • AWS tạo EC2 và ASG cho bạn.
    • AWS lo việc update version K8s cho node (bạn chỉ cần bấm nút Update).
    • Vẫn cho phép bạn SSH vào node nếu cần.
  3. AWS Fargate:
    • Serverless cho K8s. Mỗi Pod chạy trên 1 VM riêng.
    • Không cần quản lý OS, không cần patch.
    • Phải dùng Fargate Profile để định nghĩa Pod nào chạy trên Fargate.

2. Networking (VPC CNI)

EKS sử dụng plugin Amazon VPC CNI để kết nối mạng. Đây là điểm khác biệt lớn nhất so với K8s tiêu chuẩn.

2.1. Đặc điểm của VPC CNI

  • Pod có IP thật của VPC: Mỗi Pod nhận được một địa chỉ IP trực tiếp từ subnet của VPC (giống như EC2).
  • Hiệu năng cao: Không cần lớp Overlay Network (như Flannel hay Calico), giảm độ trễ.
  • Hạn chế: Tốn IP. Nếu subnet của bạn nhỏ (ví dụ /24), bạn sẽ rất nhanh hết IP.

2.2. IP Exhaustion Challenge

Mỗi Pod chiếm 1 IP. Một EC2 m5.large chỉ hỗ trợ tối đa ~30 IP. Nếu bạn chạy nhiều Pod nhỏ, Node sẽ bị hết IP trước khi hết CPU/RAM.

Giải pháp:

  1. Prefix Delegation: Gán nguyên một dải /28 (16 IP) cho mỗi slot của ENI thay vì 1 IP lẻ. Tăng số lượng IP lên đáng kể.
  2. Custom Networking: Dùng subnet riêng (CGNAT 100.64.0.0/16) cho Pod để tiết kiệm IP của VPC chính.

2.3. Security Groups for Pods

Tính năng cho phép gán AWS Security Group trực tiếp cho Pod.

Micro-segmentation

Thay vì mở port cho toàn bộ Node, bạn có thể tạo SG "Allow-SQL" và chỉ gán cho Pod Backend. Pod Frontend trên cùng Node đó sẽ không thể truy cập SQL.


3. Storage (CSI Drivers)

K8s giao tiếp với storage của AWS thông qua Container Storage Interface (CSI) drivers.

  • EBS CSI Driver: Để tạo Persistent Volume (PV) dạng Block Storage (ReadWriteOnce). Dữ liệu đi theo Pod, nhưng chỉ trong cùng AZ.
  • EFS CSI Driver: Để tạo PV dạng File Storage (ReadWriteMany). Nhiều Pod ở nhiều AZ có thể đọc ghi cùng lúc.

4. Authentication & Authorization

  • AuthN (Xác thực): Dùng AWS IAM. Bạn dùng aws eks update-kubeconfig để lấy token đăng nhập.
  • AuthZ (Phân quyền): Dùng Kubernetes RBAC (Role, ClusterRole).
  • Kết nối: ConfigMap aws-auth (hoặc tính năng mới EKS Access Entry) dùng để map IAM User/Role sang K8s User/Group.