+15

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.

image.png

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

    1. JWT
    2. LDAP (được sử dụng nhiều nhất)
    3. OAuth2
  • Puglin Bảo mật:

    1. CL
    2. CORS
    3. Dynamic SSL
    4. 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)

image.png

Ở đâ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

Screenshot 2023-01-22 at 1.11.16 AM.png

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

Screenshot 2023-01-22 at 1.12.22 AM.png

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

Screenshot 2023-01-22 at 1.14.59 AM.png

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

Screenshot 2023-01-22 at 1.30.00 AM.png

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

Screenshot 2023-01-22 at 1.32.27 AM.png

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:

  1. http://192.168.56.5/service01

Screenshot 2023-01-22 at 1.35.42 AM.png

  1. http://192.168.56.5/service02

Screenshot 2023-01-22 at 1.36.12 AM.png

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

Screenshot 2023-01-24 at 10.25.24 AM.png

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

Screenshot 2023-01-27 at 2.30.05 PM.png

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

image.png

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

Viblo
Let's register a Viblo Account to get more interesting posts.