Chuyển tới nội dung

Triển Khai Helm Chart Thông qua ArgoCD Kết hợp với Nginx Load Balangcer trên EKS

🏗️ PHẦN 1: CÀI ĐẶT NGINX VỚI AWS ACM (NLB SSL TERMINATION)

Đây là bước thay đổi quan trọng nhất. Chúng ta sẽ cấu hình để AWS NLB tự động gán chứng chỉ ACM vào cổng 443.

Chuẩn bị: Copy cái ARN của chứng chỉ ACM *.diendo.pro.vn mà bạn đã có.
(Ví dụ: arn:aws:acm:ap-southeast-1:474891441152:certificate/6aac9ac0-cea3-452d-a467-6ce6809969d3)

Lệnh cài đặt (Helm):

Copy nguyên khối lệnh này vào CMD (Nhớ thay dòng ARN bằng của bạn):

TERMINAL / DOS

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

helm install nginx-ingress ingress-nginx/ingress-nginx ^
  --namespace ingress-nginx ^
  --create-namespace ^
  --set controller.service.type=LoadBalancer ^
  --set controller.service.annotations."service.beta.kubernetes.io/aws-load-balancer-type"="nlb" ^
  --set controller.service.annotations."service.beta.kubernetes.io/aws-load-balancer-scheme"="internet-facing" ^
  --set controller.service.annotations."service.beta.kubernetes.io/aws-load-balancer-ssl-cert"="arn:aws:acm:ap-southeast-1:474891441152:certificate/6aac9ac0-cea3-452d-a467-6ce6809969d3" ^
  --set controller.service.annotations."service.beta.kubernetes.io/aws-load-balancer-ssl-ports"="443" ^
  --set controller.service.targetPorts.https=http

Giải thích tham số (Tại sao đây là chuẩn AWS?):

  • ...ssl-cert: Gắn chứng chỉ ACM trực tiếp vào NLB.
  • ...ssl-ports: Mở cổng 443 trên NLB.
  • targetPorts.https=httpSSL Offloading. NLB giải mã xong sẽ gửi traffic HTTP (80) vào Nginx. Nginx không cần lo việc giải mã nữa (nhẹ hơn, nhanh hơn).

 PHẦN 2: MỞ CỔNG NODE (BẮT BUỘC)

Khi bạn chạy lệnh tạo Cluster (dù bằng eksctl hay Console), AWS EKS sẽ tự động sinh ra một cái Security Group mặc định cho Cluster đó. Nó dùng để bảo vệ các Node và Control Plane.

Vì dùng NLB, ta vẫn phải mở cổng cho Worker Node (như bài trước đã làm).

Bước 1: Xác định Security Group của Node

1. Vào AWS EC2 Console -> Menu trái chọn Instances.
2. Tìm và tích chọn máy Worker Node đang chạy (Ví dụ: beobeo-lab-cluster-student-workers-Node).

3. Ở tab Security (phía dưới), tìm mục Security groups.

4. Bấm vào cái Security Group có tên dài dạng: eks-cluster-sg-beoobeo-lab-cluster-<số_ngẫu_nhiên>.

  • (Đây là SG mặc định được EKS tự động tạo ra khi khởi tạo Cluster).

Bước 2: Thêm Rule cho phép Traffic từ NLB

1. Trong trang Security Group, chọn tab Inbound rules -> Bấm Edit inbound rules.

2. Kéo xuống dưới cùng, bấm Add rule.

Điền thông tin:

Type: Custom TCP.

Port range: 30000-32767 (Đây là dải cổng mà Kubernetes dùng cho NodePort Service).

Source: 0.0.0.0/0 (Cho phép truy cập từ mọi nơi – Hoặc an toàn hơn là điền dải IP của VPC nếu NLB nằm trong VPC, nhưng với Lab thì để 0.0.0.0/0 cho tiện).

Description: Allow Nginx Ingress Traffic.

Bấm Save rules.

PHẦN 3: DEPLOY APP

– Vì NLB đã lo phần HTTPS rồi, file Ingress của App bây giờ cực kỳ đơn giản (Không cần section tls nữa).

– Về phần cấu hình ArgoCD để chạy app thông qua helm chart ta tham khảo bài lab trước tại link

– Tạo namespace: kubectl create ns ha-config

– Tạo secret: harbor-registry-creds

kubectl create secret docker-registry harbor-registry-creds ^
  --docker-server=harbor.diendo.pro.vn ^
  --docker-username='beobeo' ^
  --docker-password='YOUR_PASSWORD' ^
  --docker-email='admin@local' ^
  -n ha-config

Bước 1: Ta add Repo

Bước 2: Tạo app từ Repo đã được kết nối

– App đã được kết nối thành công

Ta get address của Nginx Ingress Controller bằng lệnh kubectl get ingress -A. Tại đây ta sẽ thấy Address của nlb-ingress. Ta copy address này để lên cloudflare add vào cname

Tại cloudflare ta vào phần DNS và add CNAME:

Sau khi xong ta test lại và có thể truy cập app bằng đường link https://haconfig.diendo.pro.vn


TỔNG KẾT MÔ HÌNH “CHUẨN AWS”:

  1. ArgoCD: Dùng ALB + ACM (Layer 7).
  2. App: Dùng NLB + ACM (Layer 4 Offloading) -> Nginx.
  3. Chứng chỉ: 100% dùng AWS ACM (Miễn phí, tự gia hạn, uy tín).
  4. Tool ngoài: Không cần Cert-Manager, không cần Let’s Encrypt.
Liên hệ