Apisix 详解
功能
Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能。我们可以使用 Apache APISIX 来处理传统的南北向流量,也可以处理服务间的东西向流量。同时,它也支持作为 K8s Ingress Controller 来使用。
特性
- 多平台支持:APISIX 提供了多平台解决方案,它不但支持裸机运行,也支持在 Kubernetes 中使用,还支持与 AWS Lambda、Azure Function、Lua 函数和 Apache OpenWhisk 等云服务集成。
- 全动态能力:APISIX 支持热加载,这意味着你不需要重启服务就可以更新 APISIX 的配置。请访问为什么 Apache APISIX 选择 Nginx + Lua 这个技术栈?以了解实现原理。
- 精细化路由:APISIX 支持使用 NGINX 内置变量做为路由的匹配条件,你可以自定义匹配函数来过滤请求,匹配路由。
- 运维友好:APISIX 支持与以下工具和平台集成:HashiCorp Vault、Zipkin、Apache SkyWalking、Consul、Nacos、Eureka。通过 APISIX Dashboard,运维人员可以通过友好且直观的 UI 配置 APISIX。
- 多语言插件支持:APISIX 支持多种开发语言进行插件开发,开发人员可以选择擅长语言的 SDK 开发自定义插件。
概念/组件
路由(Route)
Route 字面意思就是路由,通过定义一些规则来匹配客户端的请求,然后根据匹配结果加载并执行相应的插件,并把请求转发给到指定 Upstream。
Route中主要包含三部分内容:
- 匹配规则(比如 uri、host、remote_addr 等)
- 插件配置(限流限速等)
- 上游信息
上游(Upstream)
Upstream是虚拟主机抽象,对给定的多个服务节点按照配置规则进行负债均衡。Upstream的地址信息可以直接配置到Route或Service上面,当Upstream有重复时,需要使用”引用“方式避免重复。
服务(Service)
Service是某类API的抽象(也可以理解为一组Route的抽象)。它通常与上游服务抽象是一一对应的,Route与Service之间,通常是N:1的关系。
不同Route规则同时绑定到一个Service上,这些Route将具有相同的上游和插件配置,减少冗余配置
消费者(Consumer)
对于 API 网关通常可以用请求域名、客户端 IP 地址等字段识别到某类请求方, 然后进行插件过滤并转发请求到指定上游,但有时候这个深度不够。
作为 API 网关,需要知道 API Consumer(消费方)具体是谁,这样就可以对不同 API Consumer 配置不同规则。
识别Consumer过程:
- 授权认证:比如key-auth、JWT等。
- 获取consumer_name:通过授权认证,即可自然获取到对应的Consumer name,它是Consumer 对象唯一识别标识。
- 获取Consumer上绑定的Plugin或Upstream信息:完成对不同Consumer做不同配置的效果。
Consumer是某类服务的消费者,需要与用户认证体系配合才能使用。比如不同的Consumer请求同一个API,网关服务根据当前请求用户信息,对应不同的Plugin或Upstream配置。