1魄衅、概述
Kong是一個(gè)開源的API網(wǎng)關(guān)項(xiàng)目。它的官網(wǎng)是http://konghq.com/苍在。
1.1绝页、背景
隨著公司的發(fā)展壯大,項(xiàng)目越做越多寂恬,相應(yīng)開發(fā)的系統(tǒng)也越來越多续誉,而且這些系統(tǒng)逐漸由供應(yīng)內(nèi)部使用轉(zhuǎn)為對外提供服務(wù)。因此初肉,各個(gè)系統(tǒng)的安全與性能要求都提上了議事日程酷鸦。為了方便統(tǒng)一管理標(biāo)準(zhǔn),以及減輕日后維護(hù)運(yùn)營的壓力牙咏,我們決定采用API網(wǎng)關(guān)來統(tǒng)一控制各個(gè)系統(tǒng)的認(rèn)證與授權(quán)臼隔,以實(shí)現(xiàn)安全與權(quán)限控制的需求。
1.2妄壶、選型
經(jīng)過一段時(shí)間的學(xué)習(xí)與研究摔握,了解到API網(wǎng)關(guān)在開源領(lǐng)域主要有以下幾個(gè)項(xiàng)目:
- Kong,基于Nginx+Lua進(jìn)行二次開發(fā)的方案盯拱,https://konghq.com/盒发。產(chǎn)品較成熟,有配套可用插件狡逢,二次開發(fā)程度低宁舰,但需要學(xué)習(xí)與熟悉相關(guān)技能才能做好維護(hù)工作。
- Netflix Zuul奢浑,zuul是spring cloud的一個(gè)推薦組件蛮艰,https://github.com/Netflix/zuul。因架構(gòu)原因在高并發(fā)情況下性能不高雀彼,且有相當(dāng)?shù)拈_發(fā)量壤蚜。
- Orange即寡,這個(gè)開源程序是國人開發(fā)的,http://orange.sumory.com/ 袜刷。未被大量使用聪富,社區(qū)資源不夠豐富,后續(xù)出現(xiàn)問題較難解決著蟹。
基于以上對比結(jié)果墩蔓,我們采用了Kong作為API網(wǎng)關(guān)的選型。
2萧豆、安裝
Kong可以安裝在多個(gè)不同的平臺(tái)奸披,我們以Ubuntu為例,其安裝最新版本的方法如下涮雷。受網(wǎng)速影響阵面,整個(gè)安裝配置過程大約持續(xù)30~90分鐘之間。
2.1洪鸭、安裝Kong
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https curl lsb-core
$ echo "deb https://kong.bintray.com/kong-deb `lsb_release -sc` main" | sudo tee -a /etc/apt/sources.list
$ curl -o bintray.key https://bintray.com/user/downloadSubjectPublicKey?username=bintray
$ sudo apt-key add bintray.key
$ sudo apt-get update
$ sudo apt-get install -y kong
2.2样刷、配置Kong
復(fù)制配置文件kong.conf,暫時(shí)不修改配置項(xiàng)卿嘲。
$ sudo cp /etc/kong/kong.conf.default /etc/kong/kong.conf
2.3颂斜、安裝PostgreSQL
Kong支持?jǐn)?shù)據(jù)庫 PostgreSQL 9.5+ 和 Cassandra 3.x.x和無數(shù)據(jù)庫。為了日后維護(hù)方便拾枣,我們選擇了慣用的關(guān)系型數(shù)據(jù)庫PostgreSQL。
$ sudo apt-get install postgresql
安裝完成后盒让,默認(rèn)會(huì):
(1)創(chuàng)建名為"postgres"的Linux用戶
(2)創(chuàng)建名為"postgres"梅肤、不帶密碼的默認(rèn)數(shù)據(jù)庫賬號作為數(shù)據(jù)庫管理員
(3)創(chuàng)建名為"postgres"的表
2.4、配置數(shù)據(jù)庫
在啟動(dòng)Kong之前邑茄,需要先創(chuàng)建用戶和數(shù)據(jù)庫姨蝴。
$ sudo -u postgres psql
postgres=# CREATE USER kong; CREATE DATABASE kong OWNER kong;
postgres=# alter user kong with password '123456';
postgres=# \q
2.5、數(shù)據(jù)庫初始化
運(yùn)行Kong的遷移命令肺缕。
$ kong migrations bootstrap [-c /path/to/kong.conf]
2.6左医、運(yùn)行Kong
至此,Kong已經(jīng)安裝完畢同木,可以啟動(dòng)它浮梢。
$ sudo kong start [-c /path/to/kong.conf]
檢驗(yàn)Kong是否正常運(yùn)行,可執(zhí)行以下命令彤路。若正常則會(huì)返回HTML文檔秕硝。
$ curl -i http://localhost:8001/
3、名詞解釋
以下幾個(gè)Kong的核心概念:
- Service(服務(wù)):用于定義Kong后面的自己提供的服務(wù)
- Route(路由):定義客戶端請求的匹配規(guī)則洲尊,Route與Service是多對一關(guān)系远豺,當(dāng)請求與Route匹配時(shí)就會(huì)被代理到關(guān)聯(lián)的Service
- Consumer(消費(fèi)者):代表消費(fèi)者或用戶奈偏,與權(quán)限關(guān)聯(lián)使用,其轄下還有Group(組)躯护、Certificate(認(rèn)證證書)等
- Plugin(插件):在HTTP請求/響應(yīng)工作流當(dāng)中執(zhí)行的一段代碼惊来,如認(rèn)證、限流等棺滞,它為Kong提供了豐富的擴(kuò)展功能
- Upstream(上游):代表一個(gè)虛擬主機(jī)名裁蚁,主要用于負(fù)載均衡
- Certificate(SSL證書):SSL的證書/密鑰對
4、參考資料
- API網(wǎng)關(guān)的作用检眯、方案以及如何選擇
- 微服務(wù)與API網(wǎng)關(guān)(上): 為什么需要API網(wǎng)關(guān)厘擂?
- 微服務(wù)與API 網(wǎng)關(guān)(下)- Kong能為我們做什么?
- 細(xì)說API – 認(rèn)證锰瘸、授權(quán)和憑證
系列鏈接