Kong是一款基於Nginx_Lua模塊寫的高可用,易擴展由Mashape公司開源的API Gateway項目。因爲Kong是基於Nginx的,因此能夠水平擴展多個Kong服務器,經過前置的負載均衡配置把請求均勻地分發到各個Server,來應對大批量的網絡請求。---官方描述說的比較牽強,不容易理解其含義,通俗理解就是集合插件的API網關第三方,相似於集成應用。webmin.wdcp.phpstudy--等。php
在咱們玩轉kong以前,咱們先了解一下api網關。html
API 網關,即API Gateway,是大型分佈式系統中,爲了保護內部服務而設計的一道屏障,能夠提供高性能、高可用的 API託管服務,從而幫助服務的開發者便捷地對外提供服務,而不用考慮安全控制、流量控制、審計日誌等問題,統一在網關層將安全認證,流量控制,審計日誌,黑白名單等實現。網關的下一層,是內部服務,內部服務只需開發和關注具體業務相關的實現。網關能夠提供API發佈、管理、維護等主要功能。開發者只須要簡單的配置操做便可把本身開發的服務發佈出去,同時置於網關的保護之下。java
Kong主要有三個組件:python
Kong採用插件機制進行功能定製,插件集(能夠是0或n個)在API請求響應循環的生命週期中被執行。插件使用Lua編寫,目前已有幾個基礎功能:HTTP基本認證、密鑰認證、CORS( Cross-origin Resource Sharing,跨域資源共享)、TCP、UDP、文件日誌、API請求限流、請求轉發以及nginx監控。linux
Kong 官網:https://getkong.org/ 插件介紹,幫助文檔等。nginx
Kong 源碼:https://github.com/Mashape/kong git
Kong UI管理工具:https://github.com/PGBI/kong-dashboard 瀏覽器UI管理工具github
Kong 桌面管理工具:https://github.com/ajaysreedhar/kongdash 有linux版本,windows版本,mac版本。web
社區資源和工具docker
能夠選擇不一樣的方式進行安裝 ->重要
以上是官方知識彙總以及我的總結經驗,若有不明白可發留言或郵件探討。
如下是基於本公司微服務api-gateway針對使用kong調研文檔,詳細以下
ong 是一個現成 的 api gateway 的解決方案,它在 nginx 上進行了開發。
api gateway 的實現方式有不少種,好比說 JVM 上能夠用基於NIO 的框架好比Netty,Vertx,Spring Reactor,JOSS Undertow。如今一個比較流程的沒有基於 JVM 的就是 NodeJs。其餘的還有 Nginx Plus。
如下介紹 Kong 的使用。
3.1 安裝 Kong
3.2 加入 API
3.1 安裝 Kong
參考:https://getkong.org/install/ ,裏面寫得比較詳細了,可是要預先安裝一個 Cassandra 數據庫(介紹:http://cassandra.apache.org/)。安裝以後,Kong 項目會監控兩個端口,一個是 8000,一個是 8001。 8000端口是能夠給用戶訪問,就是說用戶發送請求先到 Kong 項目的 8000 端口,而後Kong 項目幫你轉到你的後端應用api。 8001 端口是管理端口,好比說,管理員能夠經過 8001端口來獲得你加入過的 api。
3.2 加入 API
參考文檔:https://getkong.org/docs/0.5.x/admin-api/ , 裏面介紹了 api 的管理,包括 增刪查改。下面介紹我第一次 使用時 還有有些不清楚的點:
3.2.1 列出 所加過的 api
curl localhost:8001/apis/
3.2.2 加入 api
單個加入:
curl -i -X POST --url http://localhost:8001/apis/ --data 'upstream_url=http://camp.uats.cc' --data 'request_path=login'
上面這段命令表示:
--url:http://localhost:8001/apis/ 固定的,加入 api 就得寫這個,表示給 kong管理。
upstream_url:表示咱們的網站。至關於一個請求前綴。
request_path:就是具體咱們的 api。
利用request_host 部署所有的 api:
curl -i -X POST --url http://localhost:8001/apis/ --data 'upstream_url=http://183.131.76.124:4100/' --data 'request_host=183.131.76.122'
3.2.3 刪除 api
curl -i -X DELETE localhost:8001/apis/00f90ca9-cf2d-4830-c842-3b90f6cd08af
後面 這個串表示 加入的api的 id。