开源API网关Kong
开源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为例)
应用级菜单
- Connections Kong连接,用于配置Kong的AdminAPI地址,配置成功之后,将会开启Kong级菜单。
- Snapshots 快照,用于存储Kong节点快照,可快速恢复节点配置。
API网关菜单
- Consumers API网关消费者,用于各类认证以及限流控制等;
- Services 服务,用于配置上游服务的信息,主要包括服务名称、上游的Host以及Port等;
- Routes 路由,用于配置下游的路由信息,定义服务的出口路径,主要包括路由名称、Host、Path、Methods以及Http/Https等;
- Plugins 插件,可配置于Service或Route,主要包括认证、安全、限流、监控、日志以及自定义几大模块,官方提供了较为全面的基础插件功能;
- Upstreams 类nginx中的Upstream,用于配置上游的服务信息;
- 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相关推荐
- 开源API网关Kong基本介绍和安装验证
本文将介绍开源API网关Kong.在GitHub搜索API网关类的开源产品,可以看到Kong网关常年都是排第一的位置,而且当前很多都有一定研发能力的企业在API网关产品选项的时候基本也会选择Kong网 ...
- 开源syslog服务器_开源API网关Kong基本介绍和安装验证
今天准备介绍下开源API网关Kong,在Gtihub搜索API网关类的开源产品,可以看到Kong网关常年都是排第一的位置,而且当前很多都有一定研发能力的企业在API网关产品选型的时候基本也会选择Kon ...
- API 网关 Kong 实战
1.Kong 介绍 Kong 是一款基于 OpenResty(Nginx + Lua 模块)编写的高可用.易扩展的,由 Mashape 公司开源的 API Gateway 项目.Kong 是基于 NG ...
- 国产最强开源 API 网关,没有之一,不接受任何反驳!
以下文章来源方志朋的博客,回复"666"获面试宝典 " 这篇文章由刚哥授权分享,刚哥是 Splunk Information Technology 的架构师,Linked ...
- 国产最强开源 API 网关
强烈推荐大家试试国产开源的 API 网关 https://github.com/apache/apisix,非常不错. 快速入门的文章,可以看看艿艿之前写的 https://www.iocoder.c ...
- 开源API网关,到底哪个强?
点击关注公众号,利用碎片时间学习 本文主要分析了 Nginx.Kong.APISIX.Tyk.Zuul.Gravitee 几个开源 API 网关架构及基本功能,测试了一定场景下各个 API 网关的性能 ...
- API网关Kong(二):Kong与Kubernetes集成的方法
作者: 李佶澳 转载请保留:原文地址 发布时间:2018-09-30 16:07:13 +0800 说明 先说组成 控制平面与数据平面 CustomResourceDefinitions 开始 ...
- API网关Kong(三):功能梳理和插件使用-基本使用过程
作者: 李佶澳 转载请保留:原文地址 发布时间:2018-10-10 14:37:53 +0800 说明 Kong的Admin API Kong定义的资源之间的关联关系 使用过程了解 先了解下 ...
- Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用
1622219047536 写在前面 Api网关我们之前是用 .netcore写的 Ocelot的,使用后并没有完全达到我们的预期,花了些时间了解后觉得kong可能是个更合适的选择. 简单说下 ...
最新文章
- Mybatis接口Mapper内的方法为啥不能重载?
- 【吐血整理】java正则表达式详解
- 计算机硬盘清理,电脑磁盘清理,详细教您电脑磁盘怎么清理
- c++多字节与宽字节字符串转换(windows平台)
- UNIX再学习 -- 高级 I/O
- scrapy 伪装代理和 fake_userAgent 的使用
- js 字符串替换_正则精要:玩转JS正则表达式,也许只需这一篇(建议收藏)
- 年薪30W前端程序员,需要吃透的前端书籍推荐
- OS之宏内核(Monolithic kernel)和微内核(Microkernel)详解
- 手机 safari mac 调试
- 格式工厂DIVX、AVC、HEVC三个格式那个最清晰
- QT基于Npcap设计的网络抓包小程序
- Python 数组高级索引
- 【uni-app】uni-app-微信小程序项目笔记
- redis—redis事务
- 我终于深入参与了一个分布式系统了,好多想法不一样了
- 产品读书《谁说菜鸟不会数据分析(入门篇)》
- linux提交任务执行时间,Linux之任务计划
- Python Tkinter——数字拼图游戏
- 【Java基础】集合总结(三)——Queue集合、Map集合