Kong 是在客戶端和(微)服務間轉發 API 通訊的 API 網關,經過插件擴展功能。Kong 有html
兩個主要組件:
Kong Server :基於 nginx 的服務器,用來接收 API 請求。
Apache Cassandra :用來存儲操做數據。
你能夠經過增長更多 Kong Server 機器對 Kong 服務進行水平擴展,經過前置的負載均衡器向這些機器分發請求。根據文檔描述,兩個 Cassandra 節點就足以支撐絕大多數狀況,但若是網絡很是擁擠,能夠考慮適當增長更多節點。mysql
對於開源社區來講,Kong 中最誘人的一個特性是能夠經過插件擴展已有功能,這些插件在 API 請求響應循環的生命週期中被執行。插件使用 Lua 編寫,並且 Kong 還有以下幾個基礎功能:HTTP 基本認證、密鑰認證、CORS( Cross-origin Resource Sharing,跨域資源共享)、TCP、UDP、文件日誌、API 請求限流、請求轉發以及 nginx 監控。nginx
Kong 包可運行在某些 Linux 發行版、Mac OS X 和 Docker 中,不管是本地機仍是雲端服務器皆可運行。git
除了免費的開源版本,Mashape 還提供了付費的企業版,其中包括技術支持、使用培訓服務以及API 分析插件。github
安裝前準備web
安裝好docker穩定版本
會docker 的基本使用
瞭解kong概念和使用(文檔地址: https://getkong.org/docs/)
概念術語
upstream: 是對上游服務器的抽象;
target: 表明了一個物理服務,是 ip + port 的抽象;
service: 是抽象層面的服務,他能夠直接映射到一個物理服務(host 指向 ip + port),也能夠指向一個 upstream 來作到負載均衡;
route: 是路由的抽象,他負責將實際的 request 映射到 service。
默認狀況下,KONG監聽的端口爲:
8000: 此端口是KONG用來監聽來自客戶端傳入的HTTP請求,並將此請求轉發到上有服務器;
8443: 此端口是KONG用來監聽來自客戶端傳入的HTTP請求的。它跟8000端口的功能相似,可是它只是用來監聽HTTP請求的,沒有轉發功能。能夠經過修改配置文件來禁止它;
8001: Admin API,經過此端口,管理者能夠對KONG的監聽服務進行配置;
8444: 經過此端口,管理者能夠對HTTP請求進行監控.sql
Kong安裝mongodb
這裏以0.13.x 以上的版本爲例子,廢棄了API實體對象的使用。
建立docker網絡docker
docker network create kong-net
安裝數據庫,kong支持 postgres( postgres9.5以上)和Apache Cassandra
建立啓動數據庫,這裏以postgres9.5做爲數據庫來存儲數據,以下:數據庫
$ docker run -d --name kong-database \ --network=kong-net \ -p 5432:5432 \ -e "POSTGRES_USER=kong" \ -e "POSTGRES_DB=kong" \ postgres:9.6
數據庫準備,初始化Kong數據
docker run --rm \ --network=kong-net \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=kong-database" \ kong:0.14.1 kong migrations up
啓動kong
docker run -d --name kong \ --network=kong-net \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=kong-database" \ -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \ -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \ -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \ -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \ -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \ -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \ -p 8000:8000 \ -p 8443:8443 \ -p 8001:8001 \ -p 8444:8444 \ kong:0.14.1
查看kong是否正在運行
$ curl -i http://localhost:8001如出現如下則表示沒問題:
經過Restful Admin API 管理kong,參考地址:https://docs.konghq.com/0.14.x/admin-api/
啓動Kong Dashboard 或者 konga
官方推出了dashboard來管理Kong,界面清爽,使用方便,咱們接着往下看。
建立並運行Kong dashboard容器
docker run -d \ --network=kong-net \ --link kong:kong -p 8008:8080 pgbi/kong-dashboard start \ --kong-url http://kong:8001 \ --basic-auth kong=kong
而後訪問 http://IP:8008
登陸帳號:kong 密碼:kong,以下圖:
Konga安裝過程
當前KONG的社區版是沒有dashboard的,可是付費的企業版是有帶的,而且還有一些企業版才能使用的插件以及升級後的企業版插件。因此對於使用社區版的用戶而言,排除本身去擼一個dashboard的這種選擇,第三方開源的dashboard無疑是首選。當前GitHub上還在更新維護的dashboard有三個,分別是kong-dashboard,kongdash 和 konga。
說道Kong的管理GUI,網上說的比較多的都是kong-dashboard,但目前最新版(v3.6.0)彷佛並未支持最新版本的Kong。而目前在github能找到star比較多的就是konga了。konga不只支持了Kong的最新版本(service和route的拆分新特性)同時支持管理員的權限控制和多個Kong鏈接池的管理。Konga因爲自帶了用戶權限控制和Kong鏈接池管理,因此須要一些數據持久化處理。默認支持的數據庫有mongodb、postgres、mysql。這裏咱們選擇的是PostgresSQL,緣由是KONG鏈接的數據庫也是PGSQL,這樣能夠減小數據庫的部署。
啓動一個容器準備Konga的數據庫
docker run --rm --network=kong-net pantsel/konga -c prepare -a postgres -u postgresql://kong@kong-database:5432/konga_db
當遷移運行了,咱們能夠啓動 Konga
docker run -p 1337:1337 \ --network=kong-net \ -e "DB_ADAPTER=postgres" \ -e "DB_HOST=kong-database" \ -e "DB_USER=kong" \ -e "DB_DATABASE=konga_db" \ -e "KONGA_HOOK_TIMEOUT=120000" \ -e "NODE_ENV=production" \ --name konga \ pantsel/konga After a while, Konga will be available at:
啓動postgre admin 4
建立並運行postgre admin 4容器
docker run -d -p 8009:80 \ --network=kong-net \ --link kong-database:kong-database \ -e "PGADMIN_DEFAULT_EMAIL=admin@admin.com" \ -e "PGADMIN_DEFAULT_PASSWORD=admin@admin.com" \ -d dpage/pgadmin4
而後訪問 http://IP:8009
登陸帳號:admin@admin.com,密碼:admin@admin.com
建立server,起個名字Host=XXX port:5432 用戶名密碼爲kong
參考文檔
1.kong官方文檔:https://getkong.org/docs/
2.docker安裝kong:http://www.javashuo.com/article/p-ravrisjj-kr.html
3.選擇Kong做爲你的API網關:https://www.itcodemonkey.com/article/5980.html