avatar

Ryan's Blog

The first step is always the hardest.

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于
  • 工具
Home APISIX 入门指南:核心概念、Docker 部署与基础路由配置
文章

APISIX 入门指南:核心概念、Docker 部署与基础路由配置

Posted 2022-04-27 Updated 12 days ago
By Ryan Chen
21~27 min read

Apache APISIX 是一个云原生、高性能、可扩展的 API 网关,常用于统一入口、动态路由、负载均衡、认证鉴权、限流熔断、日志采集、可观测性和灰度发布等场景。

这篇文章作为 APISIX 系列的入门篇,重点说明 APISIX 的核心概念、etcd 依赖、Docker 快速部署方式、Admin API 基础操作,以及 Route、Service、Upstream、Plugin 之间的关系。后续可以继续阅读:

  • APISIX Dashboard 使用指南:路由、服务、上游与插件配置实践
  • APISIX Mocking 插件实践:接口 Mock、临时降级与兜底响应
  • APISIX kafka-logger 日志采集实践:写入 Kafka 并接入 Elasticsearch / Kibana
  • APISIX proxy-mirror 流量镜像实践:灰度验证、监控分析与注意事项

APISIX 适合解决什么问题

在微服务系统中,如果每个服务都直接暴露给调用方,会带来很多问题:

  • 调用方需要感知大量服务地址。
  • 认证、限流、日志、安全策略分散在各个服务中。
  • 服务升级和灰度发布缺少统一控制入口。
  • 流量治理、观测和故障兜底难以标准化。

APISIX 可以作为统一流量入口,将这些通用能力沉淀在网关层:

能力 说明
动态路由 无需重启即可新增、修改、删除路由
负载均衡 将请求转发到多个上游节点
插件机制 通过插件实现认证、限流、日志、熔断、镜像等能力
服务治理 支持服务发现、灰度发布、请求改写、流量复制
可观测性 支持 Prometheus、日志插件、Tracing 等集成
云原生 可与 Kubernetes、Ingress、Service Mesh 等体系结合

核心架构

APISIX 可以简单理解为三部分:

Client
  │
  ▼
APISIX Gateway
  │
  ├── Route / Service / Upstream / Plugin
  │
  ├── Admin API
  │
  └── etcd
  │
  ▼
Backend Service

核心组件说明:

  • APISIX Gateway:实际处理客户端请求的网关节点。
  • etcd:保存路由、服务、上游、插件等配置数据。
  • Admin API:用于动态管理 APISIX 配置。
  • Route:定义请求匹配规则,例如 URI、Host、Method。
  • Upstream:定义后端服务节点和负载均衡策略。
  • Service:抽象一组可复用的服务配置。
  • Plugin:在请求或响应生命周期中执行扩展逻辑。

APISIX 的重要特点是配置动态生效,很多场景不需要重启网关。

Route、Service、Upstream 的关系

初学 APISIX 最容易混淆 Route、Service 和 Upstream,可以这样理解:

对象 作用 示例
Route 决定什么请求进来 /api/users/*
Upstream 决定请求转发到哪里 10.0.0.1:8080、10.0.0.2:8080
Service 复用公共配置 某个业务服务的插件、上游和治理策略
Plugin 对请求进行扩展处理 限流、认证、日志、Mock、镜像

一种常见关系是:

Route -> Service -> Upstream -> Backend Nodes

也可以在 Route 上直接绑定 Upstream 和 Plugin,适合简单验证;生产环境建议尽量使用 Service 抽象公共配置。

快速部署方式

APISIX 支持多种部署方式:

  • Docker / Docker Compose
  • Kubernetes / Helm
  • RPM / DEB 包
  • 源码构建

入门验证建议优先使用 Docker 或 Docker Compose。生产环境需要重点关注:

  • etcd 高可用部署。
  • Admin API 访问控制。
  • 网关节点无状态扩缩容。
  • 日志、监控、告警和配置备份。

如果你还没有安装 Docker,可以参考:Docker Engine 与 Docker Compose V2 安装配置指南。

etcd 依赖说明

APISIX 使用 etcd 存储动态配置。etcd 在生产环境中非常关键,建议:

  • 使用 3 节点或 5 节点 etcd 集群。
  • 开启鉴权或内网访问控制。
  • 定期备份 etcd 数据。
  • 监控 etcd 延迟、磁盘、Leader 变更和健康状态。
  • 不要把 etcd 直接暴露到公网。

本地测试可以使用单节点 etcd,生产环境不建议单节点。

Docker 快速启动示例

以下示例用于学习和本地验证,生产部署请结合官方文档和实际网络规划调整。

创建 Docker 网络:

docker network create apisix-net

启动 etcd:

docker run -d \
  --name apisix-etcd \
  --network apisix-net \
  -e ALLOW_NONE_AUTHENTICATION=yes \
  -e ETCD_ADVERTISE_CLIENT_URLS=http://apisix-etcd:2379 \
  bitnami/etcd:3.5

启动 APISIX:

docker run -d \
  --name apisix \
  --network apisix-net \
  -p 9080:9080 \
  -p 9180:9180 \
  apache/apisix:latest

说明:实际镜像版本建议固定为明确版本号,不建议生产环境直接使用 latest。

常见端口:

端口 作用
9080 HTTP 网关入口
9443 HTTPS 网关入口
9180 Admin API
9091 / 9092 控制 API / Prometheus 等内部能力,具体以配置为准

使用 Admin API 创建基础路由

下面通过 Admin API 创建一个最小路由。实际环境中 Admin API Key 请妥善保管,不要暴露在公网。

创建路由:

curl -i "http://127.0.0.1:9180/apisix/admin/routes/1" \
  -H "X-API-KEY: your-admin-key" \
  -X PUT \
  -d '{
    "uri": "/get",
    "upstream": {
      "type": "roundrobin",
      "nodes": {
        "httpbin.org:80": 1
      }
    }
  }'

访问验证:

curl -i "http://127.0.0.1:9080/get"

如果返回来自上游服务的响应,说明 APISIX 路由已经生效。

使用 Upstream 管理后端节点

当多个 Route 复用相同后端节点时,可以单独创建 Upstream:

curl -i "http://127.0.0.1:9180/apisix/admin/upstreams/1" \
  -H "X-API-KEY: your-admin-key" \
  -X PUT \
  -d '{
    "type": "roundrobin",
    "nodes": {
      "10.0.0.11:8080": 1,
      "10.0.0.12:8080": 1
    }
  }'

Route 引用 Upstream:

curl -i "http://127.0.0.1:9180/apisix/admin/routes/2" \
  -H "X-API-KEY: your-admin-key" \
  -X PUT \
  -d '{
    "uri": "/api/*",
    "upstream_id": "1"
  }'

这样后续只需要维护 Upstream,就可以影响所有引用它的路由。

插件机制入门

APISIX 的插件可以绑定在不同层级:

  • Global Rule:全局生效。
  • Route:对某个路由生效。
  • Service:对某个服务生效。
  • Consumer:对某个消费者生效。

例如给路由增加限流插件:

{
  "uri": "/api/*",
  "plugins": {
    "limit-count": {
      "count": 100,
      "time_window": 60,
      "rejected_code": 429
    }
  },
  "upstream_id": "1"
}

插件是 APISIX 的核心扩展点。Mock、日志写入 Kafka、流量镜像等能力本质上都是通过插件实现。

生产环境注意事项

Admin API 安全

Admin API 能修改网关配置,必须重点保护:

  • 不要暴露到公网。
  • 使用内网、防火墙、ACL 控制访问来源。
  • 修改默认 Admin Key。
  • 配置变更纳入审计和发布流程。

etcd 高可用

APISIX 配置依赖 etcd,生产环境建议:

  • etcd 使用奇数节点集群。
  • 配置独立磁盘和监控。
  • 定期快照备份。
  • 避免业务流量与 etcd 流量互相影响。

配置管理

不要只依赖手工 Dashboard 操作。更推荐:

  • 使用 Admin API 自动化管理。
  • 使用 APISIX Ingress Controller 管理 Kubernetes 入口。
  • 使用 APISIX Declarative CLI / 配置文件方式做版本化管理。
  • 对重要变更做灰度和回滚预案。

常见问题

1. 路由创建成功但访问 404

检查:

  • 访问端口是否为网关入口端口,例如 9080。
  • Route 的 uri 是否匹配。
  • Host、Method 等条件是否限制了请求。
  • 配置是否写入正确 APISIX 实例连接的 etcd。

2. Admin API 返回 401

检查:

  • X-API-KEY 是否正确。
  • Admin API Key 是否已修改。
  • 请求是否经过代理导致请求头丢失。

3. 上游服务 502 / 504

检查:

  • APISIX 容器是否能访问上游地址。
  • 上游服务端口是否正确。
  • DNS 解析是否正常。
  • 上游服务响应是否超时。

总结

APISIX 入门时建议按这条主线理解:

  1. etcd 保存动态配置。
  2. Admin API / Dashboard / Ingress Controller 负责管理配置。
  3. Route 匹配请求。
  4. Upstream 定义后端节点。
  5. Service 复用公共治理配置。
  6. Plugin 实现认证、限流、日志、Mock、镜像等扩展能力。

掌握这些概念后,再去配置 Dashboard、Mocking、kafka-logger、proxy-mirror 等插件会更容易。

参考资料

  • Apache APISIX 官方文档
  • Apache APISIX Getting Started
  • Apache APISIX Admin API
  • Apache APISIX Plugins
指南
APISIX API网关 服务治理 etcd Docker 入门指南
License:  CC BY 4.0
Share

Further Reading

Jun 27, 2026

Agent 架构设计原则:Router、Runtime 与 Business Script 的职责划分

本文整理一套适合 Router Agent + Skill + Runtime 架构的设计原则:Agent 只负责业务决策,Runtime 统一负责执行、恢复、Trace、Checkpoint 和 Evidence,Business Script 只做确定性业务执行。

Sep 9, 2024

Redis 核心概念、数据结构与高可用架构详解

系统梳理 Redis 的核心数据类型、底层结构、过期与淘汰、持久化、事务、主从复制、Sentinel、Cluster、缓存一致性和分布式锁等机制,适合作为 Redis 学习、面试复习和高可用架构设计参考。

Sep 5, 2024

B+树原理与 MySQL InnoDB 索引机制解析

本文从 B+ 树的多叉平衡结构、叶子节点链表、范围查询和磁盘 I/O 特性出发,解释数据库索引为什么常采用 B+ 树,并结合 MySQL InnoDB 的聚簇索引、二级索引、回表、覆盖索引和联合索引机制理解其实际应用。

OLDER

APISIX proxy-mirror 流量镜像实践:灰度验证、监控分析与注意事项

NEWER

SonarQube LTA 升级与数据库迁移指南:从旧版本到 8.9/9.9/2025 LTA

Recently Updated

  • Agent 架构设计原则:Router、Runtime 与 Business Script 的职责划分
  • RocketMQ 架构设计与应用最佳实践:高可用消息队列核心解析
  • Redis 核心概念、数据结构与高可用架构详解
  • B+树原理与 MySQL InnoDB 索引机制解析
  • MySQL AUTO_INCREMENT 插入 0 变成自增值的原因与解决方案

Trending Tags

RocketMQ Windows Feign Docker Zipkin SonarQube OkHttp HttpClient API 性能优化

Contents

©2026 Ryan's Blog. Some rights reserved. · 粤ICP备2022031588号