0

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.

image.png

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

  1. Dựng cụm EKS
  2. Deploy workload
  3. Expose sử dụng service type LoadBalancer
  4. 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

image.png

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

image.png

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

image.png

Để ý 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ả

image.png

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

image.png

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

image.png

image.png

đó 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

image.png

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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí