Linux下源碼安裝Kong網關


    kong是基於openresty構建的一個網關,並且直接帶了很多的功能比如反向代理、負載均衡、限流等模塊直接開箱即用,同時兼具OpenResty的高性能,大部分情況下無需編程就可以實現想要的功能,下面在CentOS8 Linux上使用源碼編譯的方式安裝kong,kong的官網是:https://konghq.com/,github倉庫:https://github.com/kong/kong

    kong安裝文檔:https://konghq.com/install/

    kong安裝需要依賴好幾個組件官網上給出了依賴的列表如下:

    總體上這些組件可以依次手動安裝但是比較麻煩,所以推薦通過kong提供的工具kong-build-tools進行安裝,倉庫鏈接為:https://github.com/Kong/kong-build-tools,可以通過git克隆下來或者在首頁下載zip包下來然后解壓先准備好並且進入到目錄中,然后開始進行組件的安裝

    編譯需要先安裝zlib庫: yum install zlib-devel ,如果不安裝待會編譯會提示錯誤,然后就可以開始使用工具安裝:

./openresty-build-tools/kong-ngx-build --prefix /opt/kong --work work --openresty 1.15.8.3 --openssl 1.1.1g --kong-nginx-module master --luarocks 3.3.1 --pcre 8.44 --jobs 6 --force

    這個工具也相當於一鍵安裝了,--prefix指定這些組件的統一目錄,默認是/usr/local,然后--work指定安裝的工作目錄,這些包如果不存在都會臨時下載到這里面然后再進行編譯,安裝完之后就沒啥用了,后面的這些參數都是文檔上推薦的穩定版本,執行之后需要耐心等待下載、編譯以及安裝,需要幾分鍾的時間,安裝之后到/opt/kong可以看到luarocks、openresty、openssl這3個目錄,然后將下面的環境變量添加到/etc/profile中:

export KONG_DIR=/opt/kong
export OPENSSL_DIR=$KONG_DIR/openssl
export PATH=$KONG_DIR/openresty/bin:$KONG_DIR/openresty/nginx/sbin:$OPENSSL_DIR/bin:$KONG_DIR/luarocks/bin:$PATH

    添加之后 source /etc/profile 然后分別執行下面的命令查看各個組件的版本:

openssl version -a
nginx -V
resty -v
openresty -V
luarocks --version

    確認沒問題說明基礎環境已經安裝完成,然后需要安裝libyaml-devel組件,否則接下來編譯Kong會報錯,centos8上面默認源沒有libyaml-devel需要啟用powertools才可以,centos7直接安裝即可:

dnf config-manager --set-enabled PowerTools

    然后才可以開始安裝:

dnf install libyaml-devel
# 或者用yum
yum install libyaml-devel

    然后開始編譯kong:

cd /opt/kong
git clone https://github.com/Kong/kong.git
cd kong
git checkout 2.1.0

    這里選擇的是2.1.0穩定版,直接下載master上面的代碼其實也是可以的,如果克隆比較慢可以去倉庫下載打好的tag:

     然后解壓到/opt/kong,再把目錄名改為kong即可,總之最后的目錄是:/opt/kong/kong,具體過程不再贅述,准備好之后直接安裝kong:

make install

    安裝的過程其實就是下載了很多lua的模塊然后進行安裝,正常是安裝到luarocks下,可能速度非常慢,需要耐心等待如果失敗了可以再次執行會繼續安裝,再不行需要自行解決網絡問題……,最后安裝成功需要繼續添加下面的環境變量:

export PATH=/opt/kong/kong/bin:$PATH

    然后按照官網的說明查看kong的版本信息:

kong version --vv

    其實這里執行肯定會報錯,socket或其他的模塊找不到的錯誤,如果用rpm包安裝是沒問題的,原因就是lua模塊安裝到了/opt/kong/luarocks下,而這個路徑不再默認的搜索路徑下,於是繼續添加下面的變量到profile:

export LUA_PATH="/opt/kong/luarocks/share/lua/5.1/?.lua;;"

    保存並source之后,再執行上面的命令就可以看到輸出的信息了

    到這里kong就安裝成功了,然后要正常使用還需要配置數據庫,數據庫支持postgresql以及cassandra,當然也可以不使用數據庫,但是不使用數據庫將無法添加服務以及路由,正常用於導出yml線上發布使用,這里使用的是postgresql,具體安裝請參考之前的文章以及官方文檔,下面直接進行kong的相關配置

    在pgsql中創建角色以及數據庫:

CREATE ROLE kong LOGIN PASSWORD 'kong123456';
CREATE DATABASE kong OWNER kong;

    這里創建角色kong允許登錄,並且設置密碼為kong123456,然后創建了數據庫kong並授權給角色kong,然后修改postgresql的權限配置文件:pg_hba.conf,添加遠程訪問的權限如下:

host    kong            kong            192.168.0.0/16          md5

    這里的允許ip根據實際情況設置,如果postgresql是在本地那么就沒必要配置權限了,默認不用密碼就可以登錄,修改完配置文件重啟postgresql服務即可

    然后進入到kong的目錄編輯配置:

cd /opt/kong/kong
cp kong.conf.default kong.conf

    然后編輯配置文件kong.conf,修改數據庫部分的配置如下:

database = postgres
pg_host = 192.168.0.31
pg_port = 5432
pg_timeout = 5000
pg_user = kong
pg_password = kong123456
pg_database = kong

    保存配置然后開始執行下面的命令初始化數據庫:

kong migrations bootstrap -conf kong.conf

    注意指定kong啟動服務的時候要在目錄/opt/kong/kong下,否則可能會報kong加載失敗,如下:

    如果覺得每次進入目錄麻煩,那么直接在剛才的環境變量LUA_PATH追加path:/opt/kong/kong/?/init.lua,/opt/kong/kong下面有1個kong目錄保存了相關模塊的源碼,因此這么配置就可以在外部加載kong這個目錄了:

export LUA_PATH="/opt/kong/luarocks/share/lua/5.1/?.lua;/opt/kong/kong/?/init.lua;;"

    配置的時候要仔細看一下目錄,如果你的和我這里的不一樣,要根據實際的配置,然后可以啟動一個獨立的kong項目,kong項目啟動的時候如果指定-conf會讀取指定的配置如果不指定則默認會讀取/etc/kong/kong.conf這個配置,所以這里我們可以將配置文件放到/etc/kong/kong.conf,之后改配置也要改這個,這樣就不用每次指定配置文件了,可以方便操作:

mkdir /etc/kong
cp /opt/kong/kong/kong.conf /etc/kong

    然后可以啟動一個新的項目:

kong start --prefix /opt/kong-work

    這里--prefix指定工作目錄的位置,就是和nginx默認的conf一樣的結構,和上篇文章創建openresty項目的思路完全一樣,如果不想指定可以修改kong.conf配置prefix參數,默認值是/usr/local/kong,修改之后就不用--prefix指定了,如果有多個項目的話其他的項目還是需要用--prefix單獨指定的

    kong啟動之后會監聽如下4個端口:

    8000 - 這個是提供網關服務的端口,會偵聽http客戶端的流量然后轉發到上游服務

    8443 - 和8000一樣,只是這個是偵聽https流量

    8001 - 配置kong admin api的端口,為了安全默認只監聽127.0.0.1回環網卡

    8444 - 和8001一樣,管理https admin api

    啟動之后可以使用下面的命令驗證一下服務:

curl --include http://localhost:8001

    默認正常返回json即表示啟動成功,正常返回一堆json不太好看,可以用python3的json模塊或者json_pp進行格式化示例如下:

curl http://localhost:8001 | python3 -m json.tool
# 或者
curl http://localhost:8001 | json_pp

    停止kong服務和重新加載配置可以使用下面的命令:

kong stop --prefix <prefix>
kong reload --prefix <prefix>

    最后創建一個簡單的http proxy來驗證kong的功能如下:

# 創建服務 代理到文檔上的指定服務
curl -X POST --url http://localhost:8001/services --data 'name=test-service' --data 'url=http://mockbin.org' | json_pp
# 創建路由規則 支持hosts,paths,headers等
curl -X POST --url http://localhost:8001/services/test-service/routes --data 'paths[]=/test' | json_pp
# 訪問網關測試
curl -X GET http://localhost:8000/test

    然后可以訪問瀏覽器看一下:

     可能是資源路徑的原因這里樣式丟失了,這樣kong的服務就全部配置好並且可以使用了,只是這個缺點是沒有管理的頁面導致每次用curl發送請求比較麻煩,而且官方的頁面需要付費,這里推薦個比較好用的第三方界面konga:https://github.com/pantsel/konga,其他的不是版本跟不上就是有或多或少的問題,這個應該算是第三方的里面比較優秀而且功能非常全的一個了,推薦研究和使用

    我也是第一次接觸這個網關,如有錯誤歡迎指正~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM