Để tích hợp một Network Load Balancer với một Kubernetes cluster, bạn có thể sử dụng một Service với type là LoadBalancer. Khi bạn tạo một Service như vậy, VNGCloud Controller Manager sẽ tự động một NLB để chuyển tiếp lưu lượng đến các pod trên node của bạn. Bạn cũng có thể sử dụng các annotation để tùy chỉnh các thuộc tính của Network Load Balancer, như port, protocol,...
Chuẩn bị
Tạo một Kubernetes cluster trên VNGCloud, hoặc sử dụng một cluster đã có. Lưu ý: đảm bảo bạn đã tải xuống cluster configuration file sau khi cluster được khởi tạo thành công và truy cập vào cluster của bạn.
Khởi tạo hoặc sử dụng một service account đã tạo trên IAM và gắn policy: vLBFullAccess, vServerFullAccess. Để tạo service account bạn truy cập tại đây và thực hiện theo các bước sau:
Chọn "Create a Service Account", điền tên cho Service Account và nhấn Next Step để gắn quyền cho Service Account
Tìm và chọn Policy:vLBFullAccess và Policy:vServerFullAccess, sau đó nhấn "Create a Service Account" để tạo Service Account, Policy: vLBFullAccess vàPolicy: vServerFullAccess do VNG Cloud tạo ra, bạn không thể xóa các policy này.
Sau khi tạo thành công bạn cần phải lưu lại Client_ID và Secret_Key của Service Account để thực hiện bước tiếp theo.
Khởi tạo Service Account và cài đặt VNGCloud Controller Manager
Chú ý:
Khi bạn thực hiện khởi tạo Cluster theo hướng dẫn bên trên, nếu bạn chưa bật option Enable vLB Native Integration Driver, mặc định chúng tôi sẽ không cài sẵn plugin này vào Cluster của bạn. Bạn cần tự thực hiện Khởi tạo Service Account và cài đặt VNGCloud Controller Manager theo hướng dẫn bên dưới. Nếu bạn đã bật option Enable vLB Native Integration Driver, thì chúng tôi đã cài sẵn plugin này vào Cluster của bạn, hãy bỏ qua bước Khởi tạo Service Account, cài đặt VNGCloud Controller Manager và tiếp tục thực hiện theo hướng dẫn kể từ Deploy một Workload.
Hướng dẫn khởi tạo Service Account và cài đặt VNGCloud Controller Manager
Khởi tạo Service Account
Khởi tạo hoặc sử dụng một service account đã tạo trên IAM và gắn policy: vLBFullAccess, vServerFullAccess. Để tạo service account bạn truy cập tại đây và thực hiện theo các bước sau:
Chọn "Create a Service Account", điền tên cho Service Account và nhấn Next Step để gắn quyền cho Service Account
Tìm và chọn Policy:vLBFullAccess và Policy:vServerFullAccess, sau đó nhấn "Create a Service Account" để tạo Service Account, Policy: vLBFullAccess vàPolicy: vServerFullAccess do VNG Cloud tạo ra, bạn không thể xóa các policy này.
Sau khi tạo thành công bạn cần phải lưu lại Client_ID và Secret_Key của Service Account để thực hiện bước tiếp theo.
Gỡ cài đặt cloud-controller-manager
kubectl get daemonset -n kube-system | grep -i "cloud-controller-manager"
# if your output is similar to the following, you MUST delete the old plugin
kubectl delete daemonset cloud-controller-manager -n kube-system --force
Bên cạnh đó, bạn có thể xóa Service Account đang sử dụng cho cloud-controller-manager vừa gỡ
kubectl get sa -n kube-system | grep -i "cloud-controller-manager"
# if your output is similar to the above, you MUST delete this service account
kubectl delete sa cloud-controller-manager -n kube-system --force
Thay thế thông tin ClientID, Client Secret và ClusterID của cụm K8S của bạn và tiếp tục chạy:
helm install vngcloud-controller-manager vks-helm-charts/vngcloud-controller-manager --replace \
--namespace kube-system \
--set cloudConfig.global.clientID= <Lấy ClientID của Service Account được tạo trên IAM theo hướng dẫn bên trên> \
--set cloudConfig.global.clientSecret= <Lấy ClientSecret của Service Account được tạo trên IAM theo hướng dẫn bên trên>\
--set cluster.clusterID= <Lấy Cluster ID của cluster mà bạn đã khởi tạo trước đó>
Sau khi việc cài đặt hoàn tất, thực hiện kiểm tra trạng thái của vngcloud-Integrate-controller pods:
kubectl get pods -n kube-system | grep vngcloud-controller-manager
Ví dụ như ảnh bên dưới là bạn đã cài đặt thành công vngcloud-controller-manager:
NAME READY STATUS RESTARTS AGE
vngcloud-controller-manager-8864c754c-bqhvz 1/1 Running 5 (91s ago) 3m13sc
Deploy một Workload
1.Nếu bạn chưa có sẵn một Network Load Balancer đã khởi tạo trước đó trên hệ thống vLB.
Hoặc sử dụng file mấu sau đây để deploy HTTP Apache Service với Internal LoadBalancer cho phép truy cập nội bộ trên cổng 8080:
apiVersion: apps/v1
kind: Deployment
metadata:
name: internal-http-apache2-deployment
spec:
replicas: 2
selector:
matchLabels:
app: apache2
template:
metadata:
labels:
app: apache2
spec:
containers:
- name: apache2
image: httpd
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: internal-http-apache2-service
annotations:
vks.vngcloud.vn/scheme: "internal" # MUST set like this to create an internal loadbalancer
spec:
selector:
app: apache2
type: LoadBalancer # MUST set like this to create an internal loadbalancer
ports:
- name: http
protocol: TCP
port: 8080 # CAN be accessed via this port with other service in the same VPC
targetPort: 80
Hoặc tập tin YAML mẫu để tạo Deployment và Service cho ứng dụng máy chủ UDP trong một cụm Kubernetes:
2.Nếu bạn đã có sẵn một Network Load Balancer đã khởi tạo trước đó trên hệ thống vLB và bạn muốn tái sử dụng NLB cho cluster của bạn.
Lúc này, bạn hãy nhập thông tin Load Balancer ID vào annotation vks.vngcloud.vn/load-balancer-id. Ví dụ dưới đây là tập tin YAML mẫu để triển khai Nginx với External LoadBalancer sử dụng vngcloud-controller-manager để tự động expose dịch vụ tới internet bằng bộ cân bằng tải L4 sử dụng một NLB có sẵn với ID = lb-2b9d8974-3760-4d60-8203-9671f229fb96
3.Sau khi một NLB mới đã được chúng tôi tự động khởi tạo, lúc này bạn có thể thực hiện
Chỉnh sửa cấu hình NLB của bạn theo hướng dẫn cụ thể tại Configure for a Network Load Balancer. Ví dụ như bên dưới, tôi đã thực hiện chỉnh sửa protocol và port như sau: