API网关——Kong实践分享

小咪咪 2022-01-16 23:05 451阅读 0赞

概述

01什么是Kong

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

02为什么是Kong

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

Kong可以很轻松扩展功能,模块化,可以运行在任何基础设施上。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NxdWlycmVsYW5pbWFsMDkyMg_size_16_color_FFFFFF_t_70

03术语

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开源/企业对比

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NxdWlycmVsYW5pbWFsMDkyMg_size_16_color_FFFFFF_t_70 1

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NxdWlycmVsYW5pbWFsMDkyMg_size_16_color_FFFFFF_t_70 2

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NxdWlycmVsYW5pbWFsMDkyMg_size_16_color_FFFFFF_t_70 3

架构

01架构图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NxdWlycmVsYW5pbWFsMDkyMg_size_16_color_FFFFFF_t_70 4

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

  1. docker run --name postgres -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d postgres:9.6

02创建用户及数据库

# 登陆

  1. psql -U postgres -h 10.20.1.190 -p 5432

#创建用户

  1. create user kong with password kong’;

#创建数据库

  1. 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

  1. yum install kong-1.0.3.el7.noarch.rpm

#拷贝配置

  1. cp /etc/kong/kong.conf.default /etc/kong/kong.conf

#配置

  1. admin_listen = 0.0.0.0:8001, 0.0.0.0:8444 ssl
  2. pg_host = 10.20.1.190
  3. pg_port = 5432
  4. pg_user = kong
  5. pg_password = kong
  6. pg_database = kong

保存并退出。

05启动kong

#数据库迁移,初始化表

  1. kong migrations bootstrap -c /etc/kong/kong.conf vv

#启动

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

06部署kong-dashboard

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

#启动dashboard

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

使用

01upstream

20190612160010846.png

02target

20190612160021783.png

03service

20190612160031683.png

04routers

20190612160042902.png

05验证

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NxdWlycmVsYW5pbWFsMDkyMg_size_16_color_FFFFFF_t_70 5

06插件

1.Base-auth

  • 创建consumer

20190612160104866.png

  • 创建Basic-auth-credential

20190612160114686.png

  • 服务开启Basic-auth

20190612160124869.png

  • 验证

未加用户信息,没权限,效果如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NxdWlycmVsYW5pbWFsMDkyMg_size_16_color_FFFFFF_t_70 6

加入用户信息后,效果如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NxdWlycmVsYW5pbWFsMDkyMg_size_16_color_FFFFFF_t_70 7

集成

01Dns SRV

Kong利用Dns轮询访问后端应用。

1.架构图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NxdWlycmVsYW5pbWFsMDkyMg_size_16_color_FFFFFF_t_70 8

2.检查服务域名

使用Dns做服务发现,查看boms-user-service服务如下:

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NxdWlycmVsYW5pbWFsMDkyMg_size_16_color_FFFFFF_t_70 9

含义解释:

20190612160300622.png

调用服务域名boms-user-service.service.dc1.consul,通过dns解析找到实例ip+port,如上例中10.20.11.118:8081。

3.修改kong配置

vim 编辑kong.conf,增加:

  1. dns_resolver: 127.0.0.1:8600

4.kong中使用

在kong中手动增加一个service,host填入服务域名,增加router,即可转发。

5.总结

需要手动在kong中创建服务,并且仅适用consul注册中心。

https://github.com/faizalpribadi/kongsul

02Agent 轮询

1.架构图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NxdWlycmVsYW5pbWFsMDkyMg_size_16_color_FFFFFF_t_70 10

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/

例如:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NxdWlycmVsYW5pbWFsMDkyMg_size_16_color_FFFFFF_t_70 11

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

发表评论

表情:
评论列表 (有 0 条评论,451人围观)

还没有评论,来说两句吧...

相关阅读

    相关 API介绍及选型(kong)

    API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份