Go-Zero项目开发29: 下载并集成APISIX API网关

发布时间:2026/7/27 3:47:37
Go-Zero项目开发29: 下载并集成APISIX API网关 纲要go-zero服务架构概述APISIX 简介与选型理由环境准备与依赖说明APISIX 的安装方式基于 Docker Compose 的快速部署文件结构与权限处理配置 APISIX登录 APISIX Dashboard配置上游Upstream以对接go-zero服务配置 HTTP 路由配置 WebSocket 路由并升级协议测试集成效果验证 HTTP 接口验证 WebSocket 连接总结与后续扩展整体架构在上一阶段我们已经使用go-zero构建了多个微服务包括用户服务、WebSocket 服务等。随着服务数量的增加直接暴露各个服务的地址不仅增加了客户端的复杂度也不利于统一鉴权、限流、监控等。因此引入 API 网关作为唯一入口。本文选择 APISIX 作为 API 网关完成与现有go-zero服务的集成。APISIX 简介APISIX 是由 Apache 软件基金会原始团队为 api7.ai开发的高性能、可扩展的云原生 API 网关。它具备以下特点基于 Nginx/OpenResty天然支持四层和七层代理控制面与数据面分离配置动态生效无需重启丰富的插件生态限流、鉴权、熔断、可观测性等支持 HTTP、gRPC、Dubbo、WebSocket 等多种协议提供可视化管理界面Dashboard在go-zero生态中APISIX 可以作为流量的统一调度中心将外部请求转发至后端go-zero服务同时提供负载均衡、协议升级等能力。安装 APISIX安装方式主要分为源码编译和容器化部署。为了快速与go-zero项目集成这里采用 Docker Compose 方式进行部署。在项目根目录下创建docker/apisix目录并写入以下文件project-root/ ├─ docker/ │ └─ apisix/ │ ├─ docker-compose.yaml │ ├─ config.yaml # APISIX 网关配置 │ └─ dashboard_conf.yaml # Dashboard 配置Docker Compose 编排文件version:3.8services:apisix:image:apache/apisix:3.8.0-debianrestart:alwaysvolumes:-./config.yaml:/usr/local/apisix/conf/config.yaml:roports:-9080:9080-9443:9443networks:-apisix-netapisix-dashboard:image:apache/apisix-dashboard:3.0.1restart:alwaysvolumes:-./dashboard_conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml:roports:-9000:9000networks:-apisix-netdepends_on:-apisixnetworks:apisix-net:driver:bridge说明apisix服务使用最新稳定版镜像暴露 9080HTTP和 9443HTTPS端口并挂载自定义配置apisix-dashboard提供可视化管理界面暴露 9000 端口两个服务位于同一自定义网络确保互相通信APISIX 配置文件config.yaml允许 APISIX 通过 etcd 存储配置同时启用allow_admin以便 Dashboard 管理。apisix:node_listen:9080enable_admin:trueallow_admin:-0.0.0.0/0admin_key:-name:adminkey:edd1c9f034335f136f87ad84b625c8f1role:adminetcd:host:-http://etcd:2379prefix:/apisixtimeout:30如果环境内已有 etcd请根据实际地址修改。简单测试可使用内置的 etcd 或另起一个 etcd 容器。Dashboard 配置文件dashboard_conf.yaml指定了 Dashboard 自身监听端口及 APISIX Admin API 的地址。conf:listen:host:0.0.0.0port:9000etcd:endpoints:-etcd:2379admin_api:api_key:edd1c9f034335f136f87ad84b625c8f1将以上文件上传至服务器后进入docker/apisix目录执行docker-composeup-d首次启动可能因为目录权限问题导致 APISIX 启动失败。检查日志常见错误为Permission denied访问挂载的配置文件或日志目录。解决方案# 根据实际情况调整目录权限chmod-R755./config.yaml ./dashboard_conf.yamldocker-composedowndocker-composeup-d通过docker-compose ps确认两个服务均为Up状态即可。配置 APISIX 对接 go-zero 服务登录 Dashboard假设服务器 IP 为192.168.1.100浏览器访问http://192.168.1.100:9000默认用户名密码为admin/admin可根据安全要求修改。配置上游Upstream上游代表一组后端服务实例。我们为go-zero的用户服务创建上游。名称user-api类型轮询roundrobin负载均衡目标节点192.168.1.100:8888go-zero用户服务的实际监听地址协议HTTP若存在多个实例可添加多个节点实现负载均衡。类似的为 WebSocket 服务创建上游名称ws-api节点192.168.1.100:9999假设 WebSocket 服务监听 9999协议HTTPAPISIX 会自动处理 WebSocket 升级配置路由HTTP 用户服务路由名称user-route-v1路径/v1/user/*方法所有匹配上游user-api其他保持默认即可其中go-zero的用户 API 通常定义类似/v1/user/login使用前缀匹配即可将所有用户相关请求转发。WebSocket 路由名称ws-route-v1路径/v1/ws方法GET高级匹配 - 协议WebSocket勾选后 APISIX 会识别Upgrade头并转为 WebSocket 代理匹配上游ws-api此时外部客户端只需将请求统一发往 APISIX 的9080端口路径与上述路由匹配后即可到达对应的go-zero服务。测试集成HTTP 接口测试原本直接访问http://192.168.1.100:8888/v1/user/login现在改为POST http://192.168.1.100:9080/v1/user/login携带正确的 JSON 请求体响应应与直连时一致。例如{username:test,password:123456}返回 token 等信息说明网关转发成功。WebSocket 测试原本 WebSocket 地址为ws://192.168.1.100:9999/v1/ws现改为ws://192.168.1.100:9080/v1/ws。使用在线工具或wscat测试wscat-cws://192.168.1.100:9080/v1/ws连接成功后发送心跳或查询消息能够正常收发证明 WebSocket 路由与协议升级配置正确。总结通过以上步骤我们在go-zero项目中成功集成了 APISIX 网关。所有客户端现在只需面向 APISIX 的单一入口地址内部路由和负载均衡由网关处理。后续可以在 APISIX 上叠加身份认证、限流、日志等插件进一步完善微服务体系。后续建议将 APISIX 的 etcd 配置改为高可用集群为路由添加 JWT 插件与go-zero的认证体系对接集成 Prometheus 插件将指标暴露至监控系统使用 APISIX 的openid-connect或自定义插件实现统一鉴权本集成方式同样适用于任何采用go-zero框架构建的服务集群。