API網關——Kong實踐分享

概述

什麼是Kong

Kong是一個在Nginx中運行的Lua應用程序,可以通過lua-nginx模塊實現,Kong不是用這個模塊編譯Nginx,而是與OpenRestry一起發佈,OpenRestry已經包含了lua-nginx-module,OpenRestry是Nginx的一組擴展功能模塊。

爲什麼是Kong

Kong是一個Api Gateway,通過插件的形式提供負載均衡,日誌記錄,身份驗證,速率限制,轉換等功能。

Kong可以很輕鬆擴展功能,模塊化,可以運行在任何基礎設施上。

API網關——Kong實踐分享

術語

Route:是請求的轉發規則,按照Hostname和PATH,將請求轉發給Service。

Services:是多個Upstream的集合,是Route的轉發目標。

Consumer:是API的用戶,裏面記錄用戶的一些信息。

Plugin:是插件,plugin可以是全局的,綁定到Service,綁定到Router,綁定到Consumer。

Certificate:是https證書。

Sni:是域名與Certificate的綁定,指定了一個域名對應的https證書。

Upstream:是負載均衡策略。

Target:是最終處理請求的Backend服務。

特性

  • 動態負載均衡
  • 基於散列的負載均衡
  • 斷路器
  • 健康檢查
  • Websockets
  • OAuth2.0
  • 日誌記錄
  • 安全性
  • Syslog
  • 監控
  • 轉發代理
  • 認證
  • 速率限制
  • 故障檢測和恢復

……

更多詳情參考:https://docs.konghq.com/hub/

開源/企業對比

API網關——Kong實踐分享
API網關——Kong實踐分享
API網關——Kong實踐分享

架構

01架構圖
API網關——Kong實踐分享

1.1版本以後支持無db模式

02執行流程

加入kong後,每個客戶端對API的請求將首先到達Kong,然後被代理到最終API,在請求和響應之間,Kong將執行任何已安裝的插件,擴展API功能集,Kong有效的成爲每個API的入口點。

部署

Kong支持在任何基礎設施上運行,支持docker、packages、vagrant、Homebrew、CloudFormation、AWS、Azure、Kubernetes等。

本次部署基於package方式,部署軟件版本。

軟件 版本
Kong 1.0.3
Postgresql 9.6
Kong-dashboard 3.5.0

01部署Postgresql

docker run 
--
name postgres 
-
e POSTGRES_PASSWORD
=
123456

-
p 
5432
:
5432

-
d postgres
:
9.6

02創建用戶及數據庫

  • 登陸
psql 
-
U postgres 
-
h 
10.20
.
1.190

-
p 
5432

#創建用戶

create user kong 
with
 password 
‘
kong
’;

#創建數據庫

create database kong owner kong
;

#退出控制檯

\q

03下載安裝包

wget:https://kong.bintray.com/kong-rpm/centos/7/:kong-1.0.3.el7.noarch.rpm

04安裝配置

#安裝rpm

yum install kong
-
1.0
.
3.el7.noarch
.
rpm

#拷貝配置

cp 
/
etc
/
kong
/
kong
.
conf
.
default

/
etc
/
kong
/
kong
.
conf

#配置

admin_listen 
=

0.0
.
0.0
:
8001
,

0.0
.
0.0
:
8444
 ssl

pg_host 
=

10.20
.
1.190

pg_port 
=

5432

pg_user 
=
 kong

pg_password 
=
 kong

pg_database 
=
 kong

保存並退出。

05啓動kong

#數據庫遷移,初始化表

kong migrations bootstrap

-
c 
/
etc
/
kong
/
kong
.
conf 
–
vv

#啓動

kong start 
-
c 
/
etc
/
kong
/
kong
.
conf

06部署kong-dashboard

dashboard目前只支持kong版本1.0.3,kong最新版本不支持,使用pgbi/kong-dashboard鏡像

#啓動dashboard

docker run 
-
p 
8888
:
8080
 pgbi
/
kong
-
dashboard start 
--
kong
-
url http
:
//10.20.1.190:8001

使用

01upstream

API網關——Kong實踐分享

02target

API網關——Kong實踐分享

03service

API網關——Kong實踐分享

04routers

API網關——Kong實踐分享

05驗證

API網關——Kong實踐分享

06插件

1.Base-auth

創建consumer

API網關——Kong實踐分享

創建Basic-auth-credential

API網關——Kong實踐分享

服務開啓Basic-auth

API網關——Kong實踐分享

驗證

未加用戶信息,沒權限,效果如下:

API網關——Kong實踐分享

加入用戶信息後,效果如下:

API網關——Kong實踐分享

集成

01Dns SRV

Kong利用Dns輪詢訪問後端應用。

1.架構圖

API網關——Kong實踐分享

2.檢查服務域名

使用Dns做服務發現,查看boms-user-service服務如下:

# dig @10.20.11.118 -p 8600 boms-user-service.service.dc1.consul SRV

API網關——Kong實踐分享

含義解釋:

API網關——Kong實踐分享

調用服務域名boms-user-service.service.dc1.consul,通過dns解析找到實例ip+port,如上例中10.20.11.118:8081。

3.修改kong配置

vim 編輯kong.conf,增加:

dns_resolver
:

127.0
.
0.1
:
8600

4.kong中使用

在kong中手動增加一個service,host填入服務域名,增加router,即可轉發。

5.總結

需要手動在kong中創建服務,並且僅適用consul註冊中心。

https://github.com/faizalpribadi/kongsul

02Agent 輪詢

1.架構圖

API網關——Kong實踐分享

agent負責監聽註冊中心,動態調用kong admin API創建upstream、target、service、router等資源。

用戶通過boms平臺調用admin API修改router信息,實現服務轉發功能,在此數據基礎之上在啓用插件,豐富功能。

開發

01命令行

https://docs.konghq.com/1.0.x/cli/

02Admin API

https://docs.konghq.com/1.0.x/admin-api/

例如:

API網關——Kong實踐分享

03插件開發

https://docs.konghq.com/1.0.x/pdk/ 插件開發工具包。

參考

https://docs.konghq.com Kong官方文檔

https://docs.konghq.com/hub/kong-inc 插件文檔

https://www.lijiaocn.com/%E6%8A%80%E5%B7%A7/2017/03/06/dns-srv.html dns-srv 詳解

https://github.com/faizalpribadi/kongsul

https://github.com/YeautyYE/nacos-nginx-template

https://github.com/quancheng-ec/eureka-kong-register

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章