APISIX Dashboard实战:从零构建微服务路由网关
1. 认识APISIX Dashboard:你的微服务交通指挥官
第一次接触APISIX Dashboard时,我把它想象成一个繁忙机场的空中交通管制塔台。就像塔台需要协调无数航班起降一样,这个可视化面板能帮你管理所有进出微服务集群的网络请求。不同于需要手写YAML配置文件的传统方式,Dashboard用图形界面把网关配置变成了"拖拽+填空"的简单操作。
去年我在电商项目中首次使用它时,原本需要2天完成的网关配置,只用3小时就搞定了。Dashboard默认运行在9000端口,浏览器访问http://localhost:9000就能看到登录界面(初始账号密码都是admin)。登录后你会看到六个核心功能模块:
- 仪表盘:实时显示请求量、延迟等关键指标,就像汽车仪表盘显示车速油耗
- 路由:定义请求转发规则,相当于快递分拣中心的传送带控制系统
- 服务:将相同功能的路由打包管理,类似把寄往同一地区的快递包裹装进同一个集装箱
- 上游:管理后端服务节点,好比维护多个可用的快递配送站点
- 插件:提供限流、鉴权等增值功能,相当于给快递包裹添加保价、代收货款服务
- 证书:配置HTTPS所需的SSL证书,就像给快递车辆安装防盗锁
2. 搭建微服务演示环境:模拟真实业务场景
2.1 准备三组服务节点
为了演示完整配置流程,我们先模拟一个包含三个微服务的电商系统:
- 前端服务:运行在192.168.1.100的Vue应用
- 用户服务:处理登录/注册的SpringBoot应用(192.168.1.101:5000)
- 商品服务:管理商品信息的Go应用(192.168.1.102:6000)
用Docker快速启动这些服务最方便。比如用户服务可以这样启动:
docker run -d -p 5000:5000 --name user-service \ -e SPRING_PROFILES_ACTIVE=prod \ your-docker-repo/user-service:1.02.2 网关节点部署
APISIX网关需要部署在独立服务器(192.168.1.103)。用Docker Compose部署最省事:
version: "3" services: apisix: image: apache/apisix:3.8.0 ports: - "9080:9080" - "9000:9000" volumes: - ./apisix_conf:/usr/local/apisix/conf etcd: image: bitnami/etcd:3.5 environment: ETCD_ADVERTISE_CLIENT_URLS: "http://0.0.0.0:2379" ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"3. 配置第一个路由:用户登录功能
3.1 创建上游(Upstream)
点击Dashboard左侧"上游"菜单,新建一个名为"华南区-用户服务"的上游:
- 负载均衡算法选择"轮询"(适合初期流量均匀分配)
- 在节点列表添加目标地址:192.168.1.101:5000
- 健康检查配置:间隔5秒,HTTP状态码200为健康
这里有个实用技巧:当同个服务有多个实例时(比如用户服务扩容到3个节点),可以一次性添加所有节点地址,APISIX会自动进行流量分配。
3.2 设置路由(Route)
转到"路由"菜单创建新路由:
- 名称:user-login
- 路径:/api/v1/login(匹配所有登录请求)
- 绑定上游:选择刚创建的"华南区-用户服务"
- 启用JWT插件:为路由添加身份验证层
测试时可以用curl验证配置:
curl "http://192.168.1.103:9080/api/v1/login" \ -H "Authorization: Bearer your_jwt_token"4. 进阶配置:服务抽象与插件应用
4.1 使用服务(Service)抽象通用配置
当多个路由需要相同配置时(比如都要调用用户服务),就该使用Service了。创建名为"用户中心"的服务:
- 绑定上游:华南区-用户服务
- 添加公共插件:
- 限流:1000次/分钟
- CORS:允许前端域名跨域访问
- 请求日志:记录所有访问日志
之后创建/login、/profile等路由时,只需绑定这个Service,不用重复配置插件。这就像公司给所有部门统一采购办公用品,比各部门单独采购更高效。
4.2 典型插件使用场景
APISIX的插件系统是其超级武器,分享几个实战案例:
- 流量控制:在秒杀活动中,给/product/limited路由添加限流插件
- 金丝雀发布:使用流量分割插件,将5%的请求导流到新版本服务
- 故障熔断:配置响应码检测,当错误率超过10%时自动切换备用服务
配置Prometheus插件监控网关状态:
plugins: - name: prometheus config: export_addr: ip: "0.0.0.0" port: 90915. 生产环境最佳实践
5.1 高可用架构设计
我在金融项目中的部署方案:
- 网关层:3台APISIX实例组成集群,前置负载均衡器
- 配置中心:5节点ETCD集群,确保配置信息不丢失
- 监控体系:Prometheus+Grafana+告警管理器
关键配置项:
# apisix_conf/config.yaml deployment: role: traditional role_traditional: config_provider: etcd etcd: host: - "http://etcd1:2379" - "http://etcd2:2379" - "http://etcd3:2379"5.2 安全防护策略
去年某次安全审计中发现的问题及解决方案:
- 接口防刷:为敏感路由添加IP限速插件
- 敏感信息过滤:使用response-rewrite插件隐藏内部错误详情
- 证书管理:每月轮换SSL证书,启用TLS 1.3
配置示例:
# 创建自动续期的Let's Encrypt证书 curl http://127.0.0.1:9180/apisix/admin/ssl \ -H 'X-API-KEY: your-admin-key' \ -X PUT -d ' { "cert": "$(cat /path/to/cert.pem)", "key": "$(cat /path/to/key.pem)", "snis": ["your-domain.com"] }'6. 故障排查与性能调优
6.1 常见问题处理
踩过的坑之一:路由匹配失效
- 现象:请求未按预期转发
- 排查步骤:
- 检查Dashboard路由列表的优先级数值
- 用
curl -v查看请求头是否携带必要参数 - 查看APISIX错误日志
logs/error.log
6.2 性能优化记录
压测某政务平台时的调优过程:
- 初始QPS:1200
- 调优步骤:
- 启用HTTP2插件
- 调整worker进程数等于CPU核心数
- 开启内存缓存路由规则
- 最终QPS:9500
关键配置:
nginx_config: worker_processes: auto event: worker_connections: 2048 http: lua_shared_dicts: router: 100m