当前位置: 首页 > news >正文

探索Apache APISIX:动态高性能API网关

Apisix是什么?

Apache APISIX 是一个基于 OpenResty 和 Etcd 实现的动态、实时、高性能的 API 网关,目前已经是 Apache 顶级项目。提供了丰富的流量管理功能,如负载均衡、动态路由、动态 upstream、A/B 测试、金丝雀发布、限速、熔断、防御恶意攻击、认证、监控指标、服务可观测性、服务治理等。可以使用 APISIX 来处理传统的南北流量以及服务之间的东西向流量。

APISIX 基于 Nginx 和 etcd,与传统 API 网关相比,APISIX 具有动态路由和热加载插件功能,避免了配置之后的 reload 操作,同时 APISIX 支持 HTTP(S)、HTTP2、Dubbo、QUIC、MQTT、TCP/UDP 等更多的协议。而且还内置了 Dashboard,提供强大而灵活的界面。同样也提供了丰富的插件支持功能,而且还可以让用户自定义插件

Apisix架构图
 

上图是 APISIX 的架构图,整体上分成数据面和控制面两个部分,控制面用来管理路由,主要通过 etcd 来实现配置中心,数据面用来处理客户端请求,通过 APISIX 自身来实现,会不断去 watch etcd 中的 route、upstream 等数据。

APISIX Ingress 工作原理

同样作为一个 API 网关,APISIX 也支持作为 Kubernetes 的一个 Ingress 控制器进行使用。APISIX Ingress 在架构上分成了两部分,一部分是 APISIX Ingress Controller,作为控制面它将完成配置管理与分发。另一部分 APISIX(代理) 负责承载业务流量。

当 Client 发起请求,到达 Apache APISIX 后,会直接把相应的业务流量传输到后端(如 Service Pod),从而完成转发过程。此过程不需要经过 Ingress Controller,这样做可以保证一旦有问题出现,或者是进行变更、扩缩容或者迁移处理等,都不会影响到用户和业务流量。

同时在配置端,用户通过 kubectl apply 创建资源,可将自定义 CRD 配置应用到 K8s 集群,Ingress Controller 会持续 watch 这些资源变更,来将相应配置应用到 Apache APISIX(通过 admin api)。

从上图可以看出 APISIX Ingress 采用了数据面与控制面的分离架构,所以用户可以选择将数据面部署在 K8s 集群内部或外部。但 Ingress Nginx 是将控制面和数据面放在了同一个 Pod 中,如果 Pod 或控制面出现一点闪失,整个 Pod 就会挂掉,进而影响到业务流量。这种架构分离,给用户提供了比较方便的部署选择,同时在业务架构调整场景下,也方便进行相关数据的迁移与使用。

APISIX Ingress controller Resources

控制器目前支持的核心特性包括:

  • 全动态,支持高级路由匹配规则,可与 Apache APISIX 官方 50 多个插件 & 客户自定义插件进行扩展使用

  • 支持 CRD,更容易理解声明式配置

  • 兼容原生 Ingress 资源对象和 Gateway API

  • 支持流量切分

  • 服务自动注册发现,无惧扩缩容

  • 更灵活的负载均衡策略,自带健康检查功能

  • 支持 gRPC plaintext 与 TCP 4 层代理

  1. service

在 Kubernetes 中,Service 是一种将一组 Pod 上运行的网络应用程序公开为网络服务的方法。

当代理入口流量时,APISIX Gateway 默认将流量直接引导至 Pod,而不是通过 kube-proxy。

  1. EndpointSlice

EndpointSlice 对象表示服务的后端网络端点的子集(切片)。

APISIX Ingress Controller 持续跟踪匹配的 EndpointSlice 对象,每当 Service 中的 Pod 集合发生变化时,APISIX Gateway 代理的 Pod 集合也会相应更新。

  1. ingress

Ingress 是一种 Kubernetes 资源,用于管理集群内服务的外部访问,通常是 HTTP 和 HTTPS 流量。它提供了一种定义将外部流量路由到内部服务的规则的方法。

APISIX Ingress Controller CRDs API

APISIX Ingress Controller 定义了几个自定义资源定义 (CRD) 来声明性地管理路由、上游、TLS 和集群设置。

Gateway API (kubernetes 原生网关)

启用标准 Kubernetes Gateway API 中未包含的附加功能,这些功能由 Gateway API 实施者开发和维护,以安全可靠地扩展功能。

  • GatewayProxy:定义 APISIX Ingress Controller 与 APISIX 之间的连接设置,包括 auth、endpoint 和全局插件。通过 Gateway、GatewayClass 或 IngressClass 中的 parametersRef 引用。

  • BackendTrafficPolicy:定义后端服务的流量管理设置,包括 APISIX Ingress Controller 中的负载平衡、超时、重试和主机头处理。

  • 消费者:定义 API 消费者及其凭证,启用身份验证和插件配置来控制对 API 端点的访问。

  • PluginConfig:定义可重复使用的插件配置,可以被 HTTPRoute 等其他资源引用,从而实现路由逻辑和插件设置的分离,从而实现更好的可重用性和可管理性。

  • HTTPRoutePolicy:为HTTPRoute或Ingress资源配置高级流量管理和路由策略,在不修改原有资源的情况下增强功能。

APISix Ingress CRD

APISIX Ingress Controller CRD 扩展了 Kubernetes 功能,为 Apache APISIX 网关提供声明式配置管理,支持高级路由、流量管理和安全策略。

  • ApisixRoute:定义 HTTP/TCP/UDP 的路由规则,支持路径匹配、主机名、方法过滤和后端服务配置。可以引用 ApisixUpstream 和 ApisixPluginConfig 资源。

  • ApisixUpstream:通过负载平衡、健康检查、重试、超时和服务子集选择等高级配置扩展 Kubernetes 服务。

  • ApisixConsumer:定义 API 消费者及其身份验证凭证,支持 basicAuth、keyAuth、jwtAuth、hmacAuth、wolfRBAC 和 ldapAuth 等方法。

  • ApisixPluginConfig:通过 plugin_config_name 字段定义 ApisixRoute 引用的可重用插件配置,促进路由逻辑和插件设置的分离。

  • ApisixTls:管理 SSL/TLS 证书,支持 SNI 绑定和相互 TLS,以实现安全的 APISIX 网关连接

四种途径创建apisix 资源

  • dashbaord (实际也是admin api)

  • 调用admin api

  • kubectl 创建ingress 为apisix的ingress-controller

  • kubectl crd 创建apisix 资源

📘 官方推荐依据

APISIX 官方文档明确区分了两种使用场景:

场景推荐方式理由
Kubernetes 部署(使用 apisix-ingress-controller)✅ CRD(Custom Resource Definition)通过 ApisixRoute、ApisixConsumer、ApisixUpstream 等 CRD,将配置与 K8s 原生对象绑定,方便 GitOps、声明式配置、自动同步。
独立部署(裸机 / VM / Docker / 云实例)✅ Admin API

没有 K8s 控制器时,Admin API 是唯一方式。动态、灵活,但需要显式调用或编写脚本。

🔍 详细对比:CRD vs Admin API

对比项使用 CRD使用 Admin API
部署场景K8s 内任意环境
操作方式声明式(YAML + kubectl apply)命令式(curl / SDK)
变更检测由 apisix-ingress-controller 自动 watch 同步需手动调用 Admin API
自动化能力✅ GitOps / CI/CD 原生支持❌ 需额外封装或脚本
可见性资源状态存储在 etcd + k8s仅 APISIX etcd 内
风险控制权限由 K8s RBAC 管理需保护 Admin API 密钥
灵活性由 CRD schema 限制,稳定但保守可用全量 APISIX 功能(插件、路由、流量控制等)
一致性管理Controller 自动保证自行维护版本与回滚

🔧 混合使用的实际做法(大型团队常用)

大部分生产环境其实采用「CRD + Admin API」混合方案:

  • 90% 配置走 CRD(例如路由、认证、消费者、上游等标准配置);

  • 10% 特殊用途走 Admin API(例如 debug、动态注入插件、灰度流量控制)。

🧭 一句话总结

在 Kubernetes 环境中:官方推荐使用 CRD。

在非 K8s 环境中:使用 Admin API。

参考文献

https://apisix.apache.org/zh/docs/ingress-controlle

https://apisix.apache.org/zh/docs/apisix

https://www.qikqiak.com/k3s/network/apisix/#APISIX-Ingress

http://www.dtcms.com/a/477899.html

相关文章:

  • 【储能学习】电力基础知识
  • 2025 年项目管理转型白皮书:AI 驱动下的能力重构与跨域突破
  • linux网站建设技术指南台州 网站建设
  • AI超级智能体学习笔记
  • 海量域名SSL证书的免费批量签发
  • 基于 PyTorch 的手写数字识别
  • 悟空 AI CRM 中的线索功能:开启销售增长新引擎
  • 网站建设和维护方案吉林省城乡建设厅网站6
  • 互联网视频推拉流平台EasyDSS视频转码有哪些技术特点和应用?
  • 肥城网站建设费用lol做框网站
  • 微信小程序入门学习教程,从入门到精通,电影之家小程序项目知识点详解 (17)
  • CoRL2025口头报告:基于最优传输对齐人类视角和机器人视角的多模态数据,真正解决跨模态数据融合的问题
  • 线程进阶:线程池、单例模式与线程安全深度解析
  • ELK运维之路(Logstash7Kibana接入ES集群-7.17.24)
  • # Pandas 与 Spark 数据操作完整教程
  • 大数据实战项目-基于K-Means算法与Spark的豆瓣读书数据分析与可视化系统-基于python的豆瓣读书数据分析与可视化大屏
  • AI 数字人小程序功能全拆解:从用户体验到商业落地的产品设计逻辑
  • Agent 开发设计模式(Agentic Design Patterns )第 6 章:规划设计模式 Planning
  • 厦门做网站xm37如何增加网站内链建设
  • css变量的使用。
  • 全网首发 OpenAI Apps SDK 使用教程
  • mysql_page pagesize 如何实现游标分页?
  • Hive 拉链表
  • 集宁网站建设SEO优化安卓开发基础教程
  • C++友元函数和友元类!
  • Java面向对象编程深度解析:从对象思维到系统架构的艺术
  • 多制式基站综合测试线的架构与验证实践(4)
  • 洛阳制作网站ihanshi汉口网站建设制作
  • 2025年 Varjo XR-4 升级新品发布!首款专为陆、海、空领域战备训练打造的XR头显
  • 【XR硬件系列】AR眼镜的终极形态会是“普通眼镜”吗?技术瓶颈还有哪些?