Bài 7: Dùng Kong Gateway để triển khai API Gateway cho hệ thống Microservices trên Microk8s
Chào các bạn, Tiếp tục series microk8s thì đây là phần mình Reseach lâu nhất và cách deploy một kiến trúc microservices
KONG là gì?
-
Kong là bộ Microservice API Gateway. Kong cung cấp một lớp cấu hình linh hoạt quản lý an toàn giao tiếp giữa máy khách và microservice thông qua API. Còn được gọi là cổng API, phần mềm trung gian API hoặc trong một số trường hợp lưới dịch vụ. Nó có sẵn dưới dạng dự án nguồn mở vào năm 2015, các giá trị cốt lõi của nó là hiệu suất cao và khả năng mở rộng.
-
Kong là một ứng dụng Lua chạy trong Nginx và được thực hiện nhờ lua-nginx-module
Tại sao chúng ta lại sử dụng KONG
Nếu bạn đang xây dựng cho Web, Mobile hoặc IoT (Internet of Things), bạn có thể sẽ cần phải có chức năng chung để chạy phần mềm thực tế của bạn. Kong có thể giúp bằng cách đóng vai trò là cổng (hoặc sidecar) cho các yêu cầu microservice trong khi cung cấp cân bằng tải, ghi nhật ký, xác thực, giới hạn tốc độ, biến đổi và nhiều hơn nữa thông qua các plugin.
Nhưng chắc chắn, Kong là công cụ mẫu sẽ giúp tăng tốc thời gian phát triển và nó là hỗ trợ các plugin có thể định cấu hình. Và cộng đồng hỗ trợ phát triển và làm cho nó ổn định.
-
Rất nhiều plugin xác thực
- JWT
- LDAP (được sử dụng nhiều nhất)
- OAuth2
-
Puglin Bảo mật:
- CL
- CORS
- Dynamic SSL
- IP Restriction
-
Plugin kiểm soát Traffic là một rất hữu ích cho chi phí hạn chế như giới hạn tỷ lệ, giới hạn kích thước yêu cầu, giới hạn tốc độ phản hồi và những người khác.
-
Plugin Analytics and monitoring trực quan hóa, kiểm tra và giám sát lưu lượng API như Prometheus, Data Dog và RunScope.
-
Transformation plugin that transform request and responses on the fly such as Request Transformer, Response Transformer.
-
Logging plugin that log request and response data using the best transport for your infrastructure: TCP, UDP, HTTP, StatsD, Syslog and others.
Mình đã giới thiệu sơ lượt về Kong API Gateway , bạn có thể tham khảo thêm ở trang chủ https://konghq.com/
Bây giờ mình thực hiện cấu hình như sau:
Trong bài trước thì mình đã hướng dẫn các bạn build 2 image service01 và service02.
Bài 6: Cấu hình Jenkins trên Ubuntu 22.04 và viết Pipeline Build Service
IP | Hostname | vCPU | RAM | DISK |
---|---|---|---|---|
127.0.0.1 | Host | 8 core | 32G | SSD 500G |
192.168.56.2 | microk8s-master-1 | 1 core | 2G | 50G |
192.168.56.3 | microk8s-master-2 | 1 core | 2G | 50G |
192.168.56.4 | microk8s-master-3 | 1 core | 2G | 50G |
192.168.56.5 | microk8s-worker-1 | 1 core | 2G | 50G |
192.168.56.6 | microk8s-worker-2 | 1 core | 2G | 50G |
192.168.56.7 | microk8s-worker-3 | 1 core | 2G | 50G |
192.168.56.8 | microk8s-worker-4 | 1 core | 2G | 50G |
Hiện tại Kong hỗ trợ cài đặt có dùng databases (DB-mode) hoặc không dùng database (DB-less-mode)
Ở đây mình sử dụng DB-less-mode để lưu cấu hình Kong
Bước 1: Cấu hình Kong Controller Ingress
ssh ubuntu@192.168.56.2
Chúng ta tiến hình apply kong controller ingress, ở đây mình có nghiên cứu nhiều bài viết và đưa ra một file chuẩn bên dưới, các bạn có thể lấy chạy luôn hoặc là custom theo yêu cầu của các bạn, để thực hiện ta sử dụng lệnh như sau
microk8s kubectl apply -f https://gist.githubusercontent.com/tdduydev/2b875c579a2ef53f68053e4e5af5b90b/raw/deef2792d33db7fb62c784421c447731f1d5808d/all-in-one-dbless.yaml
Nội dung tiệp all-in-one-dbless.yaml
Tiếp tục apply cấu hình kong ingress
microk8s kubectl apply -f https://gist.githubusercontent.com/tdduydev/1d8c8f270e28d022cd6cdfb06b6a4484/raw/02ba2bdc5c5c6ae0996a40340e6f3a0e6bc965c2/kong-ingress.yaml
Nội dung tiệp kong-ingress.yaml
Bước 2: Cấu hình service01 và service02
Service01
microk8s kubectl apply -f https://gist.githubusercontent.com/tdduydev/e1e50da183eff226f7b2fc5e39781d8c/raw/97eb61e0debbd76a9c42f61e01e47054653334c9/service01-deployment.yaml
Nội dung tiệp service01-deployment.yaml
Service02
microk8s kubectl apply -f https://gist.githubusercontent.com/tdduydev/e3b20b53d33302d654cd1b058a283562/raw/44553ddf0f142431fc1c394a25e89c8a4e513255/service02-deployment.yaml
Nội dung tiệp service02-deployment.yaml
Bước 3: Cấu hình Kong ingress cho Service01 và Service02
Service01
microk8s kubectl apply -f https://gist.githubusercontent.com/tdduydev/0f43b50aeed7d1a2cd51cc6dcf307ace/raw/f70bab1ac04d98280777e21821ca530690403285/kong-ingress-service01.yaml
Nội dung tiệp kong-ingress-service01.yaml
Service02
microk8s kubectl apply -f https://gist.githubusercontent.com/tdduydev/6e366ab62b4d01e84352f3e616627201/raw/a49523cc901736875e7af33e0b54d633fc2c927c/kong-ingress-service02.yaml
Nội dung tiệp kong-ingress-service02.yaml
Sau khi apply cấu hình thành công ta check cấu hình có đúng hay không bằng cách vào đường dẫn:
Cấu hình Custom Config Kong ingress
Ở đây mình tăng set connect_timeout, read_timeout, write_timeout các bạn dùng lệnh
microk8s kubectl apply -f https://gist.githubusercontent.com/tdduydev/61b2dce63558ccfed18b6095abc06ed6/raw/6cca022d014c919153ef66a8bd8eb5634c4cec28/timeout-kong-ingress.yaml
Nội dung file timeout-kong-ingress.yaml
Như vậy mình đã tăng timeout của ingress thành công
Các bạn có thể tìm hiểu thêm ở đường dẫn : https://docs.konghq.com/kubernetes-ingress-controller/latest/references/custom-resources/
Cấu hình Kubernetes Ingress Controller annotations
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: service02
namespace: kong
annotations: #<- Thêm vào đây
konghq.com/strip-path: "true" #
konghq.com/preserve-host: "false
spec:
ingressClassName: kong
rules:
- http:
paths:
- path: /service02
pathType: Prefix
backend:
service:
name: service02
port:
number: 5000
Các bạn tìm ở đây các cấu hình tường service của mình cần: https://docs.konghq.com/kubernetes-ingress-controller/latest/references/custom-resources/
Cấu hình plugin zipkin distributed tracing system
Lưu ý bạn cần cài đặt trước zipkin server, mình có hướng dẫn ở bài 8.
Chúng ta apply cấu hình Kong bằng lệnh
microk8s kubectl apply -f https://gist.githubusercontent.com/tdduydev/c5af0e748628ca778740451da9e1d783/raw/62ca7641ebe3d939a93c53a91cceb734d8893c3e/kong-plugin-zipkin.yaml
Nội dung tiệp kong-plugin-zipkin.yaml
Như vậy bạn đã cấu hình thành công kong plugin zipkin, bây giờ bạn có thể theo dõi tất cả request tới api thông qua Kong
Như vậy các bạn đã tiến hành cài đặt thành công Kong Api Gateway
❤️❤️❤️ Hôm nay mùng 1 tết năm con Mèo 2023, Chúc mọi người một các tết vui vẻ bên gia đình ❤️❤️❤️
All rights reserved