Kong官方預置大量的插件,可以在Kong Hub查看官方插件,其中有三類插件,官方開發的開源插件;第三方開發的開源插件;適用於Kong Enterprise的收費插件。其中官方開發的開源插件有35個。
Kong安裝完成後已經預置了開源插件的代碼,可以在/usr/local/share/lua/5.1/kong/plugins目錄查看。也可以在Kong的github代碼庫https://github.com/Kong/kong/tree/master/kong/plugins中查看代碼。
cd /usr/local/share/lua/5.1/kong/plugins
ls
acl datadog ldap-auth rate-limiting syslog
aws-lambda file-log loggly request-size-limiting tcp-log
azure-functions hmac-auth log-serializers request-termination udp-log
base_plugin.lua http-log oauth2 request-transformer zipkin
basic-auth ip-restriction post-function response-ratelimiting
bot-detection jwt pre-function response-transformer
correlation-id key-auth prometheus session
cors kubernetes-sidecar-injector proxy-cache statsd
tree key-auth/
key-auth/
├── daos.lua
├── handler.lua
├── migrations
│ ├── 000_base_key_auth.lua
│ ├── 001_14_to_15.lua
│ ├── 002_130_to_140.lua
│ └── init.lua
└── schema.lua
1 directory, 7 files
以下給出官方開源插件的簡單介紹。
認證Authentication
- Basic Authentication:這是個基礎的認證功能,服務端設置用戶和密碼,客戶端發送請求時在header設置用戶和密碼,服務端接收到以後對請求進行校驗,如果通過,則處理請求,否則返回401 Unauthorized。
- Key Authentication:向服務或者路由添加Key Authentication,請求中需要攜帶API Key進行Key的驗證。
- LDAP Authentication:到LDAP服務器中認證用戶和密碼,需要在Proxy-Authorization或者Authorization請求header中包含用戶名和密碼的base64編碼。
- JWT:支持RS256和ES256算法。
- HMAC Authentication:可以用來保證數據的完整,客戶端把內容通過散列/哈希算法算出一個摘要,並把算法和內容以及摘要傳送給服務端,服務端按照該算法也算一遍,和摘要對比,如果一樣就認證內容是完整的,如果不一樣認爲內容被篡改了。
- OAuth 2.0 Authentication:支持OAuth2服務端功能,支持授權碼模式、客戶端模式、隱式模式和密碼模式。
- Session:可用於管理通過Kong API網關代理的API的瀏覽器會話,它爲會話數據存儲、加密、續訂、到期和瀏覽器Cookie提供配置和管理。
安全Security
- Bot Detection:是用來篩選發送請求的客戶端(瀏覽器)的,針對是User-Agent請求header,這個其實主要是針對機器人或者爬蟲的,支持黑白名單。
- CORS:支持跨源資源共享。
- IP Restriction:就是通過設置IP白名單和黑名單,根據源IP來對一些請求進行攔截和防護。支持單IP、多IP或者CIDR(192.168.23.35/24) 。
流量控制Traffic Controll
- ACL:和Base-auth、Key-Auth等插件配合,只有符合ACL策略的用戶可以訪問上游服務。
- Proxy Cache:可以根據配置的HTTP Code、Method、content_type來緩存響應實體。它可以根據consumer或者API緩存。
- Rate Limiting:在給定的秒、分鐘、小時、日、月或年的時間內可以發出多少HTTP請求。
- Request Size Limiting:如果請求的body小於設定大小字節,則接受、否則拒絕。
- Request Termination:可以暫停客戶端訪問Service或者Route。
- Response Rate Limiting:可以根據上游服務返回的自定義響應頭來限制可以進行的請求數,在給定的秒、分鐘、小時、天、月或年限制請求。
分析和監控Analytics和Monitoring
- Datadog
- Prometheus
- Zipkin
轉換Transformations
- Correlation ID:通過在報文頭中添加一個UUID將HTTP請求和迴應關聯起來。
- Request Transformer:在將請求轉發給上游服務之前,轉換客戶端發送的請求。可以對Method、Header、querystring和body執行remove -> rename -> replace -> add -> append(按以上順序優先)動作。
- Response Transformer:在將響應返回給客戶端之前,轉換上游服務發送響應。可以對header或者json body執行remove -> rename -> replace -> add -> append(按以上順序優先)動作。
日誌Logging
- File Log:將請求和響應數據記錄到磁盤上的日誌文件中(不建議使用)。
- HTTP Log:將請求和響應數據轉發到http服務器。
- Loggly:將請求和響應數據通過UDP轉發到Loggly服務器。Loggly是一款日誌集中管理軟件。
- StatsD:將對Service、Route的度量指標信息轉發給StatsD服務。StatsD是一款數據採集工具。
- Syslog:將請求和響應數據轉發到syslog服務器。
- TCP Log:將請求和響應數據轉發到TCP服務器。
- UDP Log:將請求和響應數據轉發到UDP服務器。