最近研究kong,這裏記錄一下
1、說明
Nginx、OpenRestry、Kong這三個項目緊密相連:
- Nginx是模塊化設計的反向代理軟件,C語言開發;
- OpenResty是以Nginx爲核心的Web開發平臺,可以解析執行Lua腳本(OpenResty與Lua的關係,類似於Jvm與Java,不過Java可以做的事情太多了,OpenResty主要用來做Web、API等);
- Kong是一個OpenResty應用,是一個api gateway,具有API管理和請求代理的功能。
1.1 git地址
1.2 kong安裝說明
https://docs.konghq.com/install/source/
1.3 openssl
https://www.openssl.org/source/
2 下載lua-kong-nginx-module
https://github.com/Kong/lua-kong-nginx-module
3. 安裝OpenResty
https://openresty.org/en/download.html
./configure \
--prefix=/home1/zcy/kong/openresty \
--with-pcre-jit \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_v2_module \
--with-openssl=/home1/zcy/kong/openssl-1.1.1c \
--add-module=/home1/zcy/kong/lua-kong-nginx-module
報錯:you need to have ldconfig in your PATH env when enabling luajit
解決方法:編輯Makefile文件,將can_run("ldconfig")改成can_run("/sbin/ldconfig")
4 安裝Luarocks
./configure \
--lua-suffix=jit \
--with-lua=/home1/zcy/kong/openresty/luajit \
--with-lua-include=/home1/zcy/kong/openresty/luajit/include/luajit-2.1 \
--prefix=/home1/zcy/kong/luarocks
配置環境:
export PATH=$PATH:/home1/zcy/kong/openresty/bin:/home1/zcy/kong/luarocks/bin:
export LUA_PATH="/home1/zcy/kong/luarocks/share/lua/5.1/?.lua;;/home1/zcy/kong/luarocks/share/lua/5.1/?/init.lua;"
5. 安裝kong
luarocks 安裝:
$luarocks make kong-*.rockspec
or
$luarocks install kong 2.0.2-0
或者
$ git clone [email protected]:Kong/kong.git
$ cd kong
$ [sudo] make install # this simply runs the `luarocks make kong-*.rockspec` command
install成功
lua-resty-lrucache 0.09-2 is now installed in /home1/zcy/kong/luarocks (license: 2bsd)
lua-resty-acme 0.4.3-1 depends on lua-resty-openssl >= 0.2.1-1 (0.4.4-1 installed)
lua-resty-acme 0.4.3-1 is now installed in /home1/zcy/kong/luarocks (license: BSD)
kong-plugin-acme 0.2.2-1 is now installed in /home1/zcy/kong/luarocks (license: Apache 2.0)
kong 2.0.2-0 is now installed in /home1/zcy/kong/luarocks (license: Apache 2.0)
創建kong的數據庫:
./bin/kong migrations up -c ./kong.conf
啓動kong:
./bin/kong start -c ./kong.conf
kong默認的代理地址是:
proxy_listen = 0.0.0.0:8000, 0.0.0.0:8443
默認的管理地址是:
admin_listen = 127.0.0.1:8001, 127.0.0.1:8444 ssl
驗證Kong
如果一切順利,你應該看到一條消息通知你Kong正在運行。
默認情況下,Kong監聽以下端口:
- 8000:監聽來自Client的傳入流量,並將其轉發到上游服務
- 8443:與8000端口類似,它監聽HTTPS流量
- 8001:Admin API用於配置Kong監聽
- 8444:Admin API監聽HTTPS流量
6. 報錯解決
6.1 編譯報錯,缺少lyaml
Error: Failed installing dependency: https://luarocks.org/lyaml-6.2.4-1.src.rock - Could not find library file for YAML
No file libyaml.a in /usr/local/lib
No file libyaml.a in /usr/local/lib64
No file libyaml.so in /usr/local/lib
No file libyaml.so in /usr/local/lib64
No file matching libyaml.so.* in /usr/local/lib
No file matching libyaml.so.* in /usr/local/lib64
No file libyaml.a in /usr/lib
No file libyaml.a in /usr/lib64
No file libyaml.so in /usr/lib
No file libyaml.so in /usr/lib64
No file matching libyaml.so.* in /usr/lib
No file matching libyaml.so.* in /usr/lib64
No file libyaml.a in /lib
No file libyaml.a in /lib64
No file libyaml.so in /lib
No file libyaml.so in /lib64
No file matching libyaml.so.* in /lib
No file matching libyaml.so.* in /lib64
You may have to install YAML in your system and/or pass YAML_DIR or YAML_LIBDIR to the luarocks command.
Example: luarocks install lyaml YAML_DIR=/usr/local
make: *** [install] Error 1
安裝libyaml
# yum downgrade libyaml
# yum install libyaml-devel
6.2 啓動報錯
$ kong start -c ./kong.conf 報錯
Error: module 'resty.kong.tls' not found:No LuaRocks module found for resty.kong.tls
no field package.preload['resty.kong.tls']
no file './resty/kong/tls.lua'
no file './resty/kong/tls/init.lua'
no file '/home1/zcy/kong/openresty/site/lualib/resty/kong/tls.ljbc'
no file '/home1/zcy/kong/openresty/site/lualib/resty/kong/tls/init.ljbc'
no file '/home1/zcy/kong/openresty/lualib/resty/kong/tls.ljbc'
no file '/home1/zcy/kong/openresty/lualib/resty/kong/tls/init.ljbc'
no file '/home1/zcy/kong/openresty/site/lualib/resty/kong/tls.lua'
no file '/home1/zcy/kong/openresty/site/lualib/resty/kong/tls/init.lua'
no file '/home1/zcy/kong/openresty/lualib/resty/kong/tls.lua'
no file '/home1/zcy/kong/openresty/lualib/resty/kong/tls/init.lua'
no file '/home1/zcy/kong/luarocks/share/lua/5.1/resty/kong/tls.lua'
no file './resty/kong/tls.lua'
no file '/home1/zcy/kong/openresty/luajit/share/luajit-2.1.0-beta3/resty/kong/tls.lua'
no file '/usr/local/share/lua/5.1/resty/kong/tls.lua'
no file '/usr/local/share/lua/5.1/resty/kong/tls/init.lua'
no file '/home1/zcy/kong/openresty/luajit/share/lua/5.1/resty/kong/tls.lua'
no file '/home1/zcy/kong/openresty/luajit/share/lua/5.1/resty/kong/tls/init.lua'
no file '/home1/zcy/kong/luarocks/share/lua/5.1/resty/kong/tls/init.lua'
no file '/home1/zcy/.luarocks/share/lua/5.1/resty/kong/tls.lua'
no file '/home1/zcy/.luarocks/share/lua/5.1/resty/kong/tls/init.lua'
no file '/home1/zcy/kong/openresty/site/lualib/resty/kong/tls.so'
no file '/home1/zcy/kong/openresty/lualib/resty/kong/tls.so'
no file './resty/kong/tls.so'
no file '/usr/local/lib/lua/5.1/resty/kong/tls.so'
no file '/home1/zcy/kong/openresty/luajit/lib/lua/5.1/resty/kong/tls.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
no file '/home1/zcy/.luarocks/lib/lua/5.1/resty/kong/tls.so'
no file '/home1/zcy/kong/luarocks/lib/lua/5.1/resty/kong/tls.so'
no file '/home1/zcy/kong/openresty/site/lualib/resty.so'
no file '/home1/zcy/kong/openresty/lualib/resty.so'
no file './resty.so'
no file '/usr/local/lib/lua/5.1/resty.so'
no file '/home1/zcy/kong/openresty/luajit/lib/lua/5.1/resty.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
no file '/home1/zcy/.luarocks/lib/lua/5.1/resty.so'
no file '/home1/zcy/kong/luarocks/lib/lua/5.1/resty.so'
Run with --v (verbose) or --vv (debug) for more details
原因:是kong啓動時會在預先設置的路徑中加載tls.lua和init.lua模塊,而搜索完所有路徑都沒有發現需要的模塊就會報錯,可能是在安裝過程中依賴的lua模塊沒有放到對應的路徑下。
解決方法:使用find命令在根目錄下找kong缺失的模塊文件(如:find / -name tls.lua),將找到後的模塊文件放到kong啓動加載時檢索的目錄下,或使用建立軟連接的方式即可。
拷貝https://github.com/Kong/lua-kong-nginx-module裏的lualib/resty/kong/tls.lua到 luarocks/share/lua/5.1/resty/kong/tls.lua
failed to wait for schmeaconsensus:timeout
使用kong migrations bootstrap進行初始化的過程中,出現如下所示”failed to wait for schmeaconsensus:timeout”的錯誤。
原因:kong使用的數據庫採用的是多臺服務器集羣部署的方式。在初始化過程中會進行一系列的創建數據庫、表、字段等一系列操作,並要在集羣之間完成數據的同步一致化。可能網絡、磁盤IO等原因,未在設定的時間內完成數據一致化,就會報錯。
解決方法:kong migrations bootstrap初始化命令後邊可以跟一些選項參數,其中--db-timeout選項是用來指定超時時間的,如果不手動指定該選項,默認參數值爲60(單位爲秒)。因此可以手動指定該選項,並設置一個更長時間的參數。
8 命令
kong start -c ./kong.conf
kong stop -p ./
9 其他問題參考:
https://www.lijiaocn.com/%E9%97%AE%E9%A2%98/2018/09/29/kong-usage-problem-and-solution.html
參考:
https://blog.csdn.net/lijiaocn/article/details/83004672
https://bbs.huaweicloud.com/forum/thread-39375-1-1.html