API網關——Kong實踐分享

 

概述html

 

01nginx

什麼是Konggit

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

 

02sql

爲何是Kongdocker

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

 

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

 

 

03vim

術語後端

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

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

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

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

Certificate:是https證書。

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

Upstream:是負載均衡策略。

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

 

04

特性

  • 動態負載均衡

  • 基於散列的負載均衡

  • 斷路器

  • 健康檢查

  • Websockets

  • OAuth2.0

  • 日誌記錄

  • 安全性

  • Syslog

  • 監控

  • 轉發代理

  • 認證

  • 速率限制

  • 故障檢測和恢復

……

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

 

05

開源/企業對比

 

 

 

 

 

架構


01

架構圖

 

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

 

 

 

 

 

使用

 

01

upstream

 

 

02

target

 

03

service

 

04

routers

 

05

驗證

 

06

插件

1.Base-auth

  • 建立consumer

 

  • 建立Basic-auth-credential

 

  • 服務開啓Basic-auth

 

  • 驗證

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

 

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

 

 

 

集成

01

Dns SRV

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

 

1.架構圖

 

 

2.檢查服務域名

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

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

 

 

含義解釋:

 

調用服務域名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

 

02

Agent 輪詢

1.架構圖

 

 

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

 

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

 

 

開發

01命令行

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

 

02

Admin API

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

例如:

 

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

相關文章
相關標籤/搜索