[SpringCould篇]之服务网关(zuul)介绍与配置

您所在的位置:网站首页 服务网关的功能介绍 [SpringCould篇]之服务网关(zuul)介绍与配置

[SpringCould篇]之服务网关(zuul)介绍与配置

2024-07-16 18:47| 来源: 网络整理| 查看: 265

一、前言介绍 1.什么是服务(API)网关?

服务网关也就是API网关,可以作为服务的统一入口。 可提供身份校验、动态路由、负载均衡、安全管理、统计、监控、流量管理、灰度发布、压力测试等功能。

API 网关有很多实现方式,如:Spring Cloud Zuul、 Nginx、Tyk、Kong。

本篇介绍的对象正是 Spring Cloud Zuul。

Spring Cloud Zuul 是基于 Netflix Zuul 的微服务路由和过滤器的解决方案,也用于实现 API 网关。其中,路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入门的基础。而过滤功能是负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。

Spring Cloud Zuul 和 Eureka 进行整合时,Zuul 将自身注册到 Eureka 服务中,同时从 Eureka 中获取其他微服务信息,以便请求可以准确的通过 Zuul 转发到具体微服务上。

2.什么是Zuul?

Zuul是Netflix开源的服务网关/API网关,提供动态路由、监控、弹性、安全性等功能。

3.过滤器类型

Zuul中有以下几种典型的过滤器类型。

pre:在请求被路由到目标服务前执行;routing:在请求被路由到目标服务时执行,这是使用Apache HttpClient或Netflix Ribbon构建和发送原始HTTP请求的地方;post:在请求被路由到目标服务后执行,比如给目标服务的响应添加头信息,收集统计数据等功能;error:请求在其他阶段发生错误时执行。 4.过滤器常见使用场景 前置(Pre) 限流鉴权参数校验调整日志打印 后置(Post) 统计日志 5.过滤器生命周期在这里插入图片描述 二、路由配置 1.路由配置参数说明

路由配置基础参数说明 | 配置项 | ken.io 的说明 | | — | — | | zuul.routes.{routename} | 路由名称,自定义,支持小写字母、- | | zuul.routes.{routename}.path | 要路由的路径,支持通配符:?、_ 、*_ | | zuul.routes.{routename}.serviceId | 注册在Eureka的ServiceName | | zuul.routes.{routename}.url | 如果应用没有注册在Eureka,也可以通过指定Url来路由 | | zuul.ignored-services | 忽略指定的服务,可以配置多个,以,间隔 | | zuul.ignored-patterns | 忽略指定的路径,可以配置多个,以,间隔。同样支持通配符 |

path通配符说明 | 通配符 | 说明 | path举例 | 匹配示例 | | — | — | — | — | | ? | 匹配单个任意字符 | /test/? | /test/a、/test/b | | * | 匹配任意字符 | /test/* | /test/a、/test/b、/test/ab | | ** | 匹配任意字符且支持多级目录 | /test/** | /test/a、/test/b、/test/ab、/test/ab/c |

注:若对于通配符来说,没有特定的需求,使用**就好

2.路由配置示例 2.1路由到到不同的服务 zuul: routes: api-ribbon: path: /api-ribbon/** serviceId: server-consum-ribbon

适用于:服务随着业务的发展不断扩大需要拆分,这时候我们可以通过api兼容+路由配置来适配,可以对上游无感知。 例如用户服务(userservice)有三个核心模块,auth、info、safe,经过拆分拆出来两个服务:authservice、safeservice。那么拆分后的路由配置:

zuul: routes: user-auth: path: /user/auth/** serviceId: authservice user-safe: path: /user/safe/** serviceId: safeservice user: path: /user/** serviceId: userservice

因为路由规则匹配顺序是按配置顺序来的,所以未拆出去的配置在最后。

2.2路由到指定站点

当某应用并没有注册到服务注册中心(Eureka),但又需要可以通过指定url的访问

zuul: routes: ken-io: path: /ken/** url: https://ken.io/ 2.3忽略指定路径

适用于某些通用的接口不暴露给外部, 例如每个应用都会有一个健康检查入口,但是这个入口是不应该暴露给外部的,就可以通过忽略规则屏蔽掉。

zuul: ignored-patterns: /**/hs,/**/health 2.4忽略指定服务 zuul: ignored-services: aservice,bservice 2.5配置访问前缀

可以通过以下配置来给网关路径添加前缀,此处添加了/api前缀, 这样我们需要访问http://xxx:port/api/xxxx才能访问到接口

zuul: prefix: /api #给网关路由添加前缀 2.6不同API路由统一前缀

在不同服务路由的开头附加一个的前缀是很常见的 比如希望在不同服务的路由的开头都加上一个/api的前缀,Zuul也是支持的。可以使用如下配置来实现这一功能:

zuul: ignored-services: '*' prefix: /api routes: organizationservice: /organization/** licenseservice: /license/** 2.7Header过滤及重定向添加Host Zuul在请求路由时,默认会过滤掉一些敏感的头信息,以下配置可以防止路由时的Cookie及Authorization的丢失: zuul: sensitive-headers: Cookie,Set-Cookie,Authorization #配置过滤敏感的请求头信息,设置为空就不会过滤 Zuul在请求路由时,不会设置最初的host头信息,以下配置可以解决: zuul: add-host-header: true #设置为true重定向是会添加host请求头 2.8常用配置 zuul: routes: #给服务配置路由 user-service: path: /userService/** feign-service: path: /feignService/** ignored-services: user-service,feign-service #关闭默认路由配置 prefix: /proxy #给网关路由添加前缀 sensitive-headers: Cookie,Set-Cookie,Authorization #配置过滤敏感的请求头信息,设置为空就不会过滤 add-host-header: true #设置为true重定向是会添加host请求头 retryable: true # 关闭重试机制 PreLogFilter: pre: disable: false #控制是否启用过滤器

关注程序员小强公众号更多编程趣事,知识心得与您分享 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3