Kong API Gateway (18) uris and strip_uri

Submitted by Lizhe on Tue, 12/11/2018 - 10:20

之前我一直有一个疑问, 就是service name/api name  和 target 的目标endpoint 最后一段地址必需一致的问题

例如之前的例子中, 我一直使用的target 地址是 10.10.8.73:3000/users/getusers

那么我的service name和api name 一直就只能叫做 getusers

这是一件很奇怪的事情, 因为对于kong来说, service name是不能重复的, 但是你不能要求所有的子系统的endpoint都不重复

系统A有getusers, 系统B可能也有getusers

API配置

20181211102447

Kong API Gateway (17) Kong EE

Submitted by Lizhe on Mon, 12/10/2018 - 10:12

安装kongee

相关文档

https://docs.konghq.com/enterprise/0.31-x/installation/centos/

安装的话实际上不需要按照文档上修改仓库内容, 直接yum也可以

20181210102345

不过现在还不能启动kongee, 会出现如下错误, 提示你找不到license 

[root@localhost kongee]# kong start

nginx: [alert] Error validating Kong license: license path environment variable not set

Kong API Gateway (16) Health Checks and Circuit Breakers

Submitted by Lizhe on Tue, 12/04/2018 - 10:34

 

kong支持两种健康检查方式

1. 主动检查

2. 被动检查 ( 也叫做 断路开关 )

主动检查通过一个特殊的endpoint, kong会周期性的请求这个request, 通过它的response来判断健康度

被动检查是基于被访问的target服务器上的endpoint的response

 

kong不依赖target服务器上的代码来判断服务是否健康, 而是基于kong本身实现的. 这里也不存在集群级别的健康检查, kong 节点会各自判断目标服务器的健康度

例如 一个kong节点可能可以连接到一个target服务器, 但是另一个节点却不能连接到这个服务器, 那么能连接的服务器会标记此target是健康的, 连接不到的服务器会标记此target服务器是不健康的.


 

主动检查

特定的endpoint api会返回一个 tcp error, timeout, 或者其他的 http status code. 基于这些状态码, health checker 会更新一些列的内部计数器

Kong API Gateway (15) IP Restriction 插件

Submitted by Lizhe on Fri, 11/30/2018 - 17:03

ip 限制插件就很好理解了

[root@localhost ~]# curl -X POST http://localhost:8001/services/getusers/plugins --data "name=ip-restriction" --data "config.whitelist=10.10.8.73"

{"created_at":1543569993000,"config":{"whitelist":["10.10.8.73"]},"id":"09e4b62b-3719-40e7-a51c-fe03159fb486","enabled":true,"service_id":"322515af-f03b-4704-8154-c6e9ee9941b0","name":"ip-restriction"}

[root@localhost ~]# 

Kong API Gateway (13) LOG 插件

Submitted by Lizhe on Fri, 11/30/2018 - 11:14

 

对于log 来说最简单的就是文件log, 

[root@localhost ~]# curl -X POST http://localhost:8001/services/getusers/plugins  --data "name=file-log"   --data "config.path=/tmp/file.log"

{"created_at":1543549082000,"config":{"path":"\/tmp\/file.log","reopen":false},"id":"12749c58-bf76-43d8-8c2f-7d518cdd948e","enabled":true,"service_id":"322515af-f03b-4704-8154-c6e9ee9941b0","name":"file-log"}

[root@localhost ~]#

Kong API Gateway (12) Rate Limiting 限流插件

Submitted by Lizhe on Fri, 11/30/2018 - 10:16

 

如果你是第一次接触限流这个概念, 我推荐你阅读之前的文章

http://lizhe.name/node/182

curl -X POST http://kong:8001/services/getusers/plugins --data "name=rate-limiting" --data “config.second=1” --data “config.hour=5"

[root@localhost ~]# curl -X POST http://localhost:8001/services/getusers/plugins --data "name=rate-limiting" --data "config.second=1" --data "config.hour=5"

Kong API Gateway (11) 权限校验完整例子

Submitted by Lizhe on Thu, 11/29/2018 - 17:12

 

之前我们的http请求例子中, 使用plugin 发送过token校验请求给一个target服务器

本例中我们讨论这样一个问题, 如果权限校验服务器需要横向扩展要怎么办

client -> kong service 代理 -> plugin 插件发送请求 -> 另一个 kong service 代理 ( 下挂两个用于校验的target服务器 )

 

1. 创建两个service

service的关键配置在于

target 服务地址 = service path + service name

例如我这里是 10.10.8.73:3000/users/getusers = /users + getusers

Kong API Gateway (9) API Gateway 到底应该做什么

Submitted by Lizhe on Wed, 11/28/2018 - 13:51

本章做一个小结

在扫清了react , node 和 go 之后, 这些日子我越发认识到了API Gateway 在微服务架构中的重要性

在微服务的结构中, API Gateway 采用了类似 Facade 模式中的门面作用, 主要解决以下问题

1. Host 地址和 接口 可能变化

2. 需要一个公共应用校验权限

3. 各个微服务提供的接口颗粒度太细, 而前端应用需要多次调用api得到所有的数据

4. 负载均衡服务

5. 提供静态资源访问

6. 缓存数据

7. 日志和监控

在前几章的内容里我们基本完成了 

  • 如何写自己的插件
  • 如何配置host和接口
  • 如何校验权限
  • 如何控制颗粒度
  • 如何实现负载均衡

等几个问题的粗略讨论和解决方案

 

实际上市面上有很多开源的api gateway产品可以选择, 比如node 实现的 express-gateway , go语言实现的tyk , C#实现的Ocelot等等