Apache APISIX 是一个动态、实时、高性能的 API 网关。
APISIX API 网关提供负载均衡、动态上行、灰度发布、熔断、鉴权、可观测等丰富的流量管理功能。
您可以使用 APISIX API 网关来处理传统的南北向流量, 以及服务之间的东西向流量。它也可以用作 k8s 入口控制器。
Apache APISIX 的技术架构:
特征
您可以使用 APISIX API 网关作为流量入口来处理所有业务数据,包括动态路由、动态上游、动态证书、 A/B测试、金丝雀发布、蓝绿部署、限速、恶意攻击防御、指标、监控告警、服务可观测性、服务治理等。
- 所有平台
- 云原生:与平台无关,无厂商锁定,APISIX API 网关可以从裸机运行到 Kubernetes。
- 支持 ARM64:不用担心基础设施技术的锁定。
- 多协议
- TCP/UDP 代理:动态 TCP/UDP 代理。
- Dubbo Proxy:动态 HTTP 到 Dubbo 代理。
- 动态 MQTT 代理:支持通过 MQTT 进行负载均衡,均支持 MQTT 3.1.*、5.0。
client_id
- gRPC 代理:代理 gRPC 流量。
- gRPC Web 代理:将 gRPC Web 流量代理到 gRPC 服务。
- gRPC 转码:支持协议转码,以便客户端可以使用 HTTP/JSON 访问 gRPC API。
- 代理网络套接字
- 代理协议
- HTTP(S) 转发代理
- SSL:动态加载 SSL 证书。
- 全动态
- 热更新和热插件:持续更新其配置和插件,无需重新启动!
- 代理重写:支持在发送到上游之前重写请求的、、、。
hosturischemamethodheaders
- 响应重写:为客户端设置自定义的响应状态代码、正文和标头。
- 动态负载平衡:循环负载平衡与权重。
- 基于哈希的负载平衡:通过一致的哈希会话进行负载平衡。
- 健康检查:在上游节点上开启健康检查,在负载均衡过程中自动过滤不健康的节点,保证系统稳定性。
- 断路器:智能跟踪不正常的上游服务。
- 代理镜像:提供镜像客户端请求的功能。
- 流量拆分:允许用户在各个上游之间增量定向流量百分比。
- 细粒度路由
- 支持全路径匹配和前缀匹配
- 支持所有 Nginx 内置变量作为路由条件,因此可以使用 、 等作为路由条件来实现金丝雀发布、A/B 测试等。
cookieargs
- 支持各种算子作为路由的判断条件,例如
{"arg_age", ">", 24}
- 支持自定义路由匹配功能
- IPv6:使用 IPv6 匹配路由。
- 支持TTL
- 支持优先级
- 支持批量 http 请求
- 支持按 GraphQL 属性过滤路由
- 安全
- 密钥身份验证
- 智威汤逊
- 基本身份验证
- 沃尔夫-RBAC
- 卡斯宾
- 钥匙斗篷
- 卡斯多尔
- 丰富的身份验证和授权支持:
- IP 白名单/黑名单
- 推荐人白名单/黑名单
- IdP:支持外部身份平台,如Auth0、okta等。
- 限制要求
- 限制计数
- 限制并发
- 反重做(正则表达式拒绝服务):无需配置的反重做S的内置策略。
- 科尔斯为您的 API 启用 CORS(跨域资源共享)。
- URI 阻止程序:通过 URI 阻止客户端请求。
- 请求验证器
- 企业社会责任基于
双重提交 Cookie
的方式,保护您的 API 免受 CSRF 攻击。
- 运维友好
- 齐普金追踪:齐普金
- 开源APM:支持Apache SkyWalking
- 与外部服务发现一起工作:除了内置的etcd,它还支持Consul,Nacos,Eureka和Zookeeper(CP)。
- 监控和指标:普罗米修斯
- 集群:APISIX 节点是无状态的,创建集群的配置中心,请参考 etcd 集群指南。
- 高可用:支持在同一集群中配置多个 etcd 地址。
- 挡泥板
- 版本控制:支持操作回滚。
- CLI:通过命令行启动停止重新加载 APISIX。
- 单机:支持从本地 YAML 文件加载路由规则,在 kubernetes(k8s) 下更友好。
- 全局规则:允许为所有请求运行任何插件,例如:限制速率,IP过滤器等。
- 高性能:单核QPS达到18k,平均时延小于0.2毫秒。
- 故障注入
- REST 管理员 API:使用 REST 管理 API 控制 Apache APISIX,默认只允许 127.0.0.1 访问,您可以修改 中的字段以指定允许调用管理 API 的 IP 列表。另请注意,管理 API 使用密钥身份验证来验证调用方的身份。在部署之前,需要修改
conf/config.yaml
中的admin_key
字段以确保安全性。allow_adminconf/config.yaml
- 外部记录器:将访问日志导出到外部日志管理工具。(HTTP Logger,TCP Logger,Kafka Logger,UDP Logger,RocketMQ Logger,SkyWalking Logger,Alibaba Cloud Logging(SLS),Google Cloud Logging,Splunk HEC Logging,File Logger,SolarWinds Loggly Logging,TencentCloud CLS)。
- ClickHouse:将日志推送到ClickHouse。
- Elasticsearch:将日志推送到 Elasticsearch。
- Datadog:通过UDP协议将自定义指标推送到DogStatsD服务器,与Datadog代理捆绑在一起。DogStatsD基本上是StatsD协议的实现,它收集Apache APISIX代理的自定义指标,将其聚合到单个数据点中,并将其发送到配置的Datadog服务器。
- 掌舵图
- HashiCorp Vault:支持机密管理解决方案,用于从低信任环境中支持的 Vault 安全存储访问机密。目前,可以使用 APISIX 密钥资源从 jwt-auth 身份验证插件中的保管库链接 RS256 密钥(公钥-私钥对)或密钥。
- 高度可扩展
- 自定义插件:允许钩接常见阶段,例如、、、和,也允许挂钩舞台。
rewriteaccessheader filterbody filterlogbalancer
- 插件可以用Java/Go/Python编写
- 插件可以用代理 Wasm SDK 编写
- 自定义负载均衡算法:您可以在该阶段使用自定义负载均衡算法。
balancer
- 自定义路由:支持用户自行实现路由算法。
- 自定义插件:允许钩接常见阶段,例如、、、和,也允许挂钩舞台。
- 多语言支持
- Apache APISIX 是一个用于插件开发的多语言网关,并通过 和 提供支持。
RPCWasm
- RPC 方式,是当前的方式。开发者可以根据自己的需求选择语言,在与 RPC 启动独立进程后,通过本地 RPC 通信与 APISIX 交换数据。到目前为止,APISIX 还支持 Java、Golang、Python 和 Node.js。
- Wasm或WebAssembly是一种实验性的方式。APISIX 可以通过使用 Proxy Wasm SDK 编写的 APISIX wasm 插件加载和运行 Wasm 字节码。开发者只需要根据 SDK 编写代码,然后使用 APISIX 编译成在 Wasm VM 上运行的 Wasm 字节码。
- Apache APISIX 是一个用于插件开发的多语言网关,并通过 和 提供支持。
- 无服务器
- Lua 函数:在 APISIX 的每个阶段调用函数。
- AWS Lambda:与 AWS Lambda 的集成充当动态上游,将特定 URI 的所有请求代理到 AWS API 网关终端节点。支持通过 API 密钥和 AWS IAM 访问密钥进行授权。
- Azure Functions:与 Azure Serverless Function 无缝集成,作为动态上游,将特定 URI 的所有请求代理到Microsoft Azure 云。
- Apache OpenWhisk:与Apache OpenWhisk无缝集成,作为动态上游,将特定URI的所有请求代理到您自己的OpenWhisk集群。