Dùng thử Load Balancer cho EKS
Sau khi triển khai cụm EKS và deploy workload trong 2 bài trước
Sẽ đến một lúc các bạn sẽ muốn expose các service bên trong k8s ra ngoài để có thể truy cập được từ public internet.
Nhắc lại 1 chút về k8s service thì service có một vài loại: ClusterIP, NodePort, LoadBalancer, ... bài này mình sẽ tập chung vào type LoadBalancer
Theo aws network-load-balancing.html thì khi các bạn tạo k8s service type LoadBalancer sẽ có một built-in legacy controller cấp Classic Load Balancers cho bạn với các tính năng của một load balancer để balance traffic.
Nhưng cũng theo doc đó, aws sẽ chỉ fix bug cho controller đó nữa thôi ko có update new feature gì nữa. Thay vào đó aws khuyến khích chúng ta cài đặt aws-load-balancer-controller version >=2.7.2 (ở thời điểm bài blog này được viết) và đương nhiên là aws lb controller có nhiều tính năng hơn, hấp dẫn hơn legacy.

Cài đặt và sử dụng aws load balancer controller mình sẽ hẹn các bạn ở một bài khác. Bài này mình sẽ dùng load balancer mặc định của EKS xem sao.
Các bước trông sẽ như sau
- Dựng cụm EKS
- Deploy workload
- Expose sử dụng service type
LoadBalancer - Túm cái váy lại
1. Dựng cụm EKS
Mình đã có sẵn code ở đây aws-eks-example/one - code này lấy từ bài EKS private worker các bạn có thể quay lại bài đó để đọc thêm :V
terraform apply # yes
Chờ khoảng 15p

Sau đó các bạn có thể download kubeconfig về
aws eks update-kubeconfig --name one
test get pods
kubectl get pods
Sau khi deploy xong cụm EKS chúng ta có thể test deploy thử workload được rùi
2. Deploy workload
Mình có sẵn file ở trong thư mục tests, các bạn có thể apply lun
kubectl apply -f tests/nginx-deployment.yaml
Nội dung file như sau
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: default
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
3. Expose sử dụng service type LoadBalancer
Tiếp đến mình sẽ expose nginx sử dụng service type LoadBalancer như sau
kubectl apply -f tests/test-classic-lb.yaml
apiVersion: v1
kind: Service
metadata:
namespace: default
name: nginx-classic
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: nginx
Sau khi apply các bạn có thể truy cập vào giao diện EC2 load balancers và kiểm tra, các bạn sẽ thấy có 1 load balancer được tạo mới với type là classic

Có thể click vào để xem chi tiết

Để ý phần DNS name có giá trị aa02a4cbbb89040cba9f14020c965767-747669925.ap-southeast-1.elb.amazonaws.com
Lấy địa chỉ này gõ vào trình duyệt và đây là kết quả

Vậy là mình đã expose nginx ra ngoài internet và truy cập được từ public.
Xem thêm tab Target instances xem sao

OK vậy là load balancer đã forward tới ec2 instances, và các bạn đoán xem ec2 instance này thuộc về?
Các bạn có thể vào lại EKS tab Compute, click vào instance đang chạy


đó chính là ec2 worker node
4. Túm cái váy lại
như vậy là chúng ta đã expose nginx sử dụng aws load balancer thành công, về kiến trúc trông nó sẽ như sau

Bài viết đến đây là hết, cảm ơn các bạn.
Hẹn các bạn trong bài viết tiếp theo về chủ đề EKS.
All rights reserved