APISIX Admin API 实战:从第一次接入到生产发布,五步玩转 API 网关
【免费下载链接】apisixThe Cloud-Native API Gateway项目地址: https://gitcode.com/GitHub_Trending/ap/apisix
如果你正在配置 Apache APISIX 这款云原生 API 网关,所有动态配置最终都走 Admin API 这一个入口。这篇文章从一个 curl 命令讲起,带你完成首次接入、发布一条真实路由、组合服务治理、再到日常运维排障,适合第一次上手的运维与后端工程师。
Admin API 不处理业务流量:先弄清它管什么
很多人第一反应是"Admin API 就是网关本身",其实不是。APISIX 把职责分成了两半:业务请求走数据面(默认 9080 端口),而 Admin API 默认只监听 9180 端口,专门接收建路由、改证书、调插件这类"配置型"操作,请求统一带/apisix/admin前缀。
你通过 Admin API 提交的配置会被写进 etcd(分布式键值存储),再由数据面 worker 读取生效。也就是说,动 Admin API 就是动整个网关的"大脑"——这也是为什么它的安全边界必须比业务端口锁得更死。
如何第一次接入 APISIX Admin API:先配密钥和白名单
一个 GET 请求验证密钥
部署完成后,最快的验证方式是带上 admin key 发一个读请求:
curl -s http://127.0.0.1:9180/apisix/admin/routes \ -H "X-API-KEY: 9f2c81ab7d4e63f0c5b8a91d2e7f4063"X-API-KEY是 Admin API 唯一的身份凭证。返回 JSON 数组说明链路通了,后续所有操作都只是在换路径和 HTTP 方法。
config.yaml 里要锁死的三件事
deployment: admin: admin_key_required: true admin_key: - name: ops-primary key: 9f2c81ab7d4e63f0c5b8a91d2e7f4063 role: admin allow_admin: - 127.0.0.1 admin_listen: ip: 127.0.0.1 port: 9180⚠️ 三个配置各有讲究:admin_listen锁在 127.0.0.1,意味着即使密钥外泄,9180 端口从外部网络根本不可达,这是第一道防线;allow_admin只放管理机 IP,是必须跨机管理时的第二道防线;admin_key是能改遍网关一切的主凭证,泄露等于交出 root 密码,务必保密并定期轮换。
如何配置 APISIX 路由:路由、上游、插件一次搞定
业务需求:把shop.example.com域下/orders/*的请求转发到两台订单服务实例,同时挂上按客户端 IP 的限流。实际运维中这三者八成是同时创建的,不如一次 PUT 解决。
一条 PUT 同时创建 route + upstream + plugins
{ "uri": "/orders/*", "hosts": ["shop.example.com"], "methods": ["GET", "POST"], "upstream": { "type": "roundrobin", "nodes": { "10.20.0.11:7001": 2, "10.20.0.12:7001": 1 }, "retries": 2, "timeout": { "connect": 3, "read": 8 } }, "plugins": { "limit-count": { "count": 200, "time_window": 30, "key_type": "var", "key": "remote_addr" } } }curl -s http://127.0.0.1:9180/apisix/admin/routes/orders-route \ -H "X-API-KEY: $ADMIN_KEY" -X PUT \ -H "Content-Type: application/json" \ -d @route.json几个值得注意的选择:uri用通配前缀匹配,适合一族接口;nodes里 2:1 的权重故意倾斜,把更多流量给规格更高的机器;limit-count直接挂在路由上,含义是"每个客户端 IP 30 秒内最多 200 次",这是 APISIX 限流插件配置里最常见的用法。
匹配维度怎么选:从 uri 到 vars
| 维度 | 字段 | 适用场景 | 提醒 |
|---|---|---|---|
| 路径 | uri / uris | 按接口前缀分流 | 别写/*,会吞掉所有请求 |
| 域名 | host / hosts | 一套网关挂多个站点 | 支持泛域名 |
| 方法 | methods | 只放行读接口 | 需与 uri 组合使用 |
| 来源 IP | remote_addrs | 内网白名单 | 用 CIDR 写法 |
| 自定义变量 | vars | 按请求头、参数分流 | 三元组数组 |
更精细的场景用vars搭配filter_func:前者按"某个 Nginx 变量等于某值"分流,后者允许写一段内联 Lua 函数做判断(比如按用户 ID 奇偶分流)。普通路由基本用不到,遇到疑难分流再考虑。
用 Service 和 Consumer 复用配置
多条路由共享同一组插件与上游时,先把公共配置 PUT 成 Service 对象,路由再引用它,路由自身的插件会与 Service 的合并。同理,Consumer 代表一个调用方,可以自带鉴权插件:
{ "username": "mobile-app", "desc": "商城 App 客户端", "plugins": { "key-auth": { "key": "sk-mobi-33907" } } }key-auth表示调用方必须在请求里携带这个密钥,与路由上的鉴权插件配合后,"谁能来、能来多快"一次配齐。⚠️ 鉴权密钥、JWT secret 都是凭证,别写进会提交进代码仓库的脚本,进了 git 就等于公开。
APISIX 负载均衡与健康检查:服务治理的组合拳
负载均衡算法先选对
upstream 的type字段决定流量怎么分发:
roundrobin:轮询,默认选择,简单公平。least_conn:最少连接,单请求处理时长差异大时更稳。chash:一致性哈希,按请求特征黏滞在固定节点,适合缓存敏感场景。ewma:按历史响应时间的指数加权移动平均挑最快的节点,能自动避开慢节点。
不确定就从 roundrobin 起步,观察到长尾延迟再换,不必提前"选最优"。
给 upstream 配主动健康检查
健康检查是负载均衡的哨兵,写在checks里:
"checks": { "active": { "type": "http", "http_path": "/healthz", "timeout": 3, "healthy": { "interval": 5, "successes": 2 }, "unhealthy": { "interval": 5, "http_failures": 3 } } }意思是:周期性请求/healthz,连续成功 2 次才认定健康,失败 3 次立即摘出。间隔别设太短,健康检查自己就成了流量源。
鉴权、限流、健康检查三层防线
治理的正确姿势是分三层:鉴权决定谁进得来(consumer 与路由上的 key-auth / jwt-auth),限流决定能多快(limit-count / limit-req),健康检查决定流量往哪送(checks)。三者全部经 Admin API 配置、即时生效,无需重启网关。
⚠️ JWT 场景下,验签的 secret 是网关的命门:谁拿到它就能伪造任意用户的合法令牌。要放在受控的密钥管理渠道、定期轮换,绝不能明文留在脚本里。
APISIX 日常运维:分页查询、错误码与风险操作
分页和过滤查询省掉手工活
路由上百条时,Admin API 支持直接在 URL 上分页和按条件过滤:
curl -s "http://127.0.0.1:9180/apisix/admin/routes?page=2&page_size=20" \ -H "X-API-KEY: $ADMIN_KEY" curl -s "http://127.0.0.1:9180/apisix/admin/routes?name=orders&label=team:shop" \ -H "X-API-KEY: $ADMIN_KEY"响应体带total和list两个字段,脚本循环很方便;用name、label过滤可以从混部环境里精准捞出一条业务线的路由,不用全量翻。
最常见的 4 个错误码怎么应对
| 状态码 | 含义 | 你的第一动作 |
|---|---|---|
| 401 | 认证失败 | 核对 X-API-KEY 的值与 role |
| 404 | 资源不存在 | 检查路径里的资源 ID |
| 400 | 配置校验失败 | 读响应里的 error_msg |
| 409 | 资源冲突 | 该 ID 已存在,换 ID 或改用 PUT |
错误响应一般是{"error_msg": "...", "req_body": {...}}结构,error_msg会直接指出是哪个字段不合法,扫一眼基本能定位。
批量创建与"强制删除"的坑
批量迁移时,向/apisix/admin/routesPOST 一个 JSON 数组,就能一次性创建多条路由——请求体就是前面路由对象的数组。但反向操作要格外小心:
# 强制删除,跳过引用检查 curl -X DELETE "http://127.0.0.1:9180/apisix/admin/upstreams/118?force=true" \ -H "X-API-KEY: $ADMIN_KEY"⚠️?force=true会跳过引用检查——即使还有路由引用这个 upstream 也会被删掉,引用它的路由立刻变成无后端的"死路由"。只在确认无引用或应急止血时使用。
大规模变更前,还可以先用POST /apisix/admin/schema/validate/routes干跑一次 schema 校验,配置合不合法当场给结论,比生产上直接吃 400 体面得多。
下一步
- ✅ 把 Admin API 封装成 CI 步骤或小 CLI,让每次配置变更可版本化、可回滚、可 review,而不是散落在终端历史里。
- 接上监控闭环:给专属路由挂 prometheus 插件,让 Prometheus 定时拉取指标,网关健康度就能进你的告警体系。
- 延伸阅读:配置具体插件时,先查该插件的 schema 定义再动手,比背参数可靠得多。
【免费下载链接】apisixThe Cloud-Native API Gateway项目地址: https://gitcode.com/GitHub_Trending/ap/apisix
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考