Apache APISIX 是一个开源的云原生 API 网关,属于 Apache 软件基金会项目。它基于 NGINX 和 LuaJIT 技术,具备高性能、动态配置、实时响应和良好扩展性,主要用于管理和转发大量 API 请求,广泛应用于微服务架构中。
一、APISIX的基础知识点
1. 什么是 API 网关?
API 网关是位于客户端和后端服务之间的中间层,负责接收所有外部请求,统一管理、路由、转发请求到具体的服务,并提供安全、流量控制、监控等功能。
2. APISIX 的核心组成
组件 | 作用说明 |
---|---|
路由(Route) | 定义请求匹配规则(如路径、方法),决定请求如何处理和转发。 |
上游(Upstream) | 抽象后端服务节点,支持负载均衡,将请求分发到多个服务实例。 |
插件(Plugin) | 对请求进行增强处理,如限流、认证、日志、缓存、安全防护等。 |
配置存储(etcd) | 保存 APISIX 配置,实现配置的动态同步和热更新。 |
3. APISIX 的主要特点
- 高性能:单核 QPS(每秒请求数)可达 23000 以上,延迟极低。
- 动态配置:支持热加载配置,无需重启服务即可生效。
- 丰富插件:内置限流、认证、缓存、日志、监控等多种插件,支持自定义插件开发。
- 多语言支持:插件支持 Lua、Golang、Java、Python 等语言。
- 云原生友好:支持 Kubernetes Ingress Controller,适合云环境部署。
- 安全防护:支持身份认证、IP 黑白名单、防火墙等安全功能。
- 灰度发布:支持蓝绿部署、金丝雀发布、A/B 测试,方便业务平滑升级。
二、APISIX 常见使用场景
- 大规模微服务流量管理:处理海量 API 请求,支持高可用和动态路由。
- 流量控制与调度:限流、熔断、重试,保障系统稳定。
- 安全防护:防止恶意攻击,保护后端服务。
- 灰度发布与测试:支持业务平滑升级,减少风险。
- 云原生集成:作为 Kubernetes Ingress Controller 或服务网格组件。
三、快速上手:本地安装与简单路由配置示例
1. 安装前准备
- 安装 Docker(用于运行 APISIX 和 etcd 容器)
2. 一键快速启动 APISIX
打开终端,执行以下命令:
bash
curl -sL https://run.api7.ai/apisix/quickstart | sh
成功后会显示:
text
✔ APISIX is ready!
3. 验证 APISIX 是否正常运行
执行:
bash
curl "http://127.0.0.1:9080" --head | grep Server
如果返回类似:
text
Server: APISIX/3.x.x
说明 APISIX 已启动成功。
4. 创建一个简单的路由,将请求转发到 httpbin.org
使用下面的命令创建路由:
bash
curl -i "http://127.0.0.1:9180/apisix/admin/routes/test-route" -X PUT -d '
{
"uri": "/ip",
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'
- 这里
"uri": "/ip"
表示匹配访问路径为/ip
的请求。 "upstream"
指定请求转发到httpbin.org
。
成功时返回 HTTP 201 Created。
5. 测试路由是否生效
执行:
bash
curl "http://127.0.0.1:9080/ip"
你会看到类似如下的 JSON 响应,显示你的公网 IP:
json
{
"origin": "你的公网IP"
}
四、进阶示例:配置限流和认证插件
1. 限流插件示例
给上面创建的路由添加限流插件,限制每分钟最多 10 次请求:
bash
curl -i "http://127.0.0.1:9180/apisix/admin/routes/test-route" -X PATCH -d '
{
"plugins": {
"limit-count": {
"count": 10,
"time_window": 60,
"rejected_code": 503,
"key": "remote_addr",
"policy": "local"
}
}
}'
count
: 最大请求数time_window
: 时间窗口(秒)key
: 按客户端 IP 限流rejected_code
: 超限返回的 HTTP 状态码
2. JWT 认证插件示例
为路由开启 JWT 认证:
bash
curl -i "http://127.0.0.1:9180/apisix/admin/routes/test-route" -X PATCH -d '
{
"plugins": {
"jwt-auth": {}
}
}'
然后你需要在 APISIX 中创建 JWT 消费者和密钥,详细操作可以参考官方文档。
五、APISIX 插件开发示例(Lua)
下面是一个简单的自定义插件示例,给响应添加自定义 HTTP 头:
lua
local plugin = {
name = "add-header",
version = "0.1",
priority = 1000,
schema = {
type = "object",
properties = {
header_name = { type = "string" },
header_value = { type = "string" }
},
required = { "header_name", "header_value" }
}
}
function plugin:header_filter(conf)
ngx.header[conf.header_name] = conf.header_value
end
return plugin
将此插件注册到 APISIX 后,可以在路由中配置:
json
"plugins": {
"add-header": {
"header_name": "X-Custom-Header",
"header_value": "HelloAPISIX"
}
}
访问该路由时,响应头中会带有 X-Custom-Header: HelloAPISIX
。
六、总结
Apache APISIX 是一款功能强大、性能优异的云原生 API 网关,适合各种规模的业务场景。它支持动态路由、负载均衡、丰富插件、安全防护和灰度发布等功能。通过简单的安装和配置,开发者可以快速搭建起高效的 API 管理平台。
以上内容结合了基础概念、安装步骤、配置示例和插件开发,帮助你快速理解和使用 Apache APISIX,适合中国开发者入门和实战。