高性能API网关 Apache APISIX部署
高性能API网关 Apache APISIX部署
Apache APISIX 是一个开源的、动态的、实时的高性能云原生 API 网关,由 Apache 软件基金会支持。它设计用于处理服务之间的东西向流量(即微服务间的通信)以及传统的南北向流量(客户端到服务端请求)。APISIX 提供了诸如负载均衡、动态上游、金丝雀发布、服务熔断、身份认证和可观测性等丰富的流量管理功能。此外,APISIX 还支持作为 K8s Ingress Controller 使用,能够处理进入 Kubernetes 集群的流量。
APISIX 的主要特点包括:
- 全动态能力:支持热加载,允许在不重启服务的情况下更新配置。
- 多平台支持:可以在多种环境中运行,包括裸机、Kubernetes,以及与 AWS Lambda、Azure Function、Lua 函数和 Apache OpenWhisk 等云服务集成。
- 精细化路由:使用 NGINX 内置变量作为路由匹配条件,支持自定义匹配函数。
- 运维友好:可以与多种工具和平台集成,如 HashiCorp Vault、Zipkin、Apache SkyWalking、Consul、Nacos 和 Eureka。APISIX Dashboard 提供了一个直观友好的 UI,用于配置 APISIX。
- 多语言插件支持:支持多种编程语言开发插件,方便开发者根据需求进行自定义。
APISIX 的架构设计使其能够高效地处理大量流量,同时保持扩展性和灵活性。其内部使用 Nginx 和 LuaJIT 作为基础架构,这使得 APISIX 能够充分利用 Nginx 的高性能处理能力。
在安全性方面,APISIX 支持多种身份认证机制,包括但不限于 OAuth2、JWT、 basic authentication 等,确保 API 的安全性。
APISIX 社区活跃,不断有新的特性和插件被开发和贡献。社区周报是了解 APISIX 最新进展的一个好渠道。此外,APISIX 还提供了详细的文档,帮助用户了解如何安装、配置和使用 APISIX。
对于开发人员而言,APISIX 提供了一个易于使用的开发框架,可以方便地创建和定制插件来扩展网关的功能。APISIX 的插件机制非常灵活,插件可以处理路由、限流、熔断、响应处理等各种场景。
在运维方面,APISIX 提供了便捷的运维工具,例如可以通过简单的命令进行服务的启动、停止和重启。同时,APISIX 也支持通过 Dashboard 对网关进行配置管理,提高了运维的效率和便利性。
综上所述,Apache APISIX 是一个功能全面、灵活性高、易于集成和部署的 API 网关解决方案,适用于各种规模的企业和开发者,特别是在微服务架构和云原生环境中。
安装Docker
- 参考文章 Docker初始化环境
安装APISIX
- 下载 Git项目文件 apisix-docker.zip 至运行环境
1 | wget https://zfile.ceobe.cn/s/e21haz -O apisix-docker.zip |
** 短链存在有效期,请自行获取并替换 **
- 解压缩文件:
1 | unzip apisix-docker.zip |
- 使用Docker Compose自行编排容器:
1 | cd apisix-docker/example |
- 验证 APISIX 服务:
1 | curl "http://127.0.0.1:9080" --head | grep Server |
系统界面
- 图形界面 APISIX Dashboard:
1 | http://127.0.0.1:9000/ |
默认帐号:admin
默认密码: admin
配置文件路径: apisix-docker/example/dashboard_conf/conf.yaml
- 图形界面 Grafana:
1 | http://127.0.0.1:3000 |
默认帐号: admin
默认密码: admin(首次登录时要求修改)
- 监控告警系统 Prometheus:
1 | http://127.0.0.1:9090 |
配置文件路径: apisix-docker/example/prometheus_conf/prometheus.yml
- APISIX 管理后台 & 前端:
1 | http://127.0.0.1:9180 |
创建测试路由:
1 | curl -i "http://127.0.0.1:9180/apisix/admin/routes" -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' |
调用 /ip 接口测试源地址:
-(可选)APISIX 联动雷池 Safeline
雷池是由长亭科技开发的 WAF 系统,提供对 HTTP 请求的安全请求,提供完整的 API 管理和防护能力。
自 APISIX 3.5.0 之后的版本将内置长亭雷池 WAF 插件,在启用 chaitin-waf 插件后,流量将被转发给长亭 WAF 服务,用以检测和防止各种 Web 应用程序攻击,以保护应用程序和用户数据的安全。
安装雷池
1 | bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" |
修改雷池检测引擎的工作模式
社区版雷池的检测引擎默认以 unix socket 的方式提供服务,我们需要把他修改为 tcp 方式,供 APISIX 调用。
进入雷池检测引擎的配置目录:
1 | cd /data/safeline/resources/detector/ |
用文本编辑器打开目录里的 detector.yml 文件,我们需要将 bind 方式从 unix socket 改为 tcp,添加如下配置:
1 | bind_addr: 0.0.0.0 |
detector配置的属性值将覆盖容器内默认配置文件的同名属性值。这样我们就把雷池引擎的服务监听到了 8000 端口,现在只需要把容器内的 8000 端口映射到宿主机即可。
1 | cd /data/safeline/compose.yaml |
为 detector 容器增加 ports 字段,暴露其 8000端口,参考如下:
1 | ...... |
重启雷池生效:
1 | docker compose down |
修改雷池默认端口
雷池和 apisix 默认都监听 9443 端口,如果在同一台机器上安装,需要修改雷池的默认端口。
在雷池的安装目录下,有一个名为 .env 的隐藏文件,其中的 MGT_PORT 字段,修改这里后使用上面的方法再重启雷池即可生效。
1 | cd /data/safeline |
在APISIX中绑定雷池
调用 apisix 的 api,设置雷池检测引擎的地址,供 apisix 调用,参考以下请求:
1 | curl <http://127.0.0.1:9180/apisix/admin/plugin_metadata/chaitin-waf> -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' |
调用 apisix 的 api,设置一条路由,参考以下请求:
1 | curl <http://127.0.0.1:9180/apisix/admin/routes/1> -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' |
测试防护效果
在请求中加入注入攻击参数:
1 | curl '<http://127.0.0.1:9080/>' -d 'a=1 and 1=1' |
得到结果:
1 | { |
打开雷池的控制台界面,可以看到雷池记录了完整的攻击信息。
写在最后
APISIX管理请求需密钥授权,在生产环境中使用时务必修改默认
‘X-API-KEY: edd1c9f034335f136f87ad84b625c8f1’
配置文件路径:
apisix-docker/example/apisix_conf/conf.yaml