【了解SpringCloud Gateway微服务网关】

在这里插入图片描述
曾梦想执剑走天涯,我是程序猿【AK】

在这里插入图片描述

目录

  • 简述概要
  • 知识图谱
    • 什么是SpringCloudGateway
    • 功能特征
    • 应用场景
    • 核心概念
    • 配置文件
    • 工作原理
    • 路由谓词工厂(内置的)
      • [After 路由谓词工厂](https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-after-route-predicate-factory)
      • Before 路由谓词工厂
      • 路由之间谓词工厂
      • Cookie 路由谓词工厂
      • 标头路由谓词工厂
      • 主机路由谓词工厂
      • 方法路由谓词工厂
      • 路径路由谓词工厂
      • 查询路由谓词工厂
      • RemoteAddr 路由谓词工厂
        • 修改远程地址解析方式
      • 权重路由谓词工厂
      • XForwarded 远程地址路由谓词工厂

简述概要

了解SpringCloud Gateway微服务网关

知识图谱

什么是SpringCloudGateway

  • Spring Cloud官方推出的第二代网关框架,定位于取代Netflix Zuul。相比Zuul来说,Spring Cloud Gate提供更优秀的性能,更强大的功能。(Zuul1.x是同步阻塞的设计,性能低,但2.x版本也基于Netty,zuul2.x版本与springcloudgateway性能差距其实不大)
  • 由WebFlux+Netty+Reactor实现的响应式的API网关。它不能在传统的servlet容器中工作,也不能构建成war包。
  • 目的为微服务架构提供一种简单且有效的API路由的管理方式,并给予Fliter的方式提供网关的基本功能,例如安全认证、监控、限流等。

功能特征

  • 基于 Spring 框架和 Spring Boot 构建
  • 能够匹配任何请求属性上的路由。
  • 谓词(Predicate)和过滤器(Fliter)特定于路由。
  • 断路器集成(Sentinel、Hystrix)
  • Spring Cloud Discovery客户端集成(Nacos、Eruka)
  • 易于编写谓词和过滤器
  • 请求速率限制
  • 路径重写

应用场景

全局性流控
日志统计
防止SQL注入
防止Web攻击
屏蔽工具扫描
黑白IP名单
证书加解密处理
服务级别流控
服务降级与熔断
路由与负载均衡、灰度策略
服务过滤、聚合与发现
权限验证与用户等级策略
业务规则与参数检验
多级缓存策略

核心概念

  • 路由(route)

路由是网关中最基础的部分,路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成、如果断言为真则说明请求的URL和配置的路由匹配。

  • 断言(predicates)

Java8中的断言函数,SpringCloudGateway中的断言函数类型是spring5.0框架中的ServerWebExchange。断言函数允许开发者去定义匹配Http request中的任何信息,比如请求头和参数等。

  • 过滤器(Filter)

SpringCloudGateway中的filter分为Gateway Filter和Global Fliter、Filter可以对请求和响应进行处理。

配置文件

spring:cloud:# Spring Cloud Gateway 配置项,对应 GatewayProperties 类gateway:# 路由配置项,对应 RouteDefinition 数组routes:## 各个微服务- id: system-admin-api # 路由的服务唯一编号uri: grayLb://system-serverpredicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组- Path=/admin-api/system/**filters:- RewritePath=/admin-api/system/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs- id: system-app-api # 路由的编号uri: grayLb://system-serverpredicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组- Path=/app-api/system/**filters:- RewritePath=/app-api/system/v3/api-docs, /v3/api-docs

工作原理

客户端向 Spring Cloud Gateway 发出请求。如果网关处理程序映射确定请求与路由匹配,则会将其发送到网关 Web 处理程序。该处理程序通过特定于请求的过滤器链运行请求。过滤器被虚线分开的原因是过滤器可以在发送代理请求之前和之后运行逻辑。执行所有“预”过滤器逻辑。然后发出代理请求。发出代理请求后,将运行“post”过滤器逻辑。
image.png

路由谓词工厂(内置的)

Spring Cloud Gateway 将路由作为 Spring WebFluxHandlerMapping基础设施的一部分进行匹配。Spring Cloud Gateway 包含许多内置的路由谓词工厂。所有这些谓词都匹配 HTTP 请求的不同属性。您可以将多个路由谓词工厂与逻辑and语句组合起来。
image.png

After 路由谓词工厂

路由谓词工厂After采用一个参数 a datetime(它是一个 java ZonedDateTime)。此谓词匹配指定日期时间之后发生的请求。以下示例配置后路由谓词:

spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After=2017-01-20T17:42:47.789-07:00[America/Denver]

Before 路由谓词工厂

路由谓词工厂Before采用一个参数 a datetime(它是一个 java ZonedDateTime)。该谓词匹配在指定的 之前发生的请求datetime。以下示例配置 before 路由谓词:

spring:cloud:gateway:routes:- id: before_routeuri: https://example.orgpredicates:- Before=2017-01-20T17:42:47.789-07:00[America/Denver]

路由之间谓词工厂

路由谓词工厂Between有两个参数,datetime1它们datetime2 是javaZonedDateTime对象。datetime1该谓词匹配 之前和之后发生的请求datetime2。参数datetime2必须在 后面datetime1。以下示例配置了 Between 路由谓词:

spring:cloud:gateway:routes:- id: between_routeuri: https://example.orgpredicates:- Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]

Cookie 路由谓词工厂

路由Cookie谓词工厂采用两个参数:cookiename和 a regexp(这是一个 Java 正则表达式)。此谓词匹配具有给定名称且其值与正则表达式匹配的 cookie。以下示例配置 cookie 路由谓词工厂:、

spring:cloud:gateway:routes:- id: cookie_routeuri: https://example.orgpredicates:- Cookie=chocolate, ch.p

标头路由谓词工厂

路由Header谓词工厂采用两个参数:theheader和 a regexp(这是一个 Java 正则表达式)。此谓词与具有给定名称且其值与正则表达式匹配的标头匹配。以下示例配置标头路由谓词:

spring:cloud:gateway:routes:- id: header_routeuri: https://example.orgpredicates:- Header=X-Request-Id, \d+

主机路由谓词工厂

路由谓词工厂Host采用一个参数:主机名列表patterns。该模式是 Ant 风格的模式,以.为分隔符。该谓词匹配Host与模式匹配的标头。以下示例配置主机路由谓词:

spring:cloud:gateway:routes:- id: host_routeuri: https://example.orgpredicates:- Host=**.somehost.org,**.anotherhost.org

方法路由谓词工厂

路由Method谓词工厂采用一个methods参数,该参数是一个或多个参数:要匹配的 HTTP 方法。以下示例配置方法路由谓词:

spring:cloud:gateway:routes:- id: method_routeuri: https://example.orgpredicates:- Method=GET,POST

路径路由谓词工厂

路由Path谓词工厂采用两个参数:一个 Spring 列表PathMatcher patterns和一个名为 的可选标志matchTrailingSlash(默认为true)。以下示例配置路径路由谓词:

spring:cloud:gateway:routes:- id: path_routeuri: https://example.orgpredicates:- Path=/red/{segment},/blue/{segment}

如果请求路径是,则此路由匹配,例如:/red/1or /red/1/or /red/blueor /blue/green。
如果matchTrailingSlash设置为,则不会匹配false请求路径。/red/1/
该谓词提取 URI 模板变量(例如segment,在前面的示例中定义的)作为名称和值的映射,并将其放置在 中,ServerWebExchange.getAttributes()并使用 中定义的键ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE。这些值可供GatewayFilter工厂使用
可以使用实用程序方法(称为get)来更轻松地访问这些变量。以下示例展示了如何使用该get方法:

Map<String, String> uriVariables = ServerWebExchangeUtils.getUriTemplateVariables(exchange);String segment = uriVariables.get("segment");

查询路由谓词工厂

路由Query谓词工厂有两个参数:一个必需参数param和一个可选参数regexp(这是一个 Java 正则表达式)。以下示例配置查询路由谓词:

spring:cloud:gateway:routes:- id: query_routeuri: https://example.orgpredicates:- Query=green

如果请求包含green查询参数,则前面的路由匹配。

spring:cloud:gateway:routes:- id: query_routeuri: https://example.orgpredicates:- Query=red, gree.

RemoteAddr 路由谓词工厂

路由RemoteAddr谓词工厂采用 的列表(最小大小为 1)sources,它们是 CIDR 表示法(IPv4 或 IPv6)字符串,例如192.168.0.1/16(其中192.168.0.1是 IP 地址,16是子网掩码)。以下示例配置 RemoteAddr 路由谓词:

spring:cloud:gateway:routes:- id: remoteaddr_routeuri: https://example.orgpredicates:- RemoteAddr=192.168.1.1/24

修改远程地址解析方式

默认情况下,RemoteAddr 路由谓词工厂使用传入请求中的远程地址。如果 Spring Cloud Gateway 位于代理层后面,这可能与实际的客户端 IP 地址不匹配。
您可以通过设置自定义来自定义远程地址的解析方式RemoteAddressResolver。Spring Cloud Gateway 附带一个非默认远程地址解析器,该解析器基于X-Forwarded-For 标头, XForwardedRemoteAddressResolver。
XForwardedRemoteAddressResolver有两个静态构造函数方法,它们采用不同的安全方法:

  • XForwardedRemoteAddressResolver::trustAll返回RemoteAddressResolver始终采用X-Forwarded-For标头中找到的第一个 IP 地址的 a。这种方法很容易受到欺骗,因为恶意客户端可以为 设定一个初始值X-Forwarded-For,该值将被解析器接受。
  • XForwardedRemoteAddressResolver::maxTrustedIndex采用与 Spring Cloud Gateway 前面运行的可信基础设施数量相关的索引。例如,如果 Spring Cloud Gateway 只能通过 HAProxy 访问,则应使用值 1。如果在访问 Spring Cloud Gateway 之前需要可信基础设施的两跳,则应使用值 2。

考虑以下标头值:、

X-Forwarded-For: 0.0.0.1, 0.0.0.2, 0.0.0.3

权重路由谓词工厂

路由谓词工厂Weight有两个参数:group和weight(一个 int)。权重按每组计算。以下示例配置权重路由谓词:

spring:cloud:gateway:routes:- id: weight_highuri: https://weighthigh.orgpredicates:- Weight=group1, 8- id: weight_lowuri: https://weightlow.orgpredicates:- Weight=group1, 2

XForwarded 远程地址路由谓词工厂

路由XForwarded Remote Addr谓词工厂采用 的列表(最小大小为 1)sources,它们是 CIDR 表示法(IPv4 或 IPv6)字符串,例如192.168.0.1/16(其中192.168.0.1是 IP 地址,16是子网掩码)。
此路由谓词允许根据 HTTP 标头过滤请求X-Forwarded-For。
这可以与反向代理(例如负载均衡器或 Web 应用程序防火墙)一起使用,其中仅当请求来自这些反向代理所使用的可信 IP 地址列表时才应允许请求。
以下示例配置 XForwardedRemoteAddr 路由谓词:

spring:cloud:gateway:routes:- id: xforwarded_remoteaddr_routeuri: https://example.orgpredicates:- XForwardedRemoteAddr=192.168.1.1/24

持续更新......



                                                                                                         ---- 永不磨灭的番号:我是AK



在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/718726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql运维篇(七) 部署MHA--完结

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; 一、MHA软件构成 Manager工具包主要包括以下几个工具&#xff1a; masterha_manger 启…

【C++】多态深入分析

目录 一&#xff0c;多态的原理 1&#xff0c;虚函数表与虚函数表指针 2&#xff0c;原理调用 3&#xff0c;动态绑定与静态绑定 二&#xff0c;抽象类 三&#xff0c;单继承和多继承关系的虚函数表 1&#xff0c;单继承中的虚函数表 2&#xff0c;多继承中的虚函数表 …

内网搭建mysql8.0并搭建主从复制详细教程!!!

一、安装mysql 1.1 mysql下载链接&#xff1a; https://downloads.mysql.com/archives/community/ 1.2 解压包并创建相应的数据目录 tar -xvf mysql-8.2.0-linux-glibc2.28-x86_64.tar.xz -C /usr/local cd /usr/local/ mv mysql-8.2.0-linux-glibc2.28-x86_64/ mysql mkdir…

Python绘图-9饼图(上)

饼图&#xff08;Pie Chart&#xff09;是一种用于表示数据分类和相对大小的可视化图形。在饼图中&#xff0c;整个圆形代表数据的总和&#xff0c;而圆形内的各个扇形则代表不同的分类或类别&#xff0c;扇形的面积大小表示该类别在整体中所占的比例。饼图通常用于展示数据的分…

Window部署Jaeger

参考&#xff1a;windows安装使用jaeger链路追踪_windows安装jaeger-CSDN博客 下载&#xff1a;Releases jaegertracing/jaeger GitHub Jaeger – Download Jaeger 目录 1、安装nssm 2、安装运行 elasticsearch 3、安装运行 3.1部署JaegerAgent 3.2部署JaegerCollec…

【全志D1-H 哪吒开发板】Debian系统安装调教和点灯指南

全志D1-H开发板【哪吒】使用Deabian系统入门 特别说明&#xff1a; 因为涉及到操作较多&#xff0c;博文可能会导致格式丢失 其中内容&#xff0c;会根据后续使用做优化调整 目录&#xff1a; 参考资料固件烧录启动调教点灯问题 〇、参考资料 官方资料 开发板-D1开发板【…

C++:函数模板整理

函数模板: 找到函数相同的实现思路&#xff0c;区别于函数的参数类型。 使用函数模板使得函数可容纳不同类型的参数实现函数功能&#xff0c;而不是当类型不同时便编译大量类型不同的函数&#xff0c;产生大量重复代码和内存占用 函数模板格式&#xff1a; template<typ…

[Vulnhub]靶场 Red

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 …

ARM64汇编02 - 寄存器与指令基本格式

最近的文章可能会有较多修改&#xff0c;请关注博客哦 异常级别 ARMv8处理器支持4种异常等级&#xff08;Exception Level&#xff0c;EL&#xff09;。 EL0 为非特权模式&#xff0c;用于运行应用程序&#xff0c;其他资源访问受限&#xff0c;权限不够。 EL1 为特权模式&…

【王道操作系统】ch1计算机系统概述-06虚拟机

文章目录 【王道操作系统】ch1计算机系统概述-06虚拟机01传统计算机02虚拟机的基本概念&#xff08;1&#xff09;第一类虚拟机管理程序&#xff08;2&#xff09; 第二类虚拟机管理程序&#xff08;3&#xff09; 两类虚拟机管理程序的对比 【王道操作系统】ch1计算机系统概述…

效果炸裂、刷爆各大视频网站的EMO到底是怎么做到的?

文章链接&#xff1a;https://arxiv.org/abs/2402.17485 今天分享的工作是刷爆各大视频平台的EMO的背后的工作原理。提出的初衷是着手解决增强发言者的头部特写视频生成中的现实感和表现力的挑战&#xff0c;重点关注音频提示与面部动作之间的动态和微妙关系。传统技术具有局限…

【HarmonyOS】鸿蒙开发之Stage模型-UIAbility的启动模式——第4.4章

UIAbi lity的启动模式简介 一共有四种:singleton,standard,specified,multion。在项目目录的:src/main/module.json5。默认开启模式为singleton(单例模式)。如下图 singleton&#xff08;单实例模式&#xff09;启动模式 每个UIAbility只存在唯一实例。任务列表中只会存在一…

测试管理进阶 | 量力而行:避免成为替罪羊

职场中,我们常常面临是否帮助他人的抉择。尽管善良是美德,但过度的好人卡可能会给自己带来麻烦。本文将探讨如何在职场中量力而行,避免成为替罪羊,以及如何保持高效和合理的职责划分。 我们在工作中常常会遇到一些需要帮助他人的情况,作为团队的一员,我们希望能够积极地协…

六、继承(一)

1 继承的引入 以往我们想分别实现描述学生、老师的类&#xff0c;可能会这样子做&#xff1a; class Student {string _name;string _number;int _tel;int id;string _address;int _age; }; class Teacher {string _name;int _level;int _tel;int id;string _address;int _ag…

【归并排序】 详细解析 动图演示 逐图解析 洛谷P1177【模板】排序 sort【快速排序】

文章目录 归并排序1.归并排序的复杂度分析2.细节解释3.归并排序动图演示3(1) 我们的拆分过程如下↓ 4.code↓ 洛谷P1177【模板】排序数据规模与约定code&#xff08;归并排序&#xff09;↓code&#xff08;sort排序【快速排序】&#xff09; 完结撒花(&#xffe3;▽&#xff…

数据中台:数字中国战略关键技术实施

这里写目录标题 前言为何要建设数据中台数据中台建设痛点数据中台学习资料聚焦前沿&#xff0c;方法论体系更新与时俱进&#xff0c;紧跟时代热点深入6大行业&#xff0c;提炼实践精华大咖推荐&#xff0c;数字化转型必备案头书 前言 在数字中国这一国家战略的牵引下&#xff0…

基于springboot+vue的响应式企业员工绩效考评系统(源码+论文)

文章目录 前言 一、功能设计 1 普通员工功能 2 主管功能 3 系统管理员功能 4 评分标准功能 5 PC端与手机端 6 制图 二、功能实现 普通员工 1普通员工登录 2公告板块 3日志板块 主管 1主管登录 2公告板块 3日志板块 4绩效评分板块 5个人信息板块 系统管理员…

在 Linux 环境下安装 Kibana

目录 一、Kibana 是什么 二、在 Linux 环境下安装 Kibana 1、下载安装包 2、解压 3、修改 Kibana的配置文件 config/kibana.yml 4、启动 5、浏览器登录 Kibana 6、测试查询 一、Kibana 是什么 Kibana 是通向 Elastic 产品集的窗口。 它可以在 Elasticsearch 中对数据进…

品牌推广的两种飞轮:非酋飞轮与欧皇飞轮

在品牌推广的世界里&#xff0c;存在着两种截然不同的飞轮效应&#xff0c;我们称之为“非酋飞轮”与“欧皇飞轮”。这两种飞轮象征着品牌发展的两种不同路径和策略&#xff0c;而迅腾文化则以其独特的“繁”的原则&#xff0c;巧妙地将这两种飞轮结合&#xff0c;助力品牌形成…

Linux安装JumpServer并结合内网穿透实现公网访问本地服务

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…