Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能。我们可以使用 Apache APISIX 来处理传统的南北向流量,也可以处理服务间的东西向流量。同时,它也支持作为 K8s Ingress Controller 来使用。
多平台支持: APISIX 提供了多平台解决方案,它不但支持裸机运行,也支持在 Kubernetes 中使用,还支持与 AWS Lambda、Azure Function、Lua 函数和 Apache OpenWhisk 等云服务集成。
全动态能力: APISIX 支持热加载,这意味着你不需要重启服务就可以更新 APISIX 的配置。
精细化路由: APISIX 支持使用 NGINX 内置变量做为路由的匹配条件,你可以自定义匹配函数来过滤请求,匹配路由。
运维友好: APISIX 支持与以下工具和平台集成:HashiCorp Vault、Zipkin、Apache SkyWalking、Consul、Nacos、Eureka。通过 APISIX Dashboard,运维人员可以通过友好且直观的 UI 配置 APISIX。
多语言插件支持: APISIX 支持多种开发语言进行插件开发,开发人员可以选择擅长语言的 SDK 开发自定义插件。
在开始使用 APISIX 之前,请确保你已经安装以下应用:Docker 和 Docker Compose。
参考博客:
Centos7上安装Docker
https://blog.csdn.net/weixin_44917045/article/details/128749333
Centos7上安装docker-compose
https://blog.csdn.net/weixin_44917045/article/details/128752105
我们将使用 Docker 安装 APISIX 并启用 Admin API。
在win10电脑上使用git克隆apisix-docker仓库,并压缩为apisix-docker.zip压缩文件。
git clone https://github.com/apache/apisix-docker.git
使用rz
上传指令上传apisix-docker.zip文件至/usr/local/apisix-docker
目录中并解压。
切换目录至/usr/local/apisix-docker/example
,执行指令docker-compose -p docker-apisix up -d
。
注意:请确保其他系统进程没有占用 9080、9180、9443 和 2379 端口。
使用docker ps
查看apisix相关容器运行情况。
发现apisix容器状态处于一直重启状态,使用docker logs apisix
查看容器运行日志,报错如下:
nginx: [alert] could not open error log file: open() "/usr/local/apisix/logs/error.log" failed (13: Permission denied)
解决办法:
具体的解决方法不确定,我是升级了docker版本,授予example文件夹权限,再重新启动就好了。
请参考github上提供的解决办法:https://github.com/apache/apisix-docker/issues/325
授予example文件夹权限
chmod -R 777 /usr/local/apisix-docker/example/
升级docker版本至20.10.18,docker版本不易过低。
重新启动apisix,相关容器运行正常。
至此,在docker中安装apisix就安装成功了!
在浏览器上访问http://192.168.131.44:9000即可访问apisix dashboard。
apisix提供了强大的AdminAPI和Dashboard供用户使用,用户可以通过AdminAPI提供的相关指令来创建路由和上游服务,并将路由和上游服务进行绑定。当一个请求到达apisix时,apisix会将请求转发到指定的上游服务中。
为了操作简单,我们这里使用的是在Dashboard中创建路由和服务。
为了方便测试,我们创建一个SpringBoot项目,提供一个/user/test接口,对项目按照8002和8003端口进行打包,/user/test接口返回的内容做了区分。
第一个服务
nohup java -jar /home/images/api/backend-1.0-SNAPSHOT.jar \
--server.port=8002 \
2>&1 > /home/images/api/nohup.log &
第二个服务
nohup java -jar /home/images/api2/backend-1.0-SNAPSHOT.jar \
--server.port=8003 \
2>&1 > /home/images/api2/nohup.log &
服务由路由中公共的插件配置、上游目标信息组合而成。服务与路由、上游关联,一个服务可对应一组上游节点、可被多条路由绑定。
创建一个名为test-service的服务,负载均衡算法为带权轮询,目标服务为192.168.44.131:8002、192.168.44.131:8003
路由(Route)是请求的入口点,它定义了客户端请求与服务之间的匹配规则。路由可以与服务(Service)、上游(Upstream)关联,一个服务可对应一组路由,一个路由可以对应一个上游对象(一组后端服务节点),因此,每个匹配到路由的请求将被网关代理到路由绑定的上游服务中。
创建一个名为test-route的路由,绑定的服务为test-service,暂时先不绑定上游服务。路由可以配置上游服务、插件等信息。为了简单测试,我们暂时不进行配置。
当路由创建完成后,可以通过以下命令访问上游服务。http://192.168.44.131:9080/user/test,该请求将被 APISIX 转发到http://192.168.44.131:8002/user/test和http://192.168.44.131:8003/user/test。