开源API网关Kong


Kong 是一个在 Nginx 运行的 Lua 应用程序,由 lua-nginx-module 实现。Kong 和 OpenResty 一起打包发行,其中已经包含了 lua-nginx-module。OpenResty 不是 Nginx 的分支,而是一组扩展其功能的模块。

1. 两个主要组件

  • Kong Server,基于 nginx 的服务器,用来接收 API 请求。
  • Apache Cassandra,用来存储操作数据。

2. 安装部署 (测试环境:http://konga.local/#!/dashboard, host : 192.168.0.231 konga.local),当前版本:v1.3.0

a. 基础安装 (Docker为例)

Kong 支持多种常见的操作环境下安装部署, 如: CentOS,Debian,Ubuntu,Docker,K8S 等,安装详情参见官方文档 Kong 各环境安装部署,支持数据库模式和非数据库模式部署。

以 Docker 为例部署脚本

  • 数据库模式
# 创建kong专属网络
> docker network create kong-net
# 创建数据库
>docker run -d --name kong-database \--network=kong-net \-p 5432:5432 \-e "POSTGRES_USER=kong" \-e "POSTGRES_DB=kong" \postgres:9.6# 初始化数据
> docker run --rm \--network=kong-net \-e "KONG_DATABASE=postgres" \-e "KONG_PG_HOST=kong-database" \-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \kong:latest kong migrations bootstrap# 运行Kong
# 端口:8000 Http,8443 Https,8001 Admin API Http,8444 Admin API https
> docker run -d --name kong \--network=kong-net \-e "KONG_DATABASE=postgres" \-e "KONG_PG_HOST=kong-database" \-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \-p 8000:8000 \-p 8443:8443 \-p 8001:8001 \-p 8444:8444 \kong:latest
  • 文件存储模式
# 创建专属网络
> docker network create kong-net# 创建Docker卷
> docker volume create kong-vol# 查看卷
> docker volume inspect kong-vol# 运行Kong,kong.yml为配置文件
# 端口:8000 Http,8443 Https,8001 Admin API Http,8444 Admin API https
> docker run -d --name kong \--network=kong-net \-v "kong-vol:/usr/local/kong/declarative" \-e "KONG_DATABASE=off" \-e "KONG_DECLARATIVE_CONFIG=/usr/local/kong/declarative/kong.yml" \-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \-p 8000:8000 \-p 8443:8443 \-p 8001:8001 \-p 8444:8444 \kong:latest
b. kong 仪表板
# konga (推荐)
> docker run -p 1337:1337--network {{kong-network}} \ // optional-e "TOKEN_SECRET={{somerandomstring}}" \-e "DB_ADAPTER=the-name-of-the-adapter" \ // 'mongo','postgres','sqlserver'  or 'mysql'-e "DB_HOST=your-db-hostname" \-e "DB_PORT=your-db-port" \ // Defaults to the default db port-e "DB_USER=your-db-user" \ // Omit if not relevant-e "DB_PASSWORD=your-db-password" \ // Omit if not relevant-e "DB_DATABASE=your-db-name" \ // Defaults to 'konga_database'-e "DB_PG_SCHEMA=my-schema"\ // Optionally define a schema when integrating with prostgres-e "NODE_ENV=production" \ // or 'development' | defaults to 'development'--name konga \pantsel/konga# kong-dashboard
> docker run --name=kong-dashboard -p 8080:8080 pgbi/kong-dashboard start \--kong-url http://kong:8001--basic-auth user1=password1 user2=password2

3. 基础功能(konga为例)

应用级菜单

  1. Connections Kong连接,用于配置Kong的AdminAPI地址,配置成功之后,将会开启Kong级菜单。
  2. Snapshots 快照,用于存储Kong节点快照,可快速恢复节点配置。

API网关菜单

  1. Consumers API网关消费者,用于各类认证以及限流控制等;
  2. Services 服务,用于配置上游服务的信息,主要包括服务名称、上游的Host以及Port等;
  3. Routes 路由,用于配置下游的路由信息,定义服务的出口路径,主要包括路由名称、Host、Path、Methods以及Http/Https等;
  4. Plugins 插件,可配置于Service或Route,主要包括认证、安全、限流、监控、日志以及自定义几大模块,官方提供了较为全面的基础插件功能;
  5. Upstreams 类nginx中的Upstream,用于配置上游的服务信息;
  6. Certificates 证书管理。

服务配置
1.添加服务: Services -> Create Services
实例:

说明:由于这里的Kong部署在K8S环境中,所以可以直接使用K8S中的服务名+端口号来定义服务的Host和Port。

2.添加路由: Services -> Service Detail -> Routes -> Add Route
实例:

配置完成之后,我们就可以访问我们的服务了。

# https://192.168.0.231:31617/config 或 http://192.168.0.231:32740/config Host: config.kong
> curl -ik -H "Host":"config.kong" https://192.168.0.231:31617/config/basic/dev
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Date: Thu, 17 Oct 2019 02:05:16 GMT
Server: Kestrel
X-Kong-Upstream-Latency: 3
X-Kong-Proxy-Latency: 10007
Via: kong/1.3.0{"logLevel":"Debug",...}

插件配置

插件添加有两个入口:
1.服务插件 Servcies -> Service Detail -> Plugins -> Add Plugin
2.路由插件 Routes -> Route Detail -> Plugins -> Add Plugin

认证

# 1.Basic 认证
# Header: Authorization Basic base64(username:password)# 2.Jwt认证
# 支持三种认证参数传递:uri param,cookie and header,可自定义键名
# key claim一般为iss
# jwt生成 & 校验:https://jwt.io/# 3.OAuth2认证
# 认证地址:oauth2/authorize
# 获取token地址: oauth2/token
# 刷新token地址: oauth2/token

安全

# 1. Acl 访问控制列表
# 2. Cors  跨域资源共享
# 3. Ip Restriction IP限制
# 4. Bot Detection 机器人检测

限流

# 1. Rate Limiting 速率限制
# 2. Response Ratelimiting 响应速率限制
# 3. Request Size Limiting  请求大小限制
# 4. Request Termination 请求阻断/终止

日志

监控

请求转发

自定义

4. Admin API

AdminAPI

开源API网关Kong相关推荐

  1. 开源API网关Kong基本介绍和安装验证

    本文将介绍开源API网关Kong.在GitHub搜索API网关类的开源产品,可以看到Kong网关常年都是排第一的位置,而且当前很多都有一定研发能力的企业在API网关产品选项的时候基本也会选择Kong网 ...

  2. 开源syslog服务器_开源API网关Kong基本介绍和安装验证

    今天准备介绍下开源API网关Kong,在Gtihub搜索API网关类的开源产品,可以看到Kong网关常年都是排第一的位置,而且当前很多都有一定研发能力的企业在API网关产品选型的时候基本也会选择Kon ...

  3. API 网关 Kong 实战

    1.Kong 介绍 Kong 是一款基于 OpenResty(Nginx + Lua 模块)编写的高可用.易扩展的,由 Mashape 公司开源的 API Gateway 项目.Kong 是基于 NG ...

  4. 国产最强开源 API 网关,没有之一,不接受任何反驳!

    以下文章来源方志朋的博客,回复"666"获面试宝典 " 这篇文章由刚哥授权分享,刚哥是 Splunk Information Technology 的架构师,Linked ...

  5. 国产最强开源 API 网关

    强烈推荐大家试试国产开源的 API 网关 https://github.com/apache/apisix,非常不错. 快速入门的文章,可以看看艿艿之前写的 https://www.iocoder.c ...

  6. 开源API网关,到底哪个强?

    点击关注公众号,利用碎片时间学习 本文主要分析了 Nginx.Kong.APISIX.Tyk.Zuul.Gravitee 几个开源 API 网关架构及基本功能,测试了一定场景下各个 API 网关的性能 ...

  7. API网关Kong(二):Kong与Kubernetes集成的方法

    作者: 李佶澳   转载请保留:原文地址   发布时间:2018-09-30 16:07:13 +0800 说明 先说组成 控制平面与数据平面 CustomResourceDefinitions 开始 ...

  8. API网关Kong(三):功能梳理和插件使用-基本使用过程

    作者: 李佶澳   转载请保留:原文地址   发布时间:2018-10-10 14:37:53 +0800 说明 Kong的Admin API Kong定义的资源之间的关联关系 使用过程了解 先了解下 ...

  9. Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用

     1622219047536 写在前面   Api网关我们之前是用 .netcore写的 Ocelot的,使用后并没有完全达到我们的预期,花了些时间了解后觉得kong可能是个更合适的选择. 简单说下 ...

最新文章

  1. Mybatis接口Mapper内的方法为啥不能重载?
  2. 【吐血整理】java正则表达式详解
  3. 计算机硬盘清理,电脑磁盘清理,详细教您电脑磁盘怎么清理
  4. c++多字节与宽字节字符串转换(windows平台)
  5. UNIX再学习 -- 高级 I/O
  6. scrapy 伪装代理和 fake_userAgent 的使用
  7. js 字符串替换_正则精要:玩转JS正则表达式,也许只需这一篇(建议收藏)
  8. 年薪30W前端程序员,需要吃透的前端书籍推荐
  9. OS之宏内核(Monolithic kernel)和微内核(Microkernel)详解
  10. 手机 safari mac 调试
  11. 格式工厂DIVX、AVC、HEVC三个格式那个最清晰
  12. QT基于Npcap设计的网络抓包小程序
  13. Python 数组高级索引
  14. 【uni-app】uni-app-微信小程序项目笔记
  15. redis—redis事务
  16. 我终于深入参与了一个分布式系统了,好多想法不一样了
  17. 产品读书《谁说菜鸟不会数据分析(入门篇)》
  18. linux提交任务执行时间,Linux之任务计划
  19. Python Tkinter——数字拼图游戏
  20. 【Java基础】集合总结(三)——Queue集合、Map集合

热门文章

  1. 1分钟搭建Typecho个人博客教程的
  2. windows server 2016搭建域控
  3. vue初始化脚手架工程时npm报错
  4. h5移动端实现物理返回键关闭弹框而非返回上一级页面
  5. 虚拟机下linux安装nginx
  6. Three Js实现坐标轴
  7. linux系统媒体播放器(media player)大全
  8. spring+shiro+cas实现单点登录,登出
  9. copy和retain的区别
  10. php artisan migrate,laravel 5.1下php artisan migrate的使用注意事项总结