1、简介
apisix是一款云原生微服务API网关,可以为API提供终极性能、安全性、开源和可扩展的平台。apisix基于Nginx和etcd实现,与传统API网关相比,apisix具有动态路由和插件热加载,特别适合微服务系统下的API管理。
我们先来了解下apisix的一些核心概念,对我们接下来的使用会很有帮助!
- 上游(Upstream):可以理解为虚拟主机,对给定的多个目标服务按照配置规则进行负载均衡。
- 路由(Route):通过定义一些规则来匹配客户端的请求,然后对匹配的请求执行配置的插件,并把请求转发给指定的上游。
- 消费者(Consumer):作为API网关,有时需要知道API的消费方具体是谁,通常可以用来做身份认证。
- 服务(Service): 可以理解为一组路由的抽象。它通常与上游是一一对应的,路由与服务之间,通常是多对一的关系。
- 插件(Plugin):API网关对请求的增强操作,可以对请求增加限流、认证、黑名单等一系列功能。可以配置在消费者、服务和路由之上。
2、安装
git clone https://github.com/apache/apisix-docker.git
cd apisix-docker/example
docker-compose -p docker-apisix up -d
3、界面化功能使用
3.1、通过可视化工具来管理apisix界面
- 登录账号密码为admin:admin,访问地址:http://192.168.5.78(部署机ip):9000/
- 登录之后看下界面,还是挺漂亮的,apisix搭建非常简单,基本无坑;
- 还有两个测试服务,web1访问地址:http://192.168.5.78:9081/
- 另一个测试服务web2访问地址:http://192.168.5.78:9082/
3.2、路由功能
我们先来体验下apisix的基本功能,之前已经启动了两个Nginx测试服务web1和web2,接下来我们将通过apisix的路由功能来访问它们。
- 首先我们需要创建上游(Upstream),上游相当于虚拟主机的概念,可以对真实的服务提供负载均衡功能;
- 创建web1的上游,设置好名称、负载均衡算法和目标节点信息;
- 再按照上述方法创建web2的上游,创建完成后上游列表显示如下;
- 再创建web1的路由(Route),路由可以用于匹配客户端的请求,然后转发到上游;
- 再选择好路由的上游为web1;
- 接下来选择需要应用到路由上的插件,apisix的插件非常丰富,多达三十种,作为基本使用,我们暂时不选插件;
- 再创建web2的路由,创建完成后路由列表显示如下;
- 接下来我们通过apisix网关访问下web1服务:http://192.168.5.78:9080/web1/
- 接下来我们通过apisix网关访问下web2服务:http://192.168.5.78:9080/web2/
3.3、身份认证功能
使用JWT来进行身份认证是一种非常流行的方式,这种方式在apisix中也是支持的,可以通过启用jwt-auth插件来实现。
- 首先我们需要创建一个消费者对象(Consumer);
- 然后在插件配置中启用jwt-auth插件;
- 启用插件时配置好插件的key和secret;
- 创建成功后消费者列表时显示如下;
- 之后再创建一个路由,路由访问路径匹配/auth/*,只需启用jwt-auth插件即可;
- 访问接口获取生成好的JWT Token,需要添加两个参数,key为JWT插件中配置的key,payload为JWT中存储的自定义负载数据,JWT Token生成地址:http://192.168.5.78:9080/apisix/plugin/jwt/sign
- 不添加JWT Token访问路由接口,会返回401,接口地址:http://192.168.5.78:9080/auth/
- 在请求头Authorization中添加JWT Token后即可正常访问;
3.4、限流功能
有时候我们需要对网关进行限流操作,比如每个客户端IP在30秒内只能访问2次接口,可以通过启用limit-count插件来实现。
- 我们在创建路由的时候可以选择配置limit-count插件;
- 然后对limit-count插件进行配置,根据remote_addr进行限流;
- 当我们在30秒内第3次调用接口时,apisix会返回503来限制我们的调用。
3.5、跨域功能
如果你想让网关支持跨域访问的话,可以通过启用cors插件来实现。
- 我们在创建路由的时候可以选择配置cors插件;
- 然后对cors插件进行配置,配置好跨域访问策略;
- 调用接口测试可以发现接口已经返回了CORS相关的请求头。
4、总结
apisix作为全新一代的API网关,有可视化管理的网关果然不一样,简单易用,功能强大!如果你的微服务是云原生的话,可以试着用它来做网关。
其实apisix并不是个小众框架,很多国内外大厂都在使用了,如果你想知道哪些公司在使用,可以参考下面的连接。
https://github.com/apache/apisix/blob/master/powered-by.md
参考资料
apisix的官方文档非常友好,支持中文,简直是业界良心!过一遍官方文档基本就能掌握apisix了。
官方文档:https://apisix.apache.org/zh/docs/apisix/getting-started