Apisix 网关
介绍
Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能。
官方自吹,为什么说 Apache APISIX 是最好的 API 网关? | Apache APISIX® -- Cloud-Native API Gateway
架构
- 设计图
Apache APISIX 是一个动态、实时、高性能的云原生 API 网关。它构建于 NGINX + ngx_lua 的技术基础之上,充分利用了 LuaJIT 所提供的强大性能。 APISIX 主要分为两个部分:
- APISIX 核心:包括 Lua 插件、多语言插件运行时(Plugin Runner)、Wasm 插件运行时等;
- 功能丰富的各种内置插件:包括可观测性、安全、流量控制等。
术语
1. Route
Route(也称为路由)是 APISIX 中最基础和最核心的资源对象,APISIX 可以通过路由定义规则来匹配客户端请求,根据匹配结果加载并执行相应的插件,最后将请求转发给到指定的上游服务。 路由中主要包含三部分内容:
- 匹配规则:比如 uri、host、remote_addr 等等,你也可以自定义匹配规则,详细信息请参考 Route body 请求参数。
- 插件配置:你可以根据业务需求,在路由中配置相应的插件来实现功能。详细信息请参考 Plugin 和 plugin-config。
- 上游信息:路由会根据配置的负载均衡信息,将请求按照规则转发至相应的上游。详细信息请参考 Upstream。
2. Upstream
Upstream(也称之为上游)是对虚拟主机抽象,即应用层服务或节点的抽象
3. Service
Service(也称之为服务)是某类 API 的抽象(也可以理解为一组 Route 的抽象)。它通常与上游服务抽象是一一对应的,但与路由之间,通常是 1:N 即一对多的关系
4. Consumer
Consumer 是某类服务的消费者,需要与用户认证配合才可以使用。当不同的消费者请求同一个 API 时,APISIX 会根据当前请求的用户信息,对应不同的 Plugin 或 Upstream 配置。 对于 API 网关而言,一般情况可以通过请求域名、客户端 IP 地址等字段识别到某类请求方,然后进行插件过滤并转发请求到指定上游。但有时候该方式达不到用户需求,因此 APISIX 支持了 Consumer 对象。
5. Plugin
Plugin 表示将在 HTTP 请求/响应生命周期期间执行的插件配置。Plugin 的配置信息可以直接绑定在 Route 上,也可以被绑定在 Service、Consumer 或 Plugin Config 上。
对于同一个插件的配置,只能有一个是有效的,其插件配置优先级为
Consumer > Route > Plugin Config > Service。
6. Global rules
Global Rules作用于所有请求, 定义的插件总是优先执行。
内置插件 (部分)
- 通用插件:ext-plugin-post-req,ext-plugin-pre-req (需要和外部插件配合)
- 转化插件:response-rewrite
- 认证插件:key-auth, jwt-auth, basic-auth,openid-connect
- 安全插件:cors,uri-blocker,ip-restriction, ua-restriction
- 流量控制:limit-req, limit-conn, limit-count, proxy-cache, traffic-split
- 观测性插件:链路,指标,日志
Java Plugin Runner
Apisix dashboard
- 仪表盘页面
- 控制面板,可以在页面上创建各种规则(路由,上游,服务,消费者,插件)