Tổng quan Plugin
Plugin mở rộng khả năng của API Gateway: xác thực request, bảo mật, kiểm soát lưu lượng hoặc biến đổi request trước khi chuyển tới backend. Mỗi plugin thuộc về một API Gateway và được áp dụng theo một phạm vi (Scope) do bạn chọn.
Các plugin hỗ trợ
| Plugin | Type | Dùng để | Hướng dẫn |
|---|---|---|---|
| JWT Auth | Authentication | Xác thực request bằng JSON Web Token của Consumer. | Plugin JWT Auth |
| OpenID Connect | Authentication | Xác thực qua Identity Provider bên ngoài (Keycloak, Auth0, Google, Okta…) theo OAuth 2.0 / OIDC. | Plugin OpenID Connect |
| Cors | Security | Gắn header CORS để trang web ở domain khác gọi được API từ trình duyệt. | Plugin CORS |
| Rate Limiting | Traffic Control | Giới hạn số request trong một khoảng thời gian. | Plugin Rate Limiting |
| Proxy Rewrite | Transformation | Viết lại host, path, method, header của request trước khi chuyển tới backend. | Plugin Proxy Rewrite |
Các bước thao tác, xem trang Thêm Plugin và trang hướng dẫn của từng plugin.
Phạm vi áp dụng
Khi tạo plugin, bạn chọn plugin áp dụng cho đâu tại mục Scope:
| Scope | Áp dụng cho | Cột Applied to trong danh sách |
|---|---|---|
| Global | Mọi Service, Route và Consumer của API Gateway. | Global |
| Scoped | Chỉ các Route / Service bạn chọn qua + Add Route / + Add Service. | Route, Service hoặc Route + Service |
Một plugin có thể gắn cho nhiều Route / Service. Khi thêm plugin từ màn hình chi tiết Route hoặc Service, bạn chọn dùng lại một plugin đã có (Select existing plugin) hoặc tạo mới (Create new plugin).
Plugin trực tiếp và plugin kế thừa
Tab Plugins trên màn hình chi tiết Route / Service chia 2 tab con:
| Tab con | Ý nghĩa |
|---|---|
| Explicit Plugin | Plugin gắn trực tiếp vào Route / Service đang xem. Bạn thêm plugin ở tab này. |
| Implicit Plugin | Plugin mà Route / Service được hưởng từ nơi khác, chỉ xem: plugin Global, hoặc plugin gắn vào Service mà Route đang dùng qua Via Service. |
Ví dụ: plugin Rate Limiting gắn vào Service order-service. Mọi Route chọn Via Service tới order-service đều thấy plugin này ở tab Implicit Plugin, bạn không phải gắn lại cho từng Route.
Plugin và các module khác
| Module | Liên quan tới Plugin |
|---|---|
| Route | Đối tượng của Scope. Tab Plugins có Explicit Plugin / Implicit Plugin, thêm plugin ngay tại đây. |
| Service | Đối tượng của Scope. Plugin gắn vào Service được các Route Via Service kế thừa. |
| Consumer | Plugin xác thực nhận diện request theo Credential của Consumer. Scope Global áp dụng cả Consumer. |
| Upstream | Không gắn plugin trực tiếp. Muốn áp dụng plugin cho request tới một Upstream, gắn plugin vào Route hoặc Service dùng Upstream đó. |
Kết hợp plugin thường gặp
Một số plugin chỉ phát huy tác dụng khi đi cùng thành phần khác:
| Mục tiêu | Cần có |
|---|---|
| Xác thực request bằng JWT | Plugin JWT Auth trên Route / Service + Consumer có JWT Credential. |
| Giới hạn request theo từng khách hàng | Plugin Rate Limiting với limit_by là consumer + một plugin xác thực (JWT Auth, OpenID Connect) trên cùng Route / Service. |
| Frontend ở domain khác gọi API có kèm token | Plugin Cors + JWT Auth, giữ run_on_preflight của JWT Auth là false. |
| Chuyển tên Consumer xuống backend | Plugin Proxy Rewrite dùng biến $consumer_name + một plugin xác thực chạy trước. |