API網關系列之Kong的介紹以及安裝


一、API網關產生背景

  在微服務的架構中,一個大的應用會被拆分成多個小的單一的服務提供出來,這些小的服務有自己的處理,有自己的數據庫(也可以共用),也許語言也是不一樣的,他們可以部署在一個或多個服務器上,其實也就是對復雜的應用進行了解耦,那為什么微服務需要API網關呢?

  首先我們看看微服務后產生的問題:

  • 客戶端需要知道多個服務地址
  • 通用的功能怎么處理?例如鑒權、流量控制、日志等
  • 以前一個功能可能是一次請求就可以完成,現在可能要多個服務一起進行才可以,那如何減少客戶端請求的時間呢?

  由於以上幾點的問題,所以在所有的服務前面還需要定義一個代理,即API網關,所有的客戶端請求都必須經過API網關代理到真實的服務地址,這也可以有效的避免真實地址的暴露,同時API網關也可以集成鑒權、流量控制、日志、API聚合、黑白名單等。

二、kong的介紹

  Kong是由Mashape開發的並且於2015年開源的一款API網關框架,基於nginx以及 OpenResty 研發,主要特點是高性能以及其強大的擴展性,由於本身是基於nginx進行開發,因此網上很多關於nginx的調優等資料都可以用到kong的上面,包括負載均衡、或者充當web服務器等

  kong的擴展是通過插件機制進行的,並且也提供了插件的定制示例方法,插件定義了一個請求從進入到最后反饋到客戶端的整個生命周期,所以可以滿足大部分的定制需求,本身kong也已經集成了相當多的插件,包括CORS跨域、logging、限流、轉發、健康檢查、熔斷等,API聚合功能從github上看也已經進入開發階段。

  kong插件介紹地址:https://konghq.com/plugins/.

  kong相關文檔地址:https://getkong.org/docs/

 

三、kong的安裝

  本次安裝是在CentOS7.3下進行

步驟一、pg數據庫安裝,一步步執行如下的腳本

//獲取下載的rpm
yum install https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm
//執行安裝
yum install postgresql95-server
//初始化數據庫
/usr/pgsql-9.5/bin/postgresql95-setup initdb
//設置開機啟動
systemctl enable postgresql-9.5
//啟動服務
systemctl start postgresql-9.5

步驟二、pg數據庫遠程訪問設置(如果不需要的話,那也可以不用管)

  修改/var/lib/pgsql/9.5/data/pg_hba.conf,增加如下配置

  修改/var/lib/pgsql/9.4/data/postgresql.conf,修改以下配置

步驟三:kong服務安裝

  由於官網repo倉庫的版本才更新到0.10.4版本(估計官方忘記或者太懶了),所以目前只能用rpm包的方式進行安裝,rpm包下載地址:https://bintray.com/kong/kong-community-edition-rpm/download_file?file_path=centos/7/kong-community-edition-0.12.3.el7.noarch.rpm

下載好后,到文件目錄下執行:

rpm -ivh kong-community-edition-0.12.3.el7.noarch.rpm
kong version

步驟四、數據庫配置

  kong連數據庫,需要我們在pg上建立密碼為kong的kong用戶,數據庫名也為kong

su - postgres//進入數據庫
-bash-4.2$ psql
postgres=# CREATE USER kong WITH PASSWORD 'kong'; CREATE DATABASE kong OWNER kong;//建立數據庫以及用戶

步驟五、修改kong配置

  進入/usr/local/share/lua/5.1/kong/templates目錄,修改kong_defaults.lua里的pg_password=kong,保存

步驟六、啟動

kong migrations up//初始化數據庫
kong start//啟動命令

  Kong 在啟動后,一個是 8000,一個是 8001,8000端口是請求進入端口,用戶發送請求先到 Kong 項目的 8000 端口,kong根據配置的規則轉發到真實的后台服務地址。而8001 端口則是管理端口,插件設置、API的增刪改查、以及負載均衡等一系列的配置都是通過8001端口進行管理  

  最后、瀏覽器訪問IP:8000,如果出現{"message":"no API found with those values"}

  注意點:如果有防火牆的話,最好先關掉防火牆

 

四、總結

  kong在我看來是可以很好的完成了API網關的職責,基於nginx開發,插件開發方便,支持負載均衡,支持日志等,對於K8S也可以輕松部署使用

  這次介紹比較簡單,大家如果有不同的建議、意見或者問題的話,可以留言一起討論,kong有打算是寫成一個系列的,目前自己也在摸索當中,可能會不定期更新,謝謝大家

 

作者: Mango

出處: http://www.cnblogs.com/OMango/

關於自己:專注.Net桌面開發以及Web后台開發,開始接觸微服務、docker以及k8s等互聯網相關(越來越覺得自己像運維了)

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,如有問題, 可站內留言聯系.

  


免責聲明!

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



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