API Gateway Kong在Rainbond上的部署
[TOC]
什麼是Kong

Kong是一個可擴充的開源API平台(也稱為API網關,API中間件或微服務服務網格)。Kong最初是由
Kong Inc.(以前稱為Mashape)實作的,用于為其API Marketplace維護、管理和擴充超過15,000個微服務,這些微服務每月産生數十億個請求。
技術上講,Kong是在Nginx中運作的Lua應用程式,并且通過
lua-nginx-module實作。Kong是與
OpenResty一起分發的,而不是使用此子產品來編譯Nginx,
已經包括lua-nginx-module。
了解更多有關Kong的事情,你需要點選
了解一下。
從應用市場安裝
快速安裝
目前我們已經将最新版本(v1.4.X)的Kong釋出到了應用市場,如果你想要快速的搭建以及使用Kong,你隻需要做一件事情,那就是點選一下安裝:
等待一小段時間後,Kong就已經部署在了你的Rainbond叢集中了。在這個應用中,我們已經內建了
Konga作為UI管理工具,接下來的步驟,需要你通路Konga,做幾步簡單的設定,就可以愉快的探索Kong了。
- 注冊Konga
- 配置Kong的連接配接位址,寫入
即可http://127.0.0.1:8001
- 連接配接成功,就可以使用Konga來管理你的Kong了
注意事項
- 如果你所使用的Rainbond平台,是在2019年12月25日以前安裝的,并且沒有進行過任何更新操作,那麼你可能遇到Konga連接配接不到Kong的問題,解決的方案如下:
- Kong的啟動很消耗記憶體
配置Kong
環境變量
Kong支援以
KONG_
開頭的環境變量進行配置。舉例說明:
對于部署在Rainbond上的Kong來說,直接
添加環境變量KONG_LOG_LEVEL = error
即可在Kong的配置檔案中生成
log_level = error
添加完成後,點選更新,即可使之生效。
注入Nginx配置
通過調整Kong執行個體的Nginx配置,可以優化其基礎架構的性能。
Kong啟動時,将建構一個Nginx配置檔案。你可以通過Kong配置直接将自定義Nginx配置注入此檔案。
注入單個Nginx配置
Kong的配置檔案中的任何字首為的條目
nginx_http_
,
nginx_proxy_
或
nginx_admin_
通過删除字首将其轉換為等效的Nginx指令,并将其添加到Nginx配置的相應部分:
- 字首為的條目
将注入到整體nginx_http_
塊指令中。http
-
将注入到nginx_proxy_
處理Kong代理端口的block指令中。server
-
nginx_admin_
處理Kong的Admin API端口的block指令中。server
例如,如果将以下行添加到
kong.conf
檔案中:
nginx_proxy_large_client_header_buffers=16 128k
它将以下指令添加到
server
Kong的Nginx配置的代理塊中:
large_client_header_buffers 16 128k;
為了達到這個目的,你需要參考
,為Kong添加以下環境變量:
KONG_NGINX_HTTP_OUTPUT_BUFFERS = "4 64k"
通過注入的Nginx指令包含檔案
對于更複雜的配置方案,例如添加整個新
server
塊,可以使用上述方法
include
向Nginx配置注入 指令,指向包含其他Nginx設定的檔案。
可以通過在
kong.conf
檔案中添加以下條目來包含目标檔案:
nginx_http_include = /path/to/your/my-server.kong.conf
在Rainbond上,可以通過環境變量進行配置:
KONG_NGINX_HTTP_INCLUDE="/path/to/your/my-server.kong.conf"
Kong應用怎麼制作
即點即用的Kong,使用起來非常友善。那麼這個應用是怎麼制作的呢?
我們隻需要做到以下幾點,就可以釋出出可以即點即用的雲市場應用:
- 目标應用的所有元件都已經部署在Rainbond并正常運作
- 各服務元件使用的資料庫具備自動初始化資料的功能
- 各服務元件間的依賴關系已經處理妥當,從業務層面已經正常運作
接下來,隻需要參考
應用分享與釋出,将你的應用釋出出去即可。
資料庫自動初始化
Kong可以使用的資料庫包括
Postgres與Cassandra
,我們這裡使用了前者。
首先利用docker run 指令快速部署一個Postgresql:
docker run -d --name kong-database \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
postgres:9.6
使用Kong的鏡像,即可初始化資料庫表結構,在部署初始化元件時,要記得建立從
kong-init
指向
kong-database
的依賴關系:
docker run --rm \
--name kong-init \
--link kong-database:kong-database \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=127.0.0.1" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong kong migrations bootstrap
kong-init
運作完成後會自動退出,在Rainbond上顯示運作異常,不用擔心,它已經完成了使命,驗證下
kong-database
中已存在資料表結構,就可以删除
kong-init
了。
進入
kong-database
的容器執行個體,通過指令行工具備份出資料庫。
pg_dump -U kong -d kong > /var/lib/postgresql/data/data.sql
找到
kong-database
的資料持久化目錄,得到
data.sql
kong-database
的使命也就達成了,可以被關閉删除。
自定義一個代碼倉庫,參考
https://github.com/dazuimao1990/pri-postgresql/tree/kong将
data.sql
放到
sql
目錄下,即可用這份代碼建立一個可以自動初始化表結構的Postgresql了。建立之,命名為
kong-postgres
備用。
部署Kong
直接使用docker run 指令建立Kong,要記得建立從
Kong
kong-postgres
docker run -d --name kong \
--link kong-database:kong-database \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=127.0.0.1" \
-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
記憶體至少提高至4G。
部署Konga
直接使用docker run 指令建立Konga,要記得建立從
Konga
Kong
docker run -p 1337:1337 \
--name konga \
pantsel/konga
完成後,最終拓撲将會是這個樣子的:
釋出應用
點選
釋出到市場
,編輯它的資訊,即可釋出了。