首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >什么是 API 网关?5 分钟看懂 APISIX 核心概念!

什么是 API 网关?5 分钟看懂 APISIX 核心概念!

作者头像
希里安
发布2025-11-17 19:06:55
发布2025-11-17 19:06:55
3030
举报
文章被收录于专栏:希里安希里安

希里安近日见闻

各位读者好呀,一转眼又是一个月过去了,有一段时间没更新文章,结婚的事也终于忙完了,结婚后又算是人生新起点啦,要一如既往努力面对生活!

2025年11月9日英雄联盟S15全球总决赛KT和T1的决赛BO5,双方打满5局之后,T1以3-2的战绩击败KT,拿下世界冠军!Faker完成6冠王的成就!

得知以上的结果,感慨行行出状元,像Faker这样的传奇人物,他的经历鼓励着所有知道他的人们!我知道的Faker他不单是一个有游戏天赋的人,同样也是一个勤奋、谦虚、敬业的人,他对自己所从事职业的热爱与专注感动着别人!这就是他为什么全世界范围内有那么多粉丝,也或许是Faker人格魅力的来源。

APISIX

Apache APISIX是一个动态、实时、高性能的云原生API网关,基于OpenResty(Nginx + LuaJIT)构建。它提供了丰富的流量管理功能,包括负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等。

最近有用到Apisix,正好也很久没更新文章了,想着边用边学,所以来介绍下Apisix,大家对于Apisix了解多少?

先看看有哪些核心特性?

  • • 基于OpenResty,单核QPS可达18000+ (单个 CPU 核心上,APISIX 每秒能处理超过 18,000 个请求,同时平均延迟仅为 0.2 毫秒) [1]
  • • 支持热更新,无需重启(非standalone模式)
  • • 可通过Admin API进行配置管理
  • • 支持多种配置存储后端(etcd、Consul等)
  • • 80+ 官方插件
  • • 支持多语言插件开发(Lua、Go、Python、Java、Node.js等)
  • • 插件热插拔,无需重启服务
  • • 原生支持Kubernetes
  • • 支持服务发现(Kubernetes、Consul、Nacos等)
  • • 完整的可观测性支持

选择APISIX的情况:

  • • 需要高性能API网关
  • • 复杂的路由和流量管理需求
  • • 需要丰富的插件功能
  • • 动态配置管理需求
  • • 多协议支持需求

软件架构

Apache APISIX 是一个动态、实时、高性能的云原生 API 网关。它构建于 NGINX + ngx_lua 的技术基础之上,充分利用了 LuaJIT 所提供的强大性能。

为什么 Apache APISIX 选择 NGINX+Lua 技术栈?感兴趣的读者可以看下这篇文章https://apisix.apache.org/zh/docs/apisix/next/architecture-design/apisix/

软件架构
软件架构

软件架构

为什么 Apache APISIX 选择 NGINX+Lua 技术栈?[2]

面向人工智能代理和LLM的AI网关
面向人工智能代理和LLM的AI网关

面向人工智能代理和LLM的AI网关

与Ingress Controller相比

特性

Apache APISIX

Ingress NGINX

架构

基于OpenResty的动态网关

基于NGINX的静态配置网关

配置方式

动态API配置,热更新

静态配置文件,需重载

性能

单核QPS 18000+

单核QPS 15000+

协议支持

HTTP/HTTPS, HTTP/2, gRPC, WebSocket, TCP/UDP, MQTT

HTTP/HTTPS, HTTP/2, gRPC, WebSocket

插件系统

80+ 官方插件,支持多语言开发

有限的内置模块,主要通过注解配置

学习曲线

中等,需要了解插件概念

较低,基于熟悉的NGINX

与传统 Ingress Controller(如 nginx-ingress、traefik)比,APISIX 更侧重 动态路由、插件化、实时配置(etcd)和丰富的网关能力(流量治理、灰度、认证、限流、transform、gRPC、WebSocket 等)。

  • 传统 Ingress Controller (nginx/traefik/etc):主要实现 k8s Ingress 资源的解析与路由,职责较集中(反向代理、简单 auth、负载均衡)。配置方式通常基于 Ingress/Annotations。
  • APISIX:功能完整的 API 网关,支持 Admin API、etcd 后端、丰富插件、动态路由、服务发现、灰度、流量分发、gRPC、WebSocket、RPC 转换等。既能做 Ingress,也能作为独立网关使用。

使用APISIX

安装

了解以上背景之后,开始使用Apisix,安装apisix的方式有很多,有以下方式

  • • Docker
  • • Helm
  • • RPM
  • • DEB
  • • 源码
环境要求
  • • Kubernetes 1.19+
  • • Helm 3.0+
  • • kubectl已配置并能访问集群
安装前注意
  • • 注意部署模式,如果选择standalone模式,就不用安装etcd数据库
  • • 如果使用本地配置yaml文件配置,记得关闭etcd功能,修改部署模式

我这里主要介绍Helm方式,这个比较方便一点(其他方式大家都可以尝试)

1.使用Helm 安装 Apache APISIX
代码语言:javascript
复制
helm repo add apisix https://charts.apiseven.com
helm repo update
helm upgrade --install apisix apisix/apisix \
  --namespace apisix --create-namespace \
  -f values.yaml

也可以一行命令快速启动

代码语言:javascript
复制
helm repo add apisix https://add apisix https://charts.apiseven.com && helm repo update && helm upgrade --install apisix apisix/apisix --create-namespace  --namespace apisix 

安装成功后,APISIX 网关、Dashboard、etcd(如果启用)等组件都已经在集群里运行。

2.确认组件运行情况
代码语言:javascript
复制
kubectl get pods -n apisix
3.访问 APISIX 网关(数据面)

如果在集群外访问,查看服务地址

代码语言:javascript
复制
kubectl get svc apisix-gateway -n apisix

会看到类似:

代码语言:javascript
复制
PORT(S): 80:31522/TCP, 443:30768/TCP

这样就可以通过 http://<NodeIP>:31522 访问 APISIX 网关了。

4.访问 APISIX Dashboard(控制面 UI)

Helm 安装时默认启用内嵌 Dashboard,如需修改,需要编辑value.yaml文件

代码语言:javascript
复制
deployment:
  admin:
    # 启用内嵌 APISIX Dashboard
    enable_admin_ui: true

可以查看服务:

代码语言:javascript
复制
kubectl get svc -n apisix

修改为 NodePort 以便外部访问:

代码语言:javascript
复制
kubectl edit svc apisix-dashboard -n apisix

查看端口:

代码语言:javascript
复制
kubectl get svc apisix-dashboard -n apisix

比如:

代码语言:javascript
复制
80:30919/TCP

那你就可以访问:

代码语言:javascript
复制
http://<任意NodeIP>:30919

Apache APISIX 支持设置 Admin API 的 IP 访问白名单,防止 Apache APISIX 被非法访问和攻击

代码语言:javascript
复制
deployment:
    admin:
        # http://nginx.org/en/docs/http/ngx_http_access_module.html#allow
        allow_admin:
            - 127.0.0.0/24
5.Dashboard 中的使用流程
  1. 1. 登录 Dashboard
  2. 2. 在「Upstream」中新建上游服务,比如:
    • • 名称:example-upstream
    • • 地址:http://httpbin.org 或你自己的服务
  3. 3. 在「Route」中新建路由:
    • • 路径:/get
    • • 关联上游:example-upstream
    • • 启用状态:✅
  4. 4. 点击保存

然后访问:

代码语言:javascript
复制
http://<NodeIP>:31522/get

能看到返回的上游内容(比如 httpbin 的 JSON)

6.Admin Api的使用方式

简单路由示例

代码语言:javascript
复制
# 创建一个简单的路由
curl http://localhost:9180/apisix/admin/routes/1 \
  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
  -X PUT -d '
{
  "uri": "/hello",
  "methods": ["GET"],
  "upstream": {
    "type": "roundrobin",
    "nodes": {
      "httpbin.org:80": 1
    }
  }
}'

测试路由

代码语言:javascript
复制
# 获取APISIX网关地址
kubectl get svc -n apisix apisix-gateway

# 测试路由(假设使用NodePort 30080)
curl http://<node-ip>:30080/hello

部署模式

Apache APISIX 支持多种部署模式,每种模式适用于不同的场景和需求[3]

  • • 传统模式
  • • 独立模式
  • • 数据平面模式
传统模式

传统模式是 APISIX 最基础的部署方式,包含以下组件:APISIX Gateway、etcd、APISIX Dashboard 优点:

  • • 架构简单,易于理解和部署
  • • 配置实时生效,无需重启
  • • 支持动态配置更新
  • • 完整的功能支持

缺点:

  • • 依赖 etcd,增加了运维复杂度
  • • 单点故障风险(etcd)
  • • 网络延迟可能影响配置读取

适用场景

  • • 中小型企业的 API 网关需求
  • • 需要动态配置管理的场景
  • • 对功能完整性要求较高的环境
  • • 有专业运维团队维护 etcd
独立模式

独立模式不依赖 etcd,配置通过本地文件管理 优点

  • • 无外部依赖,部署简单
  • • 启动速度快
  • • 适合容器化部署
  • • 配置文件版本控制友好

缺点

  • • 配置更新需要重启
  • • 不支持动态配置
  • • 功能相对受限
  • • 多实例配置同步困难

适用场景

  • • 容器化微服务架构
  • • 简单的 API 路由需求
  • • 不需要频繁配置变更的场景
  • • 资源受限的环境
数据面模式

数据平面模式将控制平面和数据平面分离 优点

  • • 控制平面和数据平面解耦
  • • 数据平面可独立扩展
  • • 提高系统可用性
  • • 支持多区域部署

缺点

  • • 架构复杂度增加
  • • 需要额外的控制平面管理
  • • 网络通信开销

适用场景

  • • 大规模分布式部署
  • • 多区域、多云环境
  • • 高可用性要求
  • • 需要集中管理配置的场景

核心概念

1. Route(路由)

路由是APISIX中最基本的概念,定义了请求如何匹配和转发

代码语言:javascript
复制
{
  "uri": "/api/v1/*",
  "methods": ["GET", "POST"],
  "upstream": {
    "type": "roundrobin",
    "nodes": {
      "backend1.example.com:80": 1,
      "backend2.example.com:80": 1
    }
  }
}
2. Service(服务)

服务是路由的抽象,可以被多个路由引用,便于管理相同的上游服务

代码语言:javascript
复制
{
  "upstream": {
    "type": "roundrobin",
    "nodes": {
      "backend.example.com:80": 1
    }
  },
  "plugins": {
    "limit-req": {
      "rate": 5,
      "burst": 10
    }
  }
}
3. Upstream(上游)

上游定义了后端服务的负载均衡配置和健康检查

代码语言:javascript
复制
{
  "type": "roundrobin",
  "nodes": {
    "backend1.example.com:80": 1,
    "backend2.example.com:80": 2
  },
  "checks": {
    "active": {
      "http_path": "/health",
      "healthy": {
        "interval": 2,
        "successes": 1
      }
    }
  }
}
4. Consumer(消费者)

消费者是API的调用方,用于身份认证和授权。

代码语言:javascript
复制
{
  "username": "user123",
  "plugins": {
    "key-auth": {
      "key": "auth-key-123"
    },
    "limit-req": {
      "rate": 10,
      "burst": 20
    }
  }
}
5. Plugin(插件)

插件提供了各种功能扩展,可以在不同级别应用:

  • Global级别: 对所有请求生效
  • Route级别: 对特定路由生效
  • Service级别: 对特定服务生效
  • Consumer级别: 对特定消费者生效
6. Plugin Config(插件配置)

插件配置允许复用插件配置,减少重复配置。

代码语言:javascript
复制
{
  "plugins": {
    "limit-req": {
      "rate": 5,
      "burst": 10
    },
    "prometheus": {
      "prefer_name": true
    }
  }
}

核心角色

数据平面 (Data Plane)
  • • 处理客户端请求
  • • 执行路由匹配
  • • 应用插件逻辑
  • • 转发请求到后端服务
  • • 返回响应给客户端
控制平面 (Control Plane)
  • • 配置管理和分发
  • • 服务发现
  • • 健康检查
  • • 插件管理
  • • 监控数据收集
etcd 集群 (存储层组件)
  • • 分布式配置存储
  • • 服务发现注册中心
  • • 配置变更通知

常见组件端口说明

组件

默认端口

用途

APISIX Gateway

80 / 443 / 9080

外部访问入口

Admin API

9180

管理接口(Dashboard 通过它操作)

Dashboard

80

Web UI

etcd

2379

配置存储

常用插件分类

认证插件:

  • key-auth: API Key 认证
  • jwt-auth: JWT 令牌认证
  • oauth: OAuth2 认证
  • ldap-auth: LDAP 认证

安全插件:

  • cors: 跨域资源共享
  • ip-restriction: IP 访问控制
  • ua-restriction: User-Agent 限制
  • referer-restriction: Referer 限制

流量控制插件:

  • limit-req: 请求限流
  • limit-conn: 连接限流
  • limit-count: 计数限流

可观测性插件:

  • prometheus: 指标收集
  • zipkin: 链路追踪
  • skywalking: APM 集成
  • file-logger: 文件日志

安全建议

  • • 禁止直接暴露 apisix-admin 服务给公网
  • • 如果必须外部访问,建议通过 ingress + basic auth
  • • 可以开启 TLS,为 Dashboard 设置 ingress 域名

最后

以上先介绍这些,当然最终的选择取决于你的工作环境、团队协作需求以及个人偏好。

安装使用只是第一步,通过工具的学习使用,让他人受益才能发挥工具的价值!

引用链接

[1] : https://apisix.apache.org/zh/docs/apisix/benchmark/ [2] 为什么 Apache APISIX 选择 NGINX+Lua 技术栈?: https://apisix.apache.org/zh/docs/apisix/next/architecture-design/apisix/ [3] : https://apisix.apache.org/docs/apisix/deployment-modes/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 希里安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 希里安近日见闻
  • APISIX
    • 软件架构
    • 与Ingress Controller相比
  • 使用APISIX
    • 安装
    • 部署模式
    • 核心概念
    • 核心角色
    • 常见组件端口说明
    • 常用插件分类
    • 安全建议
    • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档