【kong 2.0.2研究】系列一:centos7手動指定安裝kong

最近研究kong,這裏記錄一下

 

1、說明

NginxOpenRestryKong這三個項目緊密相連:

  1. Nginx是模塊化設計的反向代理軟件,C語言開發;
  2. OpenResty是以Nginx爲核心的Web開發平臺,可以解析執行Lua腳本(OpenResty與Lua的關係,類似於Jvm與Java,不過Java可以做的事情太多了,OpenResty主要用來做Web、API等);
  3. Kong是一個OpenResty應用,是一個api gateway,具有API管理和請求代理的功能。

 

1.1 git地址

https://github.com/Kong/kong

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://promagic.cn/apiwangguankongshiyongjiaochengyinginxopenrestyhekongdejibengainianyushiyongfangfa.shtml

https://bbs.huaweicloud.com/forum/thread-39375-1-1.html

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章