APISIX与Nacos整合实战:从Docker部署到服务发现配置全流程

发布时间:2026/7/23 7:33:45

APISIX与Nacos整合实战:从Docker部署到服务发现配置全流程 APISIX与Nacos整合实战从Docker部署到服务发现配置全流程微服务架构的普及让服务发现成为现代分布式系统的核心需求。当企业API规模达到数百个甚至上千个时传统的手动配置方式不仅效率低下更难以应对动态扩展和故障转移的场景。本文将带您从零开始通过Docker快速搭建Nacos注册中心并完成与高性能API网关APISIX的深度整合构建一个能够自动感知服务变化的智能网关系统。1. 环境准备与Nacos部署在开始之前请确保您的开发环境已安装Docker 20.10和Docker Compose 2.0。我们将使用容器化方案部署Nacos这种方式的优势在于避免了复杂的依赖安装和环境配置特别适合快速搭建开发测试环境。1.1 单机版Nacos部署创建docker-compose.yml文件内容如下version: 3.8 services: nacos: image: nacos/nacos-server:2.0.3 container_name: nacos-standalone environment: - MODEstandalone - NACOS_AUTH_ENABLEtrue volumes: - ./standalone-logs:/home/nacos/logs ports: - 8848:8848 - 9848:9848 healthcheck: test: [CMD, curl, -f, http://localhost:8848/nacos] interval: 30s timeout: 10s retries: 3启动Nacos服务docker-compose up -d等待约30秒后访问http://localhost:8848/nacos默认账号密码为nacos/nacos。您将看到Nacos控制台的登录页面这表示服务已成功启动。注意生产环境建议使用集群模式部署Nacos并配置持久化存储。单机模式仅适用于开发和测试场景。1.2 基础服务注册为了后续测试我们先注册一个示例服务到Nacos。在控制台左侧菜单选择服务管理→服务列表点击新建服务填写以下信息服务名demo-service分组名称DEFAULT_GROUP保护阈值0元数据{version:1.0.0}然后为该服务添加一个实例IP127.0.0.1端口8080权重1.0健康检查开启元数据{zone:zone1}2. APISIX基础配置APISIX作为云原生API网关其核心优势在于高性能和丰富的插件生态。我们将从Docker安装开始逐步配置与Nacos的集成。2.1 APISIX容器化部署创建apisix-docker-compose.yml文件version: 3.8 services: apisix: image: apache/apisix:3.0.0 ports: - 9080:9080 - 9091:9091 volumes: - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro depends_on: - etcd - nacos etcd: image: bitnami/etcd:3.5.6 environment: - ETCD_ADVERTISE_CLIENT_URLShttp://etcd:2379 - ALLOW_NONE_AUTHENTICATIONyes2.2 配置Nacos服务发现修改apisix_conf/config.yaml添加Nacos发现配置discovery: nacos: host: - http://nacos:nacosnacos:8848 prefix: /nacos/v1 fetch_interval: 15 weight: 100 timeout: connect: 2000 send: 2000 read: 5000关键参数说明fetch_interval服务列表刷新间隔秒weight默认权重值timeout连接Nacos的各阶段超时设置启动APISIX服务docker-compose -f apisix-docker-compose.yml up -d3. 服务路由配置实战现在我们将配置APISIX路由使其能够动态发现Nacos中的服务实例。3.1 创建动态上游通过APISIX Admin API创建基于Nacos发现的上游curl http://localhost:9091/apisix/admin/upstreams -H X-API-KEY: edd1c9f034335f136f87ad84b625c8f1 -X PUT -d { id: nacos-upstream, discovery_type: nacos, discovery_args: { service_name: demo-service, group_name: DEFAULT_GROUP }, type: roundrobin }3.2 配置路由规则将创建的upstream绑定到特定路由curl http://localhost:9091/apisix/admin/routes -H X-API-KEY: edd1c9f034335f136f87ad84b625c8f1 -X PUT -d { id: nacos-route, uri: /demo/*, upstream_id: nacos-upstream, plugins: { proxy-rewrite: { regex_uri: [^/demo/(.*), /$1] } } }这个配置实现了将所有/demo/*请求转发到Nacos中注册的demo-service使用proxy-rewrite插件去除URI前缀采用轮询负载均衡策略4. 高级功能与调优4.1 健康检查配置增强上游服务的健壮性添加主动健康检查curl http://localhost:9091/apisix/admin/upstreams/nacos-upstream -H X-API-KEY: edd1c9f034335f136f87ad84b625c8f1 -X PATCH -d { checks: { active: { type: http, http_path: /health, healthy: { interval: 5, successes: 2 }, unhealthy: { interval: 1, http_failures: 3 } } } }4.2 多环境隔离策略在实际开发中我们通常需要区分不同环境。Nacos通过命名空间(Namespace)实现环境隔离在Nacos控制台创建命名空间如dev、test、prod修改APISIX上游配置{ discovery_args: { namespace_id: your-namespace-id, service_name: demo-service } }4.3 性能调优参数对于高并发场景建议调整以下参数参数默认值建议值说明fetch_interval30s15s服务发现刷新间隔connect_timeout2000ms1000ms连接超时时间read_timeout5000ms3000ms读取超时时间unhealthy.interval1s2s不健康检查间隔5. 故障排查与常见问题5.1 连接问题排查步骤验证Nacos控制台可访问检查APISIX日志中的discovery模块输出使用curl测试Nacos API端点curl -u nacos:nacos http://localhost:8848/nacos/v1/ns/instance/list?serviceNamedemo-service确认etcd集群健康状态5.2 典型错误解决方案问题1服务发现失败返回service not found检查Nacos中服务名是否匹配确认服务实例的健康状态验证namespace和group配置问题2请求返回502 Bad Gateway检查上游服务是否真正可用验证健康检查配置查看APISIX error.log获取详细错误问题3配置变更未生效确认已重启APISIX或触发配置热更新检查Nacos配置的版本号清除etcd缓存数据6. 生产环境最佳实践6.1 安全加固措施修改Nacos默认账号密码启用Nacos身份认证已在前文配置配置APISIX的Admin API访问控制使用TLS加密通信discovery: nacos: host: - https://nacos:nacosnacos:8848 ssl_verify: false # 测试环境可关闭验证6.2 监控与告警建议配置以下监控指标APISIX到Nacos的连接延迟服务发现成功率上游实例健康状态变化频率请求路由错误率示例Prometheus查询sum(rate(apisix_http_status{code~5..}[1m])) by (service)6.3 蓝绿发布方案利用Nacos元数据实现流量切分为新版本服务添加元数据{version:2.0.0}在APISIX路由中添加流量过滤条件{ plugins: { traffic-split: { rules: [ { match: [ { vars: [ [http_x_version, , 2.0] ] } ], weighted_upstreams: [ { upstream_id: new-version-upstream, weight: 100 } ] } ] } } }

相关新闻