乐趣区

API网关Kong实践分享

概述

什么是 Kong

Kong 是一个在 Nginx 中运行的 Lua 应用程序,可以通过 lua-nginx 模块实现,Kong 不是用这个模块编译 Nginx,而是与 OpenRestry 一起发布,OpenRestry 已经包含了 lua-nginx-module,OpenRestry 是 Nginx 的一组扩展功能模块。

为什么是 Kong

Kong 是一个 Api Gateway,通过插件的形式提供负载均衡,日志记录,身份验证,速率限制,转换等功能。

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/

开源 / 企业对比

架构

架构图

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-…

退出移动版