30分钟跑通 Apache APISIX Admin API从第一条路由到自动化部署【免费下载链接】apisixThe Cloud-Native API Gateway项目地址: https://gitcode.com/GitHub_Trending/ap/apisixApache APISIX 是云原生 API 网关Admin API 是管理路由、上游、插件与调用方认证的统一入口。本文按六个实战任务带你从零到一请求跑通、流量分派、后端加固、调用方上锁、日常运维到自动化部署读完即可独立接手网关配置工作。Apache APISIX 的架构分成两半数据面转发流量控制面负责存储和下发配置而 Admin API 就是你敲进去的那把钥匙——你通过它写 etcd数据面自动感知变化并生效全程不用重启网关。概念速览五种资源各管什么第一次接触 Admin API最容易懵的是分不清 Route、Service、Upstream 这些名词。先看这张对照表后面所有任务都围着它们转资源管什么什么时候用它Admin API 路径Route请求怎么匹配进来uri、host、方法、来源 IP每新增一条转发规则/routesUpstream后端节点集合 负载均衡 健康检查路由要把流量发给谁/upstreamsService一组路由共享的公共层共用上游、共用插件多条路由指向同一后端、插件重复配置/servicesConsumer调用方身份及其认证配置需要给调用方发钥匙时/consumersPlugin单个行为开关限流、认证、日志、改写不改代码改变请求行为/plugins/list它们串起来的链路长这样理解到这一步就够了Route 负责认请求Upstream 负责派活儿Service 负责抽公共Consumer 负责发钥匙Plugin 负责在中间插手段。任务一 · 让第一个请求跑通最小可用的认证配置Admin API 默认监听9180端口路径前缀/apisix/admin认证靠请求头X-API-KEY。编辑你的配置文件示例见 conf/config.yaml.example只需关心这一段deployment: admin: admin_key_required: true admin_key: - name: admin key: edd1c9f034335f136f87ad84b625c8f1 # 换成你自己的随机串 role: admin # admin 可读写viewer 只读 allow_admin: - 127.0.0.0/24role决定这个 key 的权限等级只读场景发 viewer key 就够了allow_admin是 IP 白名单生产环境别省。改完重启网关再验证一次curl http://127.0.0.1:9180/apisix/admin/plugins/list -H X-API-KEY: $ADMIN_KEY返回一长串 JSON 数组说明认证链路通了返回 401 则先查 key 和 IP 白名单。创建第一条路由先定义一个上游再把路由指过去。PUT 带 ID 的写法等价于创建或覆盖后面所有资源都照这个姿势来# 上游两个节点默认轮询 curl http://127.0.0.1:9180/apisix/admin/upstreams/backend \ -H X-API-KEY: $ADMIN_KEY -X PUT -d { type: roundrobin, nodes: { 127.0.0.1:9000: 1, 127.0.0.1:9001: 1 } } # 路由把 /hello 的流量交给 backend curl http://127.0.0.1:9180/apisix/admin/routes/1 \ -H X-API-KEY: $ADMIN_KEY -X PUT -d { uri: /hello, upstream_id: backend }upstream_id复用独立上游是比内联upstream对象更省事的写法——同一个后端被多条路由引用时不会配置漂移。验证方式curl http://127.0.0.1:9080/hello9080 是数据面端口两个节点来回切换说明请求真的穿过去了。任务二 · 把流量分派准五维匹配速查表一条 Route 能同时挂多个匹配维度全部命中才算命中。维度不是越多越好写之前先问自己这个维度以后会变吗匹配维度字段示例写法URIuri/uris/api/*通配符或正则均可域名host/hostsapi.example.com、*.test.com泛域名方法methods[GET, POST]来源 IPremote_addr192.168.1.0/24CIDR任意变量vars[http_x_api_version, , v2]用 vars 做灰度分流vars是最好用的一个它直接对接 Nginx 变量能按 header、参数、任意自定义变量做条件判断。给 v2 版本的调用方单独分流配置长这样{ uri: /api/*, priority: 10, vars: [ [http_x_api_version, , v2], [arg_debug, !, true] ], upstream_id: backend-v2 }两个条件是 AND 关系带X-API-Version: v2头、且没开 debug 参数的请求才会落到 v2 上游。priority数字大的优先多条路由命中时按它排序——灰度规则一般都应该有明确优先级别靠默认值。更复杂的条件可以写filter_func一段内联 Lua 函数能取到vars表里所有变量适合按用户 ID 取模这类逻辑分流官方文档的 docs/zh/latest 里有更完整的字段说明。任务三 · 把后端撑稳先选对负载均衡算法算法选节点逻辑适合场景roundrobin按权重轮转默认选择通用least_conn挑当前连接数最少的长连接、请求耗时参差chash同一 hash key 固定落同一节点会话保持、缓存亲和ewma按响应时间动态加权对延迟敏感五分钟给后端加上健康检查光有算法不够节点挂了得有人把它摘掉。给上游补上主动健康检查、超时和重试一条 PUT 全搞定curl http://127.0.0.1:9180/apisix/admin/upstreams/backend \ -H X-API-KEY: $ADMIN_KEY -X PUT -d { type: roundrobin, nodes: { 127.0.0.1:9000: 30, 127.0.0.1:9001: 70 }, checks: { active: { type: http, http_path: /health, healthy: { interval: 5, successes: 2 }, unhealthy: { interval: 5, http_failures: 3 } } }, retries: 3, timeout: { connect: 3, send: 5, read: 10 } }为什么这么写nodes里的 30/70 是权重不用严格凑 100比例对就行unhealthy连败 3 次摘除、healthy连成功 2 次放回一紧一松防止节点抖动反复横跳timeout三段分别约束建连、写、读缺一段就容易出请求挂死。验证手动停掉 9000 端口的后端观察 access log流量应在一轮检查周期后全部落到 9001。任务四 · 给调用方上锁 先建 Consumer再发钥匙APISIX 里调用方是一等公民先把身份建出来钥匙跟着身份走而不是散落在路由里。给第三方客户端建一个带 key-auth 的 Consumercurl http://127.0.0.1:9180/apisix/admin/consumers/api-client \ -H X-API-KEY: $ADMIN_KEY -X PUT -d { username: api-client, desc: 第三方API客户端, plugins: { key-auth: { key: auth-key-123456 } } }JWT 场景同理把key-auth换成jwt-auth在插件里填secret和algorithm如 HS256即可校验逻辑网关全包了。路由上挂认证与限流光有钥匙没用还得在门口查。往路由的plugins里加两行——注意认证插件在路由侧是空对象真正的校验规则来自 Consumer{ uri: /api/*, upstream_id: backend, plugins: { key-auth: {}, limit-count: { count: 100, time_window: 60, key_type: consumer } } }key_type: consumer是按身份限流比按 IP 限流公平。验证三步走不带 key 请求应得 401带上auth-key: auth-key-123456头返回 200连打 100 次后开始被限流默认 503。到这里认证和限流就都压在网关上了后端一行代码不用改。任务五 · 日常运维动作批量创建与强制删除一次上线多个路由直接把数组 POST 给复数端点即可反过来删被路由引用的上游会报引用中加?forcetrue可以跳过检查强删慎用路由会瞬间变成无上游状态# 批量创建两条路由 curl http://127.0.0.1:9180/apisix/admin/routes \ -H X-API-KEY: $ADMIN_KEY -X POST -d [ { uri: /api/v1/users, upstream: { nodes: { user-service:8080: 1 }, type: roundrobin } }, { uri: /api/v1/products, upstream: { nodes: { product-service:8080: 1 }, type: roundrobin } } ] # 强制删除被引用的上游 curl http://127.0.0.1:9180/apisix/admin/upstreams/1?forcetrue \ -H X-API-KEY: $ADMIN_KEY -X DELETE成功时返回 200/201失败信息直接在error_msg字段里不用猜。先校验再落库改完一大坨 JSON 再提交报错只告诉你验证失败定位很慢。养成习惯提交前先跑一次 schema 校验它是免费的静态检查curl http://127.0.0.1:9180/apisix/admin/schema/validate/routes \ -H X-API-KEY: $ADMIN_KEY -X POST -d { uri: /api/*, upstream: { type: roundrobin, nodes: { backend:8080: 1 } } }通过返回成功状态不通过会指出具体哪个字段不合法——把这条命令包进 CI 或 pre-commit能挡掉大多数低级错误。分页与过滤查询资源多了之后裸 GET 会一次吐回全量。带上page和page_size取值 10~500走分页返回里带总数和当前页数据curl http://127.0.0.1:9180/apisix/admin/routes?page2page_size20 -H X-API-KEY: $ADMIN_KEY另外直接在 URL 上带资源字段就能过滤比如?nametestlabelenv:prod配合label字段做环境隔离非常顺手——建路由时记得顺手打标签。任务六 · 自动化与观测 把部署脚本收敛成三行手工 curl 只能活过第一天。把读文件 → PUT → 检查返回码封装成一个函数批量部署就是循环调用deploy_route() { local id$1 file$2 code$(curl -s -o /dev/null -w %{http_code} -H X-API-KEY: $ADMIN_KEY \ -X PUT http://127.0.0.1:9180/apisix/admin/routes/$id -d $file) [ $code 200 ] || echo route $id failed: $code } deploy_route user-api configs/user-route.json deploy_route product-api configs/product-route.json配置即文件的写法有个额外好处JSON 可以进 Gitdiff 能看出每次上线改了什么。接入 Prometheus 只需要一条路由Prometheus 插件本身会向抓取端暴露指标所以网关侧要做的是建一条/metrics路由挂上插件curl http://127.0.0.1:9180/apisix/admin/routes/metrics \ -H X-API-KEY: $ADMIN_KEY -X PUT -d { uri: /metrics, plugins: { prometheus: { prefer_name: true } }, upstream: { type: roundrobin, nodes: { 127.0.0.1:9090: 1 } } }prefer_name让指标按路由名而非 ID 打标改名后指标不断。配置界面长这样习惯可视化操作的话 Dashboard 和 Admin API 是同一套资源数据完全互通之后把 9090 的 Prometheus 抓/metrics配上 Grafana请求量、延迟、4xx/5xx 分布就都有数了——排障时先看图再猜。排错对照表现象 / 错误码常见原因处理动作401X-API-KEY缺失、写错或 key 是 viewer 却做了写操作核对 key 与role写权限必须 admin 角色400 invalid configuration请求体没过 schema 校验先打/schema/validate/*定位具体字段再修404资源 ID 不存在或前缀写错漏了/apisix/adminGET 列表确认 ID检查 URL 前缀和端口 9180409资源已存在且用了冲突的创建方式改用 PUT 带 ID 覆盖属幂等写法502 / 504数据面后端节点不健康或超时查健康检查是否把节点摘光了核对timeout、retries下一步建议配置能跑通之后建议按这个顺序深入。先把filter_func和label过滤这两个瑞士军刀字段玩熟它们能覆盖大部分临时分流需求少建很多路由再去看 docs/zh/latest 里的插件目录挑两三个贴业务的比如 proxy-rewrite、consumer-restriction配置上体会路由不变、行为可变的价值。如果你的团队有变更流程把第五节的 schema 校验接进 CI让坏配置进不了库成为默认共享环境里给只读同事发 viewer 角色的 key把 admin key 收敛到部署机上。最后仓库的t/目录就是官方验收标准——跑一遍t/admin/下的测试你会对每个端点的边界行为有体感比读文档快。【免费下载链接】apisixThe Cloud-Native API Gateway项目地址: https://gitcode.com/GitHub_Trending/ap/apisix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考