ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

K8s集群微服务网关Zuul路由配置调优实操

K8s集群微服务网关Zuul路由配置调优实操 K8s集群微服务网关Zuul路由配置调优实操技术栈Spring Cloud Zuul v1.x Kubernetes v1.32.13 Rocky Linux 8.6 Eureka/Nacos Java 17操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案K8s集群微服务网关Zuul路由配置调优实操操作环境Zuul 网关服务Spring Boot 2.7 Spring Cloud 2021K8s 集群 v1.32.13Rocky Linux 8.6注册中心 Nacos 2.x 或 Eureka后端微服务user-service/order-service/product-serviceJDK 17Maven 3.9镜像已推送到 HarborZuul 部署在 default 命名空间3副本kubectl v1.32.13应用日志输出到标准输出对接原理Zuul 是 Netflix 开源的 JVM 网关Spring Cloud 集成提供声明式路由和过滤器机制适合 Java 微服务体系。核心机制过滤器Filter是 Zuul 的核心分为 PRE路由前认证/限流/日志、ROUTING路由中请求转发、POST路由后响应修改/日志、ERROR错误处理四种类型通过 shouldFilter() 判断是否执行run() 实现逻辑。路由配置通过 zuul.routes 配置服务路由支持 serviceId服务发现自动路由和 url直接URL两种方式配合 Eureka/Nacos 实现服务发现和负载均衡Ribbon。Zuul 1.x 是阻塞式 IOServletZuul 2.x 是异步非阻塞NettySpring Cloud 主要集成 Zuul 1.x。熔断集成 Hystrix降级方法在 fallback 中实现。K8s 部署Zuul 无状态多副本Service LoadBalancer 暴露通过 ConfigMap 动态配置路由RefreshScope Spring Cloud Config。注意Spring Cloud 已推荐使用 Spring Cloud GatewayWebFlux 异步替代 Zuul但 Zuul 仍广泛用于存量系统。详细步骤1. 路由配置与动态刷新# application.yml路由配置 cat application.yml EOF zuul: routes: # 方式1serviceId服务发现 user-service: path: /user/** serviceId: user-service stripPrefix: true # 方式2url直接转发 external: path: /external/** url: http://external-api.example.com # 方式3通配符 api: path: /api/** serviceId: api-service # 忽略服务不自动路由 ignored-services: * # 前缀 prefix: /gateway # 敏感头不过滤 sensitive-headers: # 添加host头 add-host-header: true # 路由重试 retryable: true EOF # 动态路由数据库/配置中心 RefreshScope Configuration public class DynamicRouteConfig { Value(${zuul.routes}) private MapString, ZuulProperties.ZuulRoute routes; } # 自定义路由定位器 public class CustomRouteLocator extends SimpleRouteLocator { Override protected MapString, ZuulRoute locateRoutes() { // 从数据库/Nacos读取路由 return routes; } } # Nacos配置动态刷新 # bootstrap.yml配置Nacos Config # 发布配置后自动刷新路由 # 验证路由 curl http://zuul-gateway/gateway/user/api/users curl http://zuul-gateway/gateway/order/api/orders # 查看路由映射 curl http://zuul-gateway/actuator/routes curl http://zuul-gateway/actuator/routes/details验证流程# 1. 验证Zuul启动 kubectl get pods -l appzuul-gateway # Running # 2. 验证健康检查 curl http://zuul-gateway/actuator/health # {status:UP} # 3. 验证路由 curl http://zuul-gateway/user/api/users # 返回用户服务响应 # 4. 验证过滤器 # 无token返回401有token返回200 # 5. 验证限流 for i in {1..110}; do curl -s -o /dev/null -w %{http_code}\n http://zuul/api; done | grep 429 # 6. 验证熔断 # 停止后端服务访问返回降级响应 # 7. 验证灰度 curl -H X-Canary: true http://zuul/user/version # 返回v2排错方案路由404检查zuul.routes配置path是否匹配serviceId是否在注册中心ignored-services是否排除了服务stripPrefix配置actuator/routes查看实际路由500内部错误查看Zuul日志后端服务异常过滤器run()抛出异常ERROR过滤器是否处理Hystrix超时Ribbon连接失败服务不可用502检查后端服务是否注册到Nacos/Eureka服务实例是否健康Ribbon是否获取到服务列表网络是否连通端口是否正确超时调整ribbon.ReadTimeout/ConnectTimeouthystrix.timeoutInMilliseconds后端响应慢需优化Zuul线程池大小增加副本过滤器不执行检查filterType是否正确shouldFilter()返回truefilterOrder顺序Component是否被Spring扫描是否有异常被吞掉熔断不恢复检查circuitBreaker.sleepWindowInMilliseconds后端是否恢复健康错误率是否降到阈值以下Hystrix dashboard查看状态动态配置不刷新检查RefreshScopeNacos Config是否配置bootstrap.yml优先级发布配置是否成功actuator/refresh手动刷新性能瓶颈Zuul 1.x阻塞IO增加副本数调大tomcat max-threadsJVM堆内存异步处理非核心逻辑考虑迁移到Spring Cloud Gateway
返回列表