【了解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.pswp.cn/news/718726.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718726.shtml
英文地址,請注明出處:http://en.pswp.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;多繼承中的虛函數表 …

“編碼迷宮中的探險者:探索程序員職業賽道的無限可能“

在這個信息技術飛速發展的時代&#xff0c;程序員的職業賽道就像是一座錯綜復雜的迷宮&#xff0c;它既充滿了挑戰&#xff0c;又蘊藏著無限的機遇。這座迷宮中&#xff0c;有前端的美麗花園&#xff0c;后端的黑暗洞穴&#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;扇形的面積大小表示該類別在整體中所占的比例。餅圖通常用于展示數據的分…

FW, IPS, IDS

文章目錄 FW (Firewall, 防火墻)IPS (Intrusion Prevention System, 入侵防御系統)IDS (Intrusion Detection System, 入侵檢測系統)IDS vs. FWIPS FW (Firewall, 防火墻) 產品定位&#xff1a; 防火墻的主要作用是進行網絡訪問控制。它充當網絡的門衛&#xff0c;控制進入和離…

《人間值得》讀書筆記

人的一生說短不短&#xff0c;說長不長。蕓蕓眾生&#xff0c;為了生活努力的掙扎&#xff0c;太少的人能衣食無憂&#xff0c;所以我們每天為了碎銀幾兩&#xff0c;為了生活奔波。 《人間值得》的主人公是一個90歲的老奶奶&#xff0c;她的生活經歷很豐富&#xff0c;她的人…

ObjectProvider學習

簡介 ObjectProvider 是 Spring Framework 5.0 之后引入的一個新接口&#xff0c;它提供了一個靈活的方式來訪問由 Spring 容器管理的 Bean。ObjectProvider 提供了一種更加類型安全的方式來查找和注入依賴項&#xff0c;同時還支持 Null 值的處理以及延遲初始化。 ObjectProv…

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只存在唯一實例。任務列表中只會存在一…

測試管理進階 | 量力而行:避免成為替罪羊

職場中,我們常常面臨是否幫助他人的抉擇。盡管善良是美德,但過度的好人卡可能會給自己帶來麻煩。本文將探討如何在職場中量力而行,避免成為替罪羊,以及如何保持高效和合理的職責劃分。 我們在工作中常常會遇到一些需要幫助他人的情況,作為團隊的一員,我們希望能夠積極地協…

Linux運維_Bash腳本_編譯安裝libGD-2.3.3

Linux運維_Bash腳本_編譯安裝libGD-2.3.3 Bash (Bourne Again Shell) 是一個解釋器&#xff0c;負責處理 Unix 系統命令行上的命令。它是由 Brian Fox 編寫的免費軟件&#xff0c;并于 1989 年發布的免費軟件&#xff0c;作為 Sh (Bourne Shell) 的替代品。 您可以在 Linux 和…

六、繼承(一)

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…