1、API網關產生背景nginx
在微服務的架構中,一個大的應用會被拆分紅多個小的單一的服務提供出來,這些小的服務有本身的處理,有本身的數據庫(也能夠共用),也許語言也是不同的,他們能夠部署在一個或多個服務器上,其實也就是對複雜的應用進行了解耦,那爲何微服務須要API網關呢?
git
首先咱們看看微服務後產生的問題:github
因爲以上幾點的問題,因此在全部的服務前面還須要定義一個代理,即API網關,全部的客戶端請求都必須通過API網關代理到真實的服務地址,這也能夠有效的避免真實地址的暴露,同時API網關也能夠集成鑑權、流量控制、日誌、API聚合、黑白名單等。web
2、kong的介紹sql
Kong是由Mashape開發的而且於2015年開源的一款API網關框架,基於nginx以及 OpenResty 研發,主要特色是高性能以及其強大的擴展性,因爲自己是基於nginx進行開發,所以網上不少關於nginx的調優等資料均可以用到kong的上面,包括負載均衡、或者充當web服務器等
docker
kong的擴展是經過插件機制進行的,而且也提供了插件的定製示例方法,插件定義了一個請求從進入到最後反饋到客戶端的整個生命週期,因此能夠知足大部分的定製需求,自己kong也已經集成了至關多的插件,包括CORS跨域、logging、限流、轉發、健康檢查、熔斷等,API聚合功能從github上看也已經進入開發階段。
數據庫
kong插件介紹地址:https://konghq.com/plugins/.centos
kong相關文檔地址:https://getkong.org/docs/跨域
3、kong的安裝瀏覽器
本次安裝是在CentOS7.3下進行
步驟1、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
步驟2、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
步驟4、數據庫配置
kong連數據庫,須要咱們在pg上創建密碼爲kong的kong用戶,數據庫名也爲kong
su - postgres//進入數據庫 -bash-4.2$ psql postgres=# CREATE USER kong WITH PASSWORD 'kong'; CREATE DATABASE kong OWNER kong;//創建數據庫以及用戶
步驟5、修改kong配置
進入/usr/local/share/lua/5.1/kong/templates目錄,修改kong_defaults.lua裏的pg_password=kong,保存
步驟6、啓動
kong migrations up//初始化數據庫 kong start//啓動命令
Kong 在啓動後,一個是 8000,一個是 8001,8000端口是請求進入端口,用戶發送請求先到 Kong 項目的 8000 端口,kong根據配置的規則轉發到真實的後臺服務地址。而8001 端口則是管理端口,插件設置、API的增刪改查、以及負載均衡等一系列的配置都是經過8001端口進行管理
最後、瀏覽器訪問IP:8000,若是出現{"message":"no API found with those values"}
注意點:若是有防火牆的話,最好先關掉防火牆
4、總結
kong在我看來是能夠很好的完成了API網關的職責,基於nginx開發,插件開發方便,支持負載均衡,支持日誌等,對於K8S也能夠輕鬆部署使用
此次介紹比較簡單,你們若是有不一樣的建議、意見或者問題的話,能夠留言一塊兒討論,kong有打算是寫成一個系列的,目前本身也在摸索當中,可能會不按期更新,謝謝你們
做者: Mango
出處: http://www.cnblogs.com/OMango/
關於本身:專一.Net桌面開發以及Web後臺開發,開始接觸微服務、docker以及k8s等互聯網相關(愈來愈以爲本身像運維了)
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文連接,若有問題, 可站內留言聯繫.