API缃戝叧Kong

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了API缃戝叧Kong相关的知识,希望对你有一定的参考价值。

鏍囩锛?a href='http://www.mamicode.com/so/1/%e5%93%aa%e4%ba%9b' title='鍝簺'>鍝簺   婧愬湴鍧€   mod   浜哄伐   cme   ams   閰嶇疆   鏀堕泦   宸ヤ綔   

缃戝叧鏄粈涔堬紝涓轰粈涔堟垜浠渶瑕佺綉鍏?

缃戝叧濂芥瘮鎴戜滑鐜板疄鐢熸椿涓殑澶ч棬锛屾垜浠姣忓ぉ鍑洪棬涓婄彮锛屼笅鐝洖瀹堕兘瑕侀€氳繃澶ч棬杩涘嚭銆傚湪缃戠粶涓栫晫涓綉鍏冲疄闄呬笂璧风潃鎺у埗娴侀噺杩涘嚭鐨勪綔鐢ㄣ€傛垜浠钩甯镐娇鐢ㄧ數鑴戣闂簰鑱旂綉锛岃矾鐢卞櫒鎵挎媴浜嗗嚭鍘绘祦閲忕殑缃戝叧鐨勫伐浣滐紝鍦ㄦ祦閲忓埌杈剧綉鍏冲悗锛岀綉鍏充娇鐢∟AT鎶€鏈畬鎴愪簡婧愬湴鍧€杞崲銆傦紙鍙互鐞嗚В涓哄嚭闂ㄥ墠鎹簡涓€鍙岄瀷瀛愶級
褰撳鎴风娴侀噺鍒拌揪鏈嶅姟绔箣鍚庯紝涔熼渶瑕佽繘鍏ユ湇鍔$鐨勭綉鍏宠繘琛屽鐞嗭紝杩欎釜缃戝叧閫氬父涔熷彨web鍙嶅悜浠g悊锛岄€氬父涓轰簡鎻愰珮鎬ц兘鍜屽畨鍏ㄨ€冭檻锛屼笉浼氱洿鎺ユ妸web涓棿浠剁殑绔彛鐩存帴鏆撮湶缁欑敤鎴?br/>鍦ㄦ湇鍔$缃戝叧杩欏眰閫氬父瑕佸畬鎴愯璇併€侀壌鏉冦€佹祦鎺х瓑鐩稿叧鐜妭鍚庤繘琛岃矾鐢辫浆鍙戠粰鍚庣鐨剋eb涓棿浠跺鐞嗭紝鏈€缁堝啀灏嗙粨鏋滆繑鍥炵粰瀹㈡埛绔?/p>

鐩墠鎴戜滑鐨勭敤鐨勭綉鍏虫槸鍟ワ紵鏈変粈涔堜紭缂虹偣锛?/h3>

甯傞潰涓婄殑缃戝叧浜у搧鎴栬€呰В鍐虫柟妗堜富瑕佸垎杞欢銆佺‖浠朵袱绉嶃€傜‖浠朵富瑕佷互F5涓轰唬琛紝杞欢鍒欎互nginx銆乷penresty銆乲ong绛変负浠h〃銆傛垜浠洰鍓嶇殑鎵€鏈夐」鐩潎浣跨敤nginx鏉ュ仛鏈嶅姟绔殑缃戝叧

浼樼偣锛?/p>

閰嶇疆鐩稿绠€鍗曪紝鍙傝€冩枃妗e拰閰嶇疆鏍蜂緥澶?br/>瀹樻柟鍜岀涓夋柟鐨勬ā鍧椾赴瀵岋紝鍙墿灞曟€у己
鎬ц兘琛ㄧ幇浼樺紓锛岀郴缁熷紑閿€浣庯紝骞跺彂鍚炲悙鑳藉姏寮?/p>

缂虹偣锛?/p>

椤圭洰澶氾紝椤圭洰闂寸浉鍚岀殑閰嶇疆澶ч噺瀛樺湪锛岄厤缃枃浠跺彲缁存姢琛屽樊
鎵€鏈夌殑閰嶇疆蹇呴』浜哄伐閰嶇疆涓庢牎楠岋紝鑷姩鍖栬兘鍔涘急
鏃ュ織鏂囦欢闆嗕腑鍦ㄦ湰鍦帮紝闆嗙兢鐜涓嬪垎鏋愬伐浣滈噺澶?/p>

Kong鏄粈涔堬紵

Kong鏄竴涓湪Nginx杩愯鐨凩ua搴旂敤绋嬪簭锛岀敱lua-nginx-module瀹炵幇銆侽penResty涓嶆槸Nginx鐨勫垎鏀紝鑰屾槸涓€缁勬墿灞曞叾鍔熻兘鐨勬ā鍧?鏁村悎浜哃ua妯″潡鍚庨噸鏂板彂甯冪殑nginx) 銆侹ong鍜孫penResty涓€璧锋墦鍖呭彂琛岋紝鍏朵腑宸茬粡鍖呭惈浜唋ua-nginx-module

鍙互绠€鍗曠悊瑙d负锛?br/>Kong > OpenResty > Nginx + lua-nginx-module

Kong 鏄湪瀹㈡埛绔拰锛堝井锛夋湇鍔¢棿杞彂API閫氫俊鐨凙PI缃戝叧锛岄€氳繃鎻掍欢鎵╁睍鍔熻兘銆侹ong 鏈変袱涓富瑕佺粍浠讹細

Kong Server 锛氬熀浜巒ginx鐨勬湇鍔★紝鐢ㄦ潵鎺ユ敹瀹㈡埛绔姹傦紝鍒哸pi锛堥粯璁?001锛夊拰http锛堥粯璁?000锛夈€乭ttps锛堥粯璁?443锛変笁涓鍙?br/>Apache Cassandra鎴栬€卲ostgresql鏁版嵁搴擄細鐢ㄦ潵鎸佷箙鍖栧瓨鍌ㄦ搷浣滄暟鎹?/p>

Kong鑳借В鍐充粈涔堥棶棰橈紵

Kong鏈€璇变汉鐨勪竴涓壒鎬ф槸鍙互閫氳繃鎻掍欢鎵╁睍宸叉湁鍔熻兘锛岃繖浜涙彃浠跺湪 API 璇锋眰鍝嶅簲寰幆鐨勭敓鍛藉懆鏈熶腑琚墽琛屻€?br/>鎻掍欢浣跨敤 Lua 缂栧啓锛孠ong鐨勫唴缃彃浠跺姛鑳芥湁锛?/p>

  1. 璁よ瘉鎻掍欢鏀寔澶氱璁よ瘉鏂瑰紡銆傚锛歜asic auth銆乲ey auth銆乷auth2銆乭mac auth銆乯wt銆乴adp auth銆乻ession绛?/li>
  2. 瀹夊叏鎻掍欢涓婃敮鎸侀拡瀵规秷璐硅€呯殑API ACL绛栫暐鎺у埗銆両P闄愬埗銆佹満鍣ㄤ汉妫€娴嬨€乤cme鑷鍏嶈垂璇佷功绛?/li>
  3. 娴佹帶鎻掍欢涓婃敮鎸佽姹傞€熺巼闄愬埗銆佽姹傚ぇ灏忛檺鍒躲€佽姹備腑鏂€佷唬鐞嗙紦瀛樼瓑
  4. 鐩戞帶鍒嗘瀽鎻掍欢涓婃敮鎸乸rometheus銆亃ipkin绛?/li>
  5. 鏃ュ織鎻掍欢涓婃敮鎸佹帴鍏CP銆乁DP銆丠TTP鍗忚鐨勬棩蹇楁湇鍔★紝鍚屾椂鏀寔syslog銆乻tatsd绛夋棩蹇楁湇鍔?/li>
  6. 杩樻湁涓€浜涚涓夋柟鐨勬棤鏈嶅姟鎻掍欢锛屼緥濡俛ws銆乤zure绛夈€?/li>

绠€鑰岃█涔嬶紝kong鍦╪ginx銆乷penresty鐨勫熀纭€涓婃暣鍚堜簡浼楀鐨勫姛鑳斤紝瀹炵幇浜咥PI缃戝叧鏈嶅姟銆?br/>瀵规垜浠€岃█锛屾渶鐩存帴鐨勬槸鍙互閫氳繃api鏉ラ厤缃畁ginx涓婄殑铏氭嫙涓绘満锛岄€氳繃浣跨敤瀹樻柟鎻愪緵鐨刱onga webui宸ュ叿konga锛屼娇寰楅厤缃鐞嗗彲瑙嗗寲

Kong鐨勫嚑涓噸瑕佹蹇?/h3>

1銆乽pstream
鍜宯ginx閲岄潰鐨剈pstream涓€鑷?br/>api鍦板潃锛?a href="http://192.168.1.16:8001/upstreams" rel="nofollow">http://192.168.1.16:8001/upstreams (192.168.1.16鏄痥ong鏈嶅姟鐨刬p鍦板潃)
閲嶈瀛楁锛?br/>name锛氬繀椤婚厤缃紝鍜屽悗闈ervice鍏宠仈鐨勬椂鍊欎娇鐢?br/>algorithm锛氶粯璁ound-robin銆傜洰鍓嶆敮鎸佷笁绉嶏細round-robin, consistent-hashing, least-connections

API閰嶇疆绀轰緥锛氬垱寤簎pstream

curl -i -X POST   --url http://192.168.1.16:8001/upstreams/   --data 鈥榥ame=fjwjw-dev-web鈥?  --data 鈥榓lgorithm=round-robin鈥?
curl -i -X POST   --url http://192.168.1.16:8001/upstreams/   --data 鈥榥ame=fjwjw-dev-static鈥?  --data 鈥榓lgorithm=round-robin鈥? 

2銆乼arget
鍜屽墠闈㈢殑upstream鐩稿叧鑱旓紝閰嶇疆鍚庣web涓棿浠剁殑ip鍦板潃鍜岀鍙o紝鏉冮噸绛?br/>api鍦板潃锛?a href="http://192.168.1.16:8001/upstreams/fjwjw-dev-web/targets" rel="nofollow">http://192.168.1.16:8001/upstreams/fjwjw-dev-web/targets (fjwjw鏄墠闈pstream鐨勫悕绉?
閲嶈瀛楁锛?br/>target: 鍚庣web涓棿浠剁殑ip鍦板潃鍜岀鍙?涓嶉厤缃鍙i粯璁や负8000
weight锛氭潈閲?/p>

API閰嶇疆绀轰緥锛氬垱寤簍arget锛屽叧鑱斿墠闈㈠垱寤哄ソ鐨剈pstream

curl -i -X POST   --url http://192.168.1.16:8001/upstreams/fjwjw-dev-web/targets   --data 鈥榯arget=192.168.1.60:80鈥?  --data 鈥榳eight=100鈥?

curl -i -X POST   --url http://192.168.1.16:8001/upstreams/fjwjw-dev-web/targets   --data 鈥榯arget=192.168.1.61:80鈥?  --data 鈥榳eight=100鈥?  

curl -i -X POST   --url http://192.168.1.16:8001/upstreams/fjwjw-dev-static/targets   --data 鈥榯arget=192.168.1.13:1457鈥?  --data 鈥榳eight=100鈥?  

3銆乻ervice
鍜屽墠闈㈢殑upstream鐩稿叧鑱旓紝閰嶇疆铏氭嫙涓绘満鐩稿叧鐨勪俊鎭?br/>api鍦板潃锛?a href="http://192.168.1.16:8001/services/" rel="nofollow">http://192.168.1.16:8001/services/
閲嶈瀛楁锛?br/>name锛氭湇鍔″悕绉?br/>host锛氬拰upstream鐩稿叧鑱旂殑瀛楁
port锛氭寚瀹歶pstream绔彛
protocol锛氭寚瀹氳繛鎺ュ悗绔殑鍗忚
connect_timeout锛氬鎴风杩炴帴瓒呮椂鏃堕暱
read_timeout: 瀹㈡埛绔鍙栬秴鏃舵椂闀?br/>write_timeout: 瀹㈡埛绔啓鍏ヨ秴鏃舵椂闀?br/>ca_certificates锛氭湇鍔$ca璇佷功鐩稿叧鍏宠仈
client_certificate: 瀹㈡埛绔瘉涔︾浉鍏?br/>retries锛氬悗绔噸璇曟鏁?/p>

API閰嶇疆绀轰緥锛氬垱寤簊ervice锛屽叧鑱攗pstream

 curl -i -X POST   --url http://192.168.1.16:8001/services/   --data 鈥榥ame=fjwjw-dev-web鈥?  --data 鈥榩ath="/web"鈥?  --data 鈥榰rl=http://fjwjw-dev-web鈥?

 curl -i -X POST   --url http://192.168.1.16:8001/services/   --data 鈥榥ame=fjwjw-dev-static鈥?  --data 鈥榩ath=/鈥?  --data 鈥榰rl=http://fjwjw-dev-static鈥?

4銆乺oute
api鍦板潃锛?a href="http://192.168.1.16:8001/routes" rel="nofollow">http://192.168.1.16:8001/routes
閲嶈瀛楁锛?br/>name锛氳矾鐢辫鍒欑殑鍚嶇О
paths锛氳矾寰?br/>service锛氬拰鍝釜service鍏宠仈
methods: 鏀寔鐨刪ttp鏂规硶锛堥渶瑕佸ぇ鍐欙級
hosts: 鍏蜂綋璁块棶鐨勫煙鍚?/p>

API閰嶇疆绀轰緥锛氬垱寤簉oute,鍜屽墠闈㈢殑service鐩稿叧鑱?/p>

 curl -i -X POST     --url http://192.168.1.16:8001/services/fjwjw-dev-web/routes     --data 鈥榥ame=fjwjw-dev-web鈥?   --data 鈥榟osts[]=fjszyws.dev.59iedu.com鈥?   --data 鈥榩aths=/web鈥?    --data 鈥榩reserve_host=true鈥?  --data 鈥榮trip_path=false鈥?   

 curl -i -X POST     --url http://192.168.1.16:8001/services/fjwjw-dev-static/routes     --data 鈥榥ame=fjwjw-dev-static鈥?   --data 鈥榟osts[]=fjszyws.dev.59iedu.com鈥?   --data 鈥榩aths=/鈥?    --data 鈥榩reserve_host=true鈥?  --data 鈥榮trip_path=false鈥? 

5銆乧onsumer
Consumer鏄娇鐢⊿ervice鐨勭敤鎴凤紝鍏舵牳蹇冨師鍒欐槸涓哄叾娣诲姞Plugin鎻掍欢,浠庤€岃嚜瀹氫箟浠栫殑璇锋眰琛屼负.
鏈€绠€鍗曠殑鐞嗚В鍜岄厤缃甤onsumer鐨勬柟寮忔槸,灏嗗叾浜庣敤鎴疯繘琛屼竴涓€鏄犲皠,鍗充竴涓猚onsumer浠h〃涓€涓敤鎴凤紙鎴栧簲鐢級
api鍦板潃锛?a href="http://192.168.1.16:8001/consumers" rel="nofollow">http://192.168.1.16:8001/consumers

浣跨敤API缃戝叧闇€瑕佸摢浜涙柟闈㈢殑璋冩暣鍜屾寫鎴?/h3>

1銆?鍔ㄩ潤鍒嗙瀹屽叏鎷嗗垎
鐩墠鎴戜滑椤圭洰鐨勫墠鍚庣鐨勫叆鍙i兘鏄痭ginx锛屽煙鍚嶅畬鍏ㄤ竴鑷淬€?br/>api缃戝叧瀹為檯涓婃洿閫傚悎澶勭悊鍔ㄦ€侀儴鍒嗙殑璇锋眰銆傝櫧鐒朵笉鎷嗗垎鍓嶅悗绔姹傚煙鍚嶄篃鑳芥弧瓒崇幇鏈夐渶姹傦紝浣嗕粠瑙勮寖鎬т互鍙婂悗缁潤鎬佽祫婧怌DN鍔犻€熺瓑鏂归潰鑰冭檻锛屽缓璁墠鍚庣鍩熷悕杩涜鎷嗗垎銆?br/>鍙﹀锛屾媶鍒嗕箣鍚巃pi缃戝叧鍜孠8S鏈嶅姟闆嗘垚锛屽彲浠ヤ娇鐢↘8S鏈嶅姟鍚嶄笌鍚庣杩涜鍔ㄦ€佸叧鑱斻€?/p>

2銆佹棩蹇楁敹闆嗕笌鍒嗘瀽
浣跨敤api缃戝叧涔嬪悗锛屾墍鏈夌殑椤圭洰鏃ュ織闆嗕腑鍖栧瓨鍌紝杩愮淮鍒嗘瀽涓婂皢甯︽潵鎸戞垬锛岄渶瑕佷竴濂楀畬鏁寸殑鏃ュ織瑙e喅鏂规

3銆佹牳蹇冩彃浠堕€傞厤
浣跨敤api缃戝叧涔嬪悗锛屽鎴风璁よ瘉銆侀壌鏉冦€佹祦鎺х瓑宸ヤ綔涓嶉渶瑕佸啀鐢卞簲鐢ㄧ▼搴忓畬鎴愶紝缃戝叧灞傚彲浠ユ壙鎷呰繖閮ㄥ垎宸ヤ綔锛屽湪璁よ瘉銆侀壌鏉冦€佹祦鎺ф彃浠朵笂闇€瑕侀€傞厤鎴戜滑鐨勯」鐩拰搴旂敤

以上是关于API缃戝叧Kong的主要内容,如果未能解决你的问题,请参考以下文章

寰掓墜鎾镐簡涓€涓狝PI缃戝叧锛岀悊瑙f洿閫忓交浜嗭紝浠g爜宸蹭笂浼爂ithub锛岃嚜鍙杶

鎬庝箞鐢ˋPI缃戝叧鏋勫缓寰湇鍔★綔鏋舵瀯

API璁捐寰楀ソ锛屼笅鐝笅寰楁棭

ping: unknown host 瑙e喅鍔炴硶

使用公共微服务对 API 网关 (Kong) 进行身份验证

kong配置service和route实现简单API代理