Bộ điều khiển YARP Kubernetes Ingress (Kubernetes Ingress Controller)
Giới thiệu: Xem trước trong tương lai
YARP có thể được tích hợp với Kubernetes (hệ thống điều phối container) như một reverse proxy (proxy ngược) quản lý lưu lượng HTTP/HTTPS đến một cụm Kubernetes. Hiện tại, module này được đóng gói thành một gói riêng biệt và đang ở giai đoạn preview (xem trước).
Điều kiện tiên quyết
Trước khi tiếp tục với hướng dẫn này, hãy đảm bảo bạn đã chuẩn bị sẵn những điều sau:
- Cài đặt Docker phù hợp với hệ điều hành của bạn.
- Một container registry (kho chứa container). Docker mặc định sẽ tạo một container registry trên DockerHub. Bạn cũng có thể dùng Azure Container Registry hoặc container registry khác tùy chọn, chẳng hạn như local registry để thử nghiệm.
- Một cụm Kubernetes (Kubernetes Cluster). Có nhiều lựa chọn khác nhau, bao gồm:
- Azure Kubernetes Service
- Kubernetes trong Docker Desktop, tuy nhiên nó chiếm khá nhiều bộ nhớ trên máy, hãy dùng thận trọng.
- Minikube
- K3s, một bản phân phối Kubernetes được chứng nhận nhẹ dạng single-binary từ Rancher.
- Các nhà cung cấp Kubernetes khác tùy chọn.
Nếu bạn chọn một container registry được cung cấp bởi nhà cung cấp đám mây khác ngoài Dockerhub, có thể bạn phải thực hiện các bước để cấu hình cụm Kubernetes của mình cho phép truy cập. Hãy làm theo hướng dẫn do nhà cung cấp đám mây của bạn cung cấp.
Bắt đầu
Hiện tại, chưa có Docker image chính thức nào cho YARP ingress controller.
Trong thời gian chờ đợi, YARP ingress controller (bộ điều khiển ingress YARP) phải được build cục bộ và triển khai. Trong thư mục gốc của repository (kho lưu trữ mã nguồn), chạy:
docker build . -t {REGISTRY_NAME}/yarp-controller:{TAG} -f .\src\Kubernetes.Controller\Dockerfile
docker push {REGISTRY_NAME}/yarp-controller:{TAG}Trong các lệnh trên, placeholder (ký tự giữ chỗ) {REGISTRY_NAME} là tên của Docker registry, và placeholder {TAG} là tag (nhãn) cho image (ví dụ: 1.0.0).
Bước đầu tiên là triển khai YARP ingress controller vào cụm Kubernetes. Bạn có thể thực hiện bằng cách điều hướng đến Kubernetes Ingress sample tại đường dẫn \samples\KubernetesIngress.Sample\Ingress và chạy (sau khi chỉnh sửa ingress-controller.yaml với cùng REGISTRY_NAME và TAG):
kubectl apply -f ingress-controller.yaml
Để xác minh ingress controller đã được triển khai, chạy:
kubectl get pods -n yarp
Bạn có thể kiểm tra log (nhật ký) từ ingress controller bằng cách chạy:
kubectl logs {POD NAME} -n yarpTất cả services (dịch vụ), deployments (triển khai), và pods (đơn vị chạy container) của YARP đều nằm trong namespace (không gian tên) yarp. Hãy nhớ thêm -n yarp nếu bạn muốn kiểm tra trạng thái của yarp.
Tiếp theo, build và triển khai ingress. Trong thư mục gốc của repository, chạy:
docker build . -t {REGISTRY_NAME}/yarp:<TAG> -f .\samples\KuberenetesIngress.Sample\Ingress\Dockerfile
docker push {REGISTRY_NAME}/yarp:{TAG}Trong các lệnh trên, placeholder {REGISTRY_NAME} là tên của Docker registry, và placeholder {TAG} là tag cho image (ví dụ: 1.0.0).
Cuối cùng, chúng ta cần triển khai chính ingress đó vào Kubernetes. Điều hướng đến thư mục Ingress và chỉnh sửa file ingress.yaml với registry và tag đã chỉ định trước đó, sau đó chạy:
kubectl apply -f .\ingress.yaml
Tại thời điểm này, ingress và controller của bạn sẽ đang chạy.
Triển khai ứng dụng
Để sử dụng ingress, chúng ta cần triển khai một ứng dụng lên Kubernetes. Điều hướng đến samples\KuberenetesIngress.Sample\backend và chạy:
docker build . -t {REGISTRY_NAME}/backend:{TAG}
docker push {REGISTRY_NAME}/backend:{TAG}Và triển khai nó lên Kubernetes bằng cách chạy, sau khi chỉnh sửa backend.yaml với cùng tên registry ({REGISTRY_NAME}) và tag ({TAG}):
kubectl apply -f .\backend.yaml
Tạo định nghĩa ingress
Cuối cùng, khi đã triển khai ứng dụng backend, chúng ta cần định tuyến lưu lượng đến backend. Để thực hiện, chạy trong thư mục backend:
kubectl apply -f .\ingress-sample.yaml
Sau đó thực hiện lệnh sau để lấy địa chỉ IP bên ngoài của ingress, với tên service liên quan là yarp-proxy:
kubectl get service -n yarp
Nếu bạn đang sử dụng cụm K8s cục bộ và không nhận được địa chỉ IP bên ngoài, bạn có thể cần tránh sử dụng cổng mặc định port: 80 cho service yarp-proxy. Nếu vậy, hãy thử cập nhật file ingress.yaml để sử dụng cổng khác (ví dụ: port: 8085) và triển khai lại ingress lên Kubernetes.
Điều hướng đến địa chỉ IP bên ngoài, và bạn sẽ thấy thông tin backend.