概述
1. 概述
APISIX 是基于 OpenResty + etcd 实现的云原生、高性能、可扩展的微服务 API 网关。它是国人开源,目前已经进入 Apache 进行孵化,牛逼!!!
- OpenResty:通过 Lua 扩展 Nginx 实现的可伸缩的 Web 平台。
- etcd:Key/Value 存储系统。
APISIX 通过插件机制,提供了动态负载平衡、身份验证、限流限速等等功能,当然我们也可以自己开发插件进行拓展。
- 动态负载均衡:跨多个上游服务的动态负载均衡,目前已支持 round-robin 轮询和一致性哈希算法。
- 身份验证:支持 key-auth、JWT、basic-auth、wolf-rbac 等多种认证方式。
- 限流限速:可以基于速率、请求数、并发等维度限制。
并且 APISIX 还支持 A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、监控报警、服务可观测性、服务治理等等高级功能,这在作为微服务 API 网关非常重要的特性。
APISIX 的文档非常齐全,由于它是国人开源,所以文档也是中文友好。因此,艿艿这里就不哔哔介绍,胖友可以后续可以阅读如下:
- 《APISIX 官方文档 —— 简介》
- 《APISIX 官方文档 —— 插件》
- 《APISIX 官方文档 —— 白皮书》
下面,我们正式进入 APISIX 的极简入门之旅。
2. 快速安装
在《APISIX 官方文档 —— 安装》中,介绍了源码包、RPM 包、Luarocks、Docker 四种安装方式。这里我们使用 CentOS 7.X 系统,所以采用 RPM 包。
因为 APISIX 是基于 OpenResty + etcd 来实现,所以需要安装它们两。
2.1 安装 OpenResty
安装 OpenResty,使用如下命令:
# 安装 OpenResty 的 YUM 软件源
$ yum install yum-utils
$ yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
# 安装 OpenResty 软件
$ yum install -y openresty
2.2 安装 etcd
安装 etcd,使用如下命令:
# 安装 etcd
$ yum install -y etcd
# 启动 etcd
$ service etcd start
2.3 安装 APISIX
安装 APISIX,使用如下命令:
友情提示:这里我们安装的 APISIX 的版本是 1.2 版本。
最新版本的,可以从《APISIX 官方文档 —— 构建 Apache APISIX》获取。
# 安装 APISIX
$ yum install -y https://github.com/apache/incubator-apisix/releases/download/1.2/apisix-1.2-0.el7.noarch.rpm
# 启动 APISIX
$ apisix start
此时,APISIX 安装在 /usr/local/apisix/
目录,使用如下命令:
$ cd /usr/local/apisix/
$ ls -ls
total 40
4 drwxr-xr-x 8 root root 4096 May 1 20:40 apisix # APISIX 程序
4 drwx------ 2 nobody root 4096 May 1 20:44 client_body_temp
4 drwxr-xr-x 3 root root 4096 May 1 20:50 conf # 配置文件
4 drwxr-xr-x 6 root root 4096 May 1 20:40 dashboard # APISIX 控制台
4 drwxr-xr-x 5 root root 4096 May 1 20:40 deps
4 drwx------ 2 nobody root 4096 May 1 20:44 fastcgi_temp
4 drwxrwxr-x 2 root root 4096 May 1 20:44 logs # 日志文件
4 drwx------ 2 nobody root 4096 May 1 20:44 proxy_temp
4 drwx------ 2 nobody root 4096 May 1 20:44 scgi_temp
4 drwx------ 2 nobody root 4096 May 1 20:44 uwsgi_temp
默认情况下,APISIX 启动在 9080 端口,使用如下命令:
$ curl http://127.0.0.1:9080/
{"error_msg":"failed to match any routes"}
3. APISIX 控制台
APISIX 内置控制台功能,方便我们进行 APISIX 的 Route、Consumer、Service、SSL、Upstream 的查看与维护。如下图所示:
在 /usr/local/apisix/conf/nginx.conf
配置文件中,设置了 APISIX 控制台的访问路径为 /apisix/dashboard
。如下图所示:
友情提示:如果胖友是安装 APISIX 在本机上,可以不执行如下步骤。
考虑到安全性,APISIX 控制台只允许本机访问,因此我们需要修改 /usr/local/apisix/conf/config.yaml
配置文件,增加允许访问的远程 IP 地址。如下图所示:
修改完配置后,使用 apisix restart
命令,重启 APISIX 来生效配置。然后,使用浏览器访问 http://172.16.48.185:9080/apisix/dashboard 地址,进入 APISIX 控制台。结果如下图所示:
使用默认的「admin/123456」账号,登陆 APISIX 控制台。结果如下图:
友情提示:APISIX 控制台是通过调用 APISIX 提供的管理 API 来实现的,所以可以看看《APISIX 官方文档 —— 管理 API》
4. 动态负载均衡
本小节,我们来实现对后端服务提供的 API 接口进行负载均衡。考虑到方便,艿艿在 https://github.com/YunaiV/SpringBoot-Labs 仓库提供了一个 Spring Boot 项目 lab-56-demo01
,如下图所示:
最终示例的效果,如下图所示:
4.1 启动后端服务
分别执行 Demo01Application、Demo02Application 类,在 18080 和 28080 端口,启动两个后端服务。然后,调用示例 /demo/echo
接口,确认启动成功。
友情提示:10.8.8.18 地址,为艿艿部署后端服务的地址。
$ curl http://10.8.8.18:18080/demo/echo
echo:18080
$ curl http://10.8.8.18:28080/demo/echo
echo:28080
4.2 创建 APISIX Upstream
APISIX Upstream,是虚拟主机抽象,对给定的多个服务节点按照配置规则进行负载均衡。
更多 Upstream 的介绍,可以看《APISIX 官方文档 —— 架构设计(Upstream)》。
在 APISIX 控制台的「Upstream」菜单中,创建一个 APISIX Upstream。如下图所示:
4.3 创建 APISIX Route
APISIX Route,字面意思就是路由,通过定义一些规则来匹配客户端的请求,然后根据匹配结果加载并执行相应的 插件,并把请求转发给到指定 Upstream。
更多 Route 的介绍,可以看《APISIX 官方文档 —— 架构设计(Route)》。
4.4 简单测试
现在,我们来请求 APISIX 网关,转发请求到后端服务。
友情提示:172.16.48.185 地址,为艿艿部署 APISIX 网关的地址。
$ curl http://172.16.48.185:9080/demo/echo
echo:18080
$ curl http://172.16.48.185:9080/demo/echo
echo:28080
$ curl http://172.16.48.185:9080/demo/echo
echo:18080
$ curl http://172.16.48.185:9080/demo/echo
echo:28080
从结果可以看出,APISIX 网关使用轮询算法,将请求轮流转发到后端服务。
5. 限流限速
APISIX 内置了三个限流限速插件:
- limit-count:基于“固定窗口”的限速实现。
- limit-req:基于漏桶原理的请求限速实现。
- limit-conn:限制并发请求(或并发连接)。
本小节,我们来演示使用 limit-req 插件,毕竟基于漏桶的限流算法,是目前较为常用的限流方式。
漏桶算法(Leaky Bucket)是网络世界中流量整形(Traffic Shaping)或速率限制(Rate Limiting)时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。
漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。
5.1 配置 limit-req 插件
在「4. 动态负载均衡」小节中,我们已经创建了一个 APISIX Route。这里,我们给该 Route 配置下 limit-req 插件。如下图所示:
rate
:指定的请求速率(以秒为单位),请求速率超过rate
但没有超过 (rate
+brust
)的请求会被加上延时burst
:请求速率超过 (rate
+brust
)的请求会被直接拒绝rejected_code
:当请求超过阈值被拒绝时,返回的 HTTP 状态码key
:是用来做请求计数的依据,当前接受的 key 有:”remote_addr”(客户端 IP 地址), “server_addr”(服务端 IP 地址), 请求头中的”X-Forwarded-For” 或 “X-Real-IP”。
上述配置限制了每秒请求速率为 1,大于 1 小于 3 的会被加上延时,速率超过 3 就会被拒绝。
5.2 简单测试
快速多次请求 http://172.16.48.185:9080/demo/echo 地址,我们会看到页面返回 503 错误码,成功被 APISIX 所限流。如下图所示:
6. 身份验证
APISIX 内置了四个身份验证插件:
- key-auth:基于 Key Authentication 的用户认证。
- JWT-auth:基于 JWT (JSON Web Tokens) Authentication 的用户认证。
- basic-auth:基于 basic auth 的用户认证。
-
wolf-rbac:基于 RBAC 的用户认证及授权。
需要额外搭建 wolf 服务,提供用户、角色、资源等信息。
本小节,我们来演示使用 JWT-auth 插件,大家比较熟知的认证方式。不了解的胖友,可以阅读如下文章:
- 《JSON Web Token - 在Web应用间安全地传递信息》
- 《八幅漫画理解使用 JSON Web Token 设计单点登录系统》
6.1 配置 JWT-auth 插件
① 在 APISIX 控制台的「Consumer」菜单中,创建一个 APISIX Consumer,使用 JWT-auth 插件。如下图所示:
Consumer 是某类服务的消费者,需与用户认证体系配合才能使用。
更多 Consumer 的介绍,可以看《APISIX 官方文档 —— 架构设计(Consumer)》。
-
其中每个属性的作用如下:
key
: 不同的consumer
对象应有不同的值,它应当是唯一的。不同 consumer 使用了相同的key
,将会出现请求匹配异常。secret
: 可选字段,加密秘钥。如果您未指定,后台将会自动帮您生成。algorithm
:可选字段,加密算法。目前支持HS256
,HS384
,HS512
,RS256
和ES256
,如果未指定,则默认使用HS256
。exp
: 可选字段,token 的超时时间,以秒为单位的计时。比如有效期是 5 分钟,那么就应设置为5 * 60 = 300
。
② 在「4. 动态负载均衡」小节中,我们已经创建了一个 APISIX Route。这里,我们给该 Route 配置下 JWT-auth 插件。如下图所示:
友情提示:是不是觉得配置过程有点怪怪的,淡定~
6.2 简单测试
① 调用 jwt-auth 插件提供的签名接口,获取 Token。
# key 参数,为我们配置 jwt-auth 插件时,设置的 key 属性。
$ curl http://172.16.48.185:9080/apisix/plugin/jwt/sign?key=yunai
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ5dW5haSIsImV4cCI6MTU4ODQ3MzA5NX0.WlLhM_gpr-zWKXCcXEuSuw-7JosU9mnHwfeSPtspCGo
② 使用 Postman 模拟调用示例 /demo/echo
接口,并附带上 JWT。如下图所示:
友情提示:至此,我们已经完成了 JWT-auth 插件的学习。
胖友可以先删除示例 Route 配置的 JWT-auth 插件,方便模拟请求哈。
7. 健康检查
因为 APISIX 控制台暂未提供健康检查的配置功能,等后续有了在补充。
胖友可以先阅读《APISIX 官方文档 —— 健康检查》,使用 APISIX Admin API 进行添加健康检查的配置。
最后
以上就是高高香菇为你收集整理的APISIX 极简入门(国产微服务网关)1. 概述2. 快速安装3. APISIX 控制台4. 动态负载均衡5. 限流限速6. 身份验证7. 健康检查的全部内容,希望文章能够帮你解决APISIX 极简入门(国产微服务网关)1. 概述2. 快速安装3. APISIX 控制台4. 动态负载均衡5. 限流限速6. 身份验证7. 健康检查所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复