API網關——Kong實踐分享

概述

什麼是Kong

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

爲何是Kong

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

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

圖片描述

術語

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

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

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

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

Certificate:是https證書。bootstrap

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

Upstream:是負載均衡策略。後端

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

特性

  • 動態負載均衡
  • 基於散列的負載均衡
  • 斷路器
  • 健康檢查
  • Websockets
  • OAuth2.0
  • 日誌記錄

安全性

Syslog

監控

轉發代理

認證

速率限制

故障檢測和恢復

……

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

開源/企業對比

圖片描述

圖片描述

圖片描述

架構

架構圖

圖片描述

1.1版本之後支持無db模式

執行流程

加入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...: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

圖片描述

02target

圖片描述

03service

圖片描述

04routers

圖片描述

05驗證

圖片描述

06插件

1.Base-auth

建立consumer

圖片描述

建立Basic-auth-credential

圖片描述

服務開啓Basic-auth

圖片描述

驗證

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

圖片描述

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

圖片描述

集成

01Dns 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/faizalprib...

02Agent 輪詢

1.架構圖

圖片描述

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

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

開發

01命令行

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

02Admin API

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

例如:

圖片描述

03插件開發

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

參考

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

https://docs.konghq.com/hub/k... 插件文檔

https://www.lijiaocn.com/%E6%... dns-srv 詳解

https://github.com/faizalprib...

https://github.com/YeautyYE/n...

https://github.com/quancheng-...

相關文章
相關標籤/搜索