使用Docker配置基于0.14.x版本kong做為api網關

在升級以后整個結構全部變了,以前0.8版本的配置完全不能用了

原文地址http://www.wantchalk.com/c/sa/gateway/2018/11/26/kong-getway-configuration.html

我是從0.8開始使用kong的,當時公司幾十個微服務,有java,ruby,python等等大大小小一堆項目,最后全部掛到kong上,然后統(tǒng)一用oauth插件來鑒權,
供給web端,手機端,微信后臺等等來調用, 整個做下來非常滿意,雖然維護不是很方便,需要手工去記一些配置信息,并且沒有后臺,所有的管理也是通過api,只能用nginx的ip屏蔽(只開放公司ip訪問kong的admin)來確保kong的admin的安全性.一直很穩(wěn)定,這次有新的項目,直接就拿來用,一看原來的kong都沒了,域名換了
產品的名字換了(現(xiàn)在分免費版本Kong CE和收費版本Kong Enterprise),連原來的結構也變了,沒辦法,再折騰一次

Content

  • 1.實驗環(huán)境
  • 2.重要概念
  • 3.新建一個api服務的過程實例

1.實驗環(huán)境

  • aliyun容器服務集群
  • kong版本0.14.x

2.重要概念

變化還真大,之前用的0.8,那時候的概念主要是API, consumers, 一年沒折騰回來一看,大變化.

當前版本(0.14以后)kong的Service和Route

從0.13開始 kong就棄用的api改用service來組織api

  • 增加了service Route Upstream Target
  • service 相當于原來的api,但是沒有路由信息,可以直接掛載物理host,也可以掛一個Upstream的host
  • Route就是專門定義外部訪問的分發(fā)hosts,strip_path,preserve_host,protocols,甚至method都在這里定義,和service關聯(lián)
  • Upstream,這個是新東西,一個虛擬的后端服務, 需要結合Target一起使用, 好處是可以在這里就完成負載均衡,還有健康檢查
  • 給Upstream添加實際的物理節(jié)點,實現(xiàn)的負載均衡

具體解釋

1.Service:

Service 顧名思義萤捆,就是我們自己定義的上游服務宾毒,通過Kong匹配到相應的請求要轉發(fā)的地方
Service 可以與下面的Route進行關聯(lián)线梗,一個Service可以有很多Route,匹配到的Route就會轉發(fā)到Service中棍丐,
當然中間也會通過Plugin的處理舔稀,增加或者減少一些相應的Header或者其他信息
Service可以是一個實際的地址露泊,也可以是Kong內部提供的upstream object

2.Route:

Route 字面意思就是路由,實際就是我們通過定義一些規(guī)則來匹配客戶端的請求乖阵,每個路由都會關聯(lián)一個Service,
并且Service可以關聯(lián)多個Route宣赔,當匹配到客戶端的請求時,每個請求都會被代理到其配置的Service中
Route作為客戶端的入口瞪浸,通過將Route和Service的松耦合拉背,可以通過hosts path等規(guī)則的配置,最終讓請求到不同的Service中
例如默终,我們規(guī)定api.example.comapi.service.com的登錄請求都能夠代理到123.11.11.11:8000端口上椅棺,那我們可以通過hosts和path來路由
首先,創(chuàng)建一個Service s1齐蔽,其相應的host和port以及協(xié)議為http://123.11.11.11:8000
然后两疚,創(chuàng)建一個Route,關聯(lián)的Service為s1含滴,其hosts為api.service.com, api.example.com,path為login
最后诱渤,將域名api.example.comapi.service.com的請求轉到到我們的Kong集群上,也就是我們上面一節(jié)中通過Nginx配置的請求地址
那么谈况,當我們請求api.example.com/loginapi.service.com/login時勺美,其通過Route匹配递胧,然后轉發(fā)到Service,最終將會請求我們自己的服務赡茸。

3.Upstream:

這是指您自己的API /服務位于Kong后面缎脾,客戶端請求被轉發(fā)到該服務器。
相當于Kong提供了一個負載的功能占卧,基于Nginx的虛擬主機的方式做的負載功能
當我們部署集群時遗菠,一個單獨的地址不足以滿足我們的時候,我們可以使用Kong的upstream來進行設置
首先在service中指定host的時候华蜒,可以指定為我們的upstream定義的hostname
我們在創(chuàng)建upstream時指定名字辙纬,然后指定solts(暫時不確定具體作用),upstream可以進行健康檢查等系列操作叭喜。這里先不開啟(還沒有研究)
然后我們可以再創(chuàng)建target類型贺拣,將target綁定到upstream上,那么基本上我們部署集群時捂蕴,也可以使用

4.Target:

target 就是在upstream進行負載均衡的終端纵柿,當我們部署集群時,需要將每個節(jié)點作為一個target启绰,并設置負載的權重昂儒,當然也可以通過upstream的設置對target進行健康檢查。
當我們使用upstream時委可,整個路線是 Route >> Service >> Upstream >> Target

5.API:

用于表示您的上游服務的傳統(tǒng)實體渊跋。自0.13.0起棄用服務。這里就不在深入了解

6.Consumer:

Consumer 可以代表一個服務着倾,可以代表一個用戶拾酝,也可以代表消費者,可以根據我們自己的需求來定義
可以將一個Consumer對應到實際應用中的一個用戶卡者,也可以只是作為一個Service的請求消費者
Consumer具體可以在Plugin使用時再做深入了解

7.Plugin:

在請求被代理到上游API之前或之后執(zhí)行Kong內的動作的插件蒿囤。
例如,請求之前的Authentication或者是請求限流插件的使用
Plugin可以和Service綁定崇决,也可以和Route以及Consumer進行關聯(lián)材诽。
具體的使用可以根據在創(chuàng)建Plugin以及后面的修改時,具體與Consumer恒傻,Service脸侥,Route綁定關系時,可參考


3.新建一個api服務的過程實例

以下請求摘自postman里,直接復制的

1.添加service

請求

curl -X POST \
  http://kong.admin.example.com/services \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Postman-Token: d83730eb-e0c5-4d8e-aa88-326b26fc6dd1' \
  -d 'name=igw_dev_http&host=igw-node-server-development&port=3000&protocol=http&read_timeout=60000&write_timeout=60000'

響應

{
    "host": "igw-node-server-development",
    "created_at": 1535959703,
    "connect_timeout": 60000,
    "id": "1234567890qazwsx",
    "protocol": "http",
    "name": "igw_dev_http",
    "read_timeout": 60000,
    "port": 3000,
    "path": null,
    "updated_at": 1535959703,
    "retries": 5,
    "write_timeout": 60000
}

2.添加 route

請求

curl -X POST \
  http://kong.admin.example.com/routes/ \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Postman-Token: 5e44a8dc-e457-4af3-b11f-be4d8c0236bf' \
  -d 'protocols%5B%5D=http&methods%5B%5D=GET&methods%5B%5D=POST&hosts%5B%5D=igw.dev.example.com&strip_path=false&preserve_host=true&service.id=1234567890qazwsx'

響應

{
    "created_at": 1535962443,
    "strip_path": false,
    "hosts": [
        "igw.dev.example.com"
    ],
    "preserve_host": true,
    "regex_priority": 0,
    "updated_at": 1535962443,
    "paths": null,
    "service": {
        "id": "1234567890qazwsx"
    },
    "methods": [
        "GET",
        "POST"
    ],
    "protocols": [
        "http"
    ],
    "id": "1234567890qwertyuiop"
}

3.新的添加route的方法

之后所有的api走同一個域名的不同path,這樣可以節(jié)約ssl證書,都在api.example.com下

請求

curl -X POST \
  http://kong.admin.example.com/routes/ \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Postman-Token: 0a4f4173-e4fa-4fe0-b3e5-20ef5363bdbe' \
  -H 'cache-control: no-cache' \
  -d 'protocols%5B%5D=http&protocols%5B%5D=https&methods%5B%5D=GET&methods%5B%5D=POST&methods%5B%5D=PUT&methods%5B%5D=DELETE&methods%5B%5D=PATCH&methods%5B%5D=HEAD&hosts%5B%5D=api.example.com&strip_path=true&preserve_host=true&service.id=1234567890qazwsx&paths%5B%5D=%2Figw&undefined='

響應

{
    "created_at": 1543224681,
    "strip_path": true,
    "hosts": [
        "api.example.com"
    ],
    "preserve_host": true,
    "regex_priority": 0,
    "updated_at": 1543224681,
    "paths": [
        "/igw"
    ],
    "service": {
        "id": "1234567890qazwsx"
    },
    "methods": [
        "GET",
        "POST",
        "PUT",
        "DELETE",
        "PATCH",
        "HEAD"
    ],
    "protocols": [
        "http",
        "https"
    ],
    "id": "23456789ertyuiop"
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末盈厘,一起剝皮案震驚了整個濱河市睁枕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖外遇,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件注簿,死亡現(xiàn)場離奇詭異,居然都是意外死亡跳仿,警方通過查閱死者的電腦和手機诡渴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來塔嬉,“玉大人,你說我怎么就攤上這事租悄〗骶浚” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵泣棋,是天一觀的道長胶哲。 經常有香客問我,道長潭辈,這世上最難降的妖魔是什么鸯屿? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮把敢,結果婚禮上寄摆,老公的妹妹穿的比我還像新娘。我一直安慰自己修赞,他們只是感情好婶恼,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著柏副,像睡著了一般勾邦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上割择,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天眷篇,我揣著相機與錄音,去河邊找鬼荔泳。 笑死蕉饼,一個胖子當著我的面吹牛,可吹牛的內容都是我干的玛歌。 我是一名探鬼主播椎椰,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沾鳄!你這毒婦竟也來了慨飘?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓤的,沒想到半個月后休弃,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡圈膏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年塔猾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稽坤。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡丈甸,死狀恐怖,靈堂內的尸體忽然破棺而出尿褪,到底是詐尸還是另有隱情睦擂,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布杖玲,位于F島的核電站顿仇,受9級特大地震影響,放射性物質發(fā)生泄漏摆马。R本人自食惡果不足惜臼闻,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望囤采。 院中可真熱鬧述呐,春花似錦、人聲如沸蕉毯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恕刘。三九已至缤谎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間褐着,已是汗流浹背坷澡。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留含蓉,地道東北人频敛。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像馅扣,于是被迫代替她去往敵國和親斟赚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容

  • 更新差油,現(xiàn)在有更強大的API網關拗军,國產 Apache APISIX任洞,可自行谷歌。 本文轉載自選擇Kong作為你的AP...
    tenlee閱讀 3,696評論 0 9
  • Kong 是 Mashape 開源的高性能高可用 API 網關和 API 管理服務層发侵。它基于 OpenResty ...
    meng_philip123閱讀 9,054評論 0 6
  • 當我們準備實現(xiàn)一個具有特殊約束條件類的時候交掏,假設類的客戶端會盡其所能的破壞這個類的約束條件,因此我們必須保護性設計...
    小小輝_710a閱讀 429評論 0 1
  • Mac下自帶的終端默認黑白色的刃鳄,對于一個技術宅來說不能忍啊盅弛。然后換成了iTerm,安裝上了zsh,安裝后界面如下:
    被風揚起的沙閱讀 3,144評論 0 3
  • 從哈爾濱回來,還穿著棉衣叔锐,到北京站挪鹏,便感覺熱的難受。出站后徑直向前愉烙,是一個相對人少的偏僻所在讨盒,想拿出包里的夾克換上...
    今退之閱讀 378評論 1 4