kong
基本特征
Cloud-Native:与平台无关,Kong可以从裸机运行到Kubernetes。
动态负载平衡:在多个上游服务之间平衡流量。
基于哈希的负载平衡:具有一致的哈希/粘性会话的负载平衡。
断路器:智能跟踪不健康的上游服务。
运行状况检查:主动和被动监视上游服务。
服务发现:在第三方DNS解析器(例如Consul)中解析SRV记录。
无服务器:直接从Kong调用和保护AWS Lambda或OpenWhisk功能。
WebSockets:通过WebSockets与您的上游服务进行通信。
gRPC:与gRPC服务进行通信,并通过日志记录和可观察性插件观察流量
OAuth2.0:轻松将OAuth2.0身份验证添加到您的API。
日志记录:通过HTTP,TCP,UDP或磁盘记录对系统的请求和响应。
安全性:ACL,僵尸程序检测,白名单/黑名单IP等。
Syslog:登录到系统日志。
SSL:为基础服务或API设置特定的SSL证书。
监视:实时监视提供关键的负载和性能服务器指标。
转发代理:使Kong连接到透明的中介HTTP代理。
认证:HMAC,JWT,Basic等。
速率限制:基于许多变量的阻止和限制请求。
转换:添加,删除或处理HTTP请求和响应。
缓存:在代理层缓存并提供响应。
CLI:从命令行控制Kong群集。
REST API:Kong可以使用其RESTful API进行操作,以实现最大的灵活性。
地理复制:跨不同区域的配置始终是最新的。
故障检测和恢复:如果您的Cassandra节点之一发生故障,则 Kong不会受到影响。
群集:所有Kong节点自动加入群集,并在各个节点之间更新其配置。
可伸缩性:Kong本质上分布,只需添加节点即可水平扩展。
性能:Kong通过扩展和使用NGINX作为核心轻松处理负载。
插件:可扩展的体系结构,用于向Kong和API添加功能。
系统架构
kong依赖数据库,一般使用postgres,默认端口为
接受客户端流程端口
- 8000:http
- 8443:https
Admin Api端口:
- 8001:http
- 8444:https
kong的配置信息都是通过API接口控制
信息获取使用: GET
创建:POST
更新:PATCH
删除:DELETE
功能api使用
route: client请求入口
server: 后端服务的抽象层,维护route与upstream之间的映射关系,
upstream: 托管后端服务器
plugin: 作用整个流量代理周期
服务
kong:8001/services
官网文档
新增
/services
curl -i -X POST http://10.10.203.230:8001/services/ \
-d 'name=jintest' \
-d 'url=http://jintest-server:8000'
删除
curl -i -X DELETE http://10.10.203.230:8001/services/jintest
路由
通过paths
,mathods
,hosts
来匹配客户请求。
新增
curl -i -X POST http://10.10.203.230:8001/services/jintest/routes \
-d 'hosts[]=10.10.203.230' \
-d 'paths[]=/webtest&paths[]=/webtest/' \
-d 'preserve_host=true'
-d 'strip_path=false'
-d 'service.id=86df56be-3a9e-4df2-bba0-5a616aa8cd3d'
重要变量说明
url
相当于protocol
, host
, port
and path
的组合,一个快捷命令
该指令相当于proxy_pass http://jintest-server
strip_path
值:false,true 默认true
是否把匹配成功的paths删除后在转发后端服务器.
该指令相当于proxy_pass http://jintest-server/
preserve_host
值:false,true 默认false
转发后端是否带host参数,默认不带。
该指令相当于proxy_set_header Host $host;
更新
curl -X PATCH -i http://10.10.203.230:8001/routes/403dcc8b-2941-494a-a8c7-f8a5e7cd083c \
-d 'id=403dcc8b-2941-494a-a8c7-f8a5e7cd083c' \
-d 'strip_path=false' \
-d 'preserve_host=true'
删除
curl -X DELETE -i http://10.10.203.230:8001/routes/403dcc8b-2941-494a-a8c7-f8a5e7cd083c
upstream/garget
新增
新增upstream
curl -i -X POST http://10.10.203.230:8001/upstreams \
-d 'name=jintest-server'
新增garget
curl -i -X POST http://10.10.203.230:8001/upstreams/jintest-server/targets \
-d 'target=10.10.203.169:32574'
删除
通过DELETE
方法,请求API
删除upstram
curl -i -X DELETE http://10.10.203.230:8001/upstreams/jintest123
删除garget
garget没有更新,只有新增/删除,设置weight=0就是删除。
curl -i -X POST http://10.10.203.230:8001/upstreams/jintest123/targets \
-d 'target=10.10.203.169:32574' \
-d 'weight=0'
konga
一款开源的kong UI程序
常用功能
添加kong服务地址
服务
路由
upstream
garget
更新
通过调整garget
后端服务的weight
来控制请求量的比例