Spring Cloud Gateway應(yīng)用路由
EDAS使用Java Agent技術(shù)以無(wú)侵入的方式增強(qiáng)托管的Spring Cloud Gateway應(yīng)用,支持動(dòng)態(tài)路由和插件配置能力。本文介紹如何在EDAS中進(jìn)行Spring Cloud Gateway的常見(jiàn)兩類配置:路由(Route)和插件(GatewayFilter)。
使用限制
支持Spring Cloud Gateway版本范圍:2.x、3.x。由于4.x版本依賴Spring Boot 3.0等較高版本的特性,因此暫不支持。
支持應(yīng)用類型:Spring Cloud Gateway。
注意事項(xiàng)
功能發(fā)布于2023-09-27,如果應(yīng)用部署早于該日期,需重啟應(yīng)用觸發(fā)拉取最新Java Agent以支持該特性。如果Spring Cloud Gateway應(yīng)用部署后,應(yīng)用詳情內(nèi)仍未出現(xiàn)應(yīng)用網(wǎng)關(guān)相關(guān)菜單,可能和應(yīng)用掛載的探針版本有關(guān),請(qǐng)加入釘群(釘群號(hào):23197114)聯(lián)系技術(shù)專家咨詢處理。
EDAS在不影響應(yīng)用原本的邏輯前提下,對(duì)Spring Cloud Gateway進(jìn)行增強(qiáng),即應(yīng)用本身的路由、斷言、插件、自定義插件等配置與該功能配置不會(huì)造成沖突。
創(chuàng)建路由
登錄EDAS控制臺(tái)。
在左側(cè)導(dǎo)航欄,單擊 ,在頂部菜單欄選擇地域,并在頁(yè)面上方選擇微服務(wù)空間。
在應(yīng)用列表頁(yè)面,選擇一個(gè)Spring Cloud Gateway應(yīng)用,單擊應(yīng)用名稱進(jìn)入應(yīng)用詳情頁(yè),然后在左側(cè)導(dǎo)航欄,單擊應(yīng)用網(wǎng)關(guān) > 路由管理。
方式一
在路由管理頁(yè)面,單擊創(chuàng)建,在創(chuàng)建路由面板,完成相關(guān)配置,然后單擊確認(rèn)。
配置項(xiàng)
描述
路由ID
自定義路由ID。EDAS會(huì)強(qiáng)制添加
r-
前綴,避免與應(yīng)用原有的路由ID發(fā)生沖突。URI
網(wǎng)關(guān)上游服務(wù)的URI。支持
http://
、https://
、lb://
三種前綴的URI,其中lb://
代表服務(wù)發(fā)現(xiàn)場(chǎng)景。說(shuō)明URI配置
lb://svcName
服務(wù)發(fā)現(xiàn)類型時(shí),要求Spring Cloud Gateway應(yīng)用內(nèi)引用相關(guān)的服務(wù)發(fā)現(xiàn)依賴,并且確保svcName與當(dāng)前網(wǎng)關(guān)處于同一微服務(wù)空間內(nèi)。路由優(yōu)先級(jí)
當(dāng)多個(gè)路由存在沖突時(shí),路由優(yōu)先級(jí)數(shù)值更小的優(yōu)先匹配。
請(qǐng)求路徑
支持多種匹配模式。
精確匹配:
/red
。占位符匹配 :
/red/{blue}
。模糊匹配 :
/red/**
。
單擊+添加參數(shù)可添加多條路徑。
請(qǐng)求域名
設(shè)置匹配HTTP請(qǐng)求頭中的Host參數(shù)。不填表示匹配所有Host、單擊+添加參數(shù)添加。
請(qǐng)求方法
設(shè)置匹配HTTP請(qǐng)求中的Method參數(shù)。不填表示匹配所有參數(shù),支持選擇多種HTTP方法。
請(qǐng)求Header
設(shè)置匹配HTTP請(qǐng)求中的Header參數(shù)。相同匹配規(guī)則時(shí),參數(shù)越多優(yōu)先級(jí)越高。單擊+添加參數(shù)添加。
請(qǐng)求Cookie
設(shè)置匹配HTTP請(qǐng)求中的Cookie參數(shù),相同匹配規(guī)則時(shí),參數(shù)越多優(yōu)先級(jí)越高。單擊+添加參數(shù)添加。
請(qǐng)求Query
設(shè)置匹配HTTP請(qǐng)求中的Query參數(shù),相同匹配規(guī)則時(shí),參數(shù)越多優(yōu)先級(jí)越高。單擊+添加參數(shù)添加。
路由截取級(jí)數(shù)
刪除指定級(jí)數(shù)的路徑前綴。例如,級(jí)數(shù)為1時(shí),
/red/blue
請(qǐng)求將會(huì)被重寫(xiě)為/blue
,對(duì)應(yīng)生成一個(gè)StripPrefix插件。元數(shù)據(jù)
路由元數(shù)據(jù)是一個(gè)擴(kuò)展字段。例如,配置
{"response-timeout": 2000,"connect-timeout": 2000}
,控制請(qǐng)求超時(shí)時(shí)間和連接超時(shí)時(shí)間,在自定義插件中可以獲取元數(shù)據(jù)配置信息。方式二
在路由管理頁(yè)面,單擊使用YAML創(chuàng)建。
使用YAML創(chuàng)建時(shí),YAML定義的格式為Spring Cloud Gateway標(biāo)準(zhǔn)的定義格式,支持批量導(dǎo)入,文本大小限制為512 KB。您可以選擇使用該功能將靜態(tài)文件中的路由配置遷移至EDAS,遷移完成后,可以刪除本地的配置文件,實(shí)現(xiàn)路由的動(dòng)態(tài)配置管理。
編輯路由
登錄EDAS控制臺(tái)。
在左側(cè)導(dǎo)航欄,單擊 ,在頂部菜單欄選擇地域,并在頁(yè)面上方選擇微服務(wù)空間。
在應(yīng)用列表頁(yè)面,選擇一個(gè)Spring Cloud Gateway應(yīng)用,單擊應(yīng)用名稱進(jìn)入應(yīng)用詳情頁(yè),然后在左側(cè)導(dǎo)航欄,單擊應(yīng)用網(wǎng)關(guān) > 路由管理。
在路由管理頁(yè)面,單擊路由操作列的編輯,可修改已創(chuàng)建好的Spring Cloud Gateway路由。
配置插件
登錄EDAS控制臺(tái)。
在左側(cè)導(dǎo)航欄,單擊 ,在頂部菜單欄選擇地域,并在頁(yè)面上方選擇微服務(wù)空間。
在應(yīng)用列表頁(yè)面,選擇一個(gè)Spring Cloud Gateway應(yīng)用,單擊應(yīng)用名稱進(jìn)入應(yīng)用詳情頁(yè),然后在左側(cè)導(dǎo)航欄,單擊應(yīng)用網(wǎng)關(guān) > 路由管理。
在路由列表頁(yè)面,選擇一個(gè)路由,單擊操作列的綁定插件,在插件配置頁(yè)簽,單擊添加路由插件。
EDAS支持Spring Cloud Gateway大多數(shù)已有的插件。插件功能列表如下表所示:
插件名
描述
AddRequestHeader
添加請(qǐng)求頭。
AddRequestParameter
添加請(qǐng)求參數(shù)。
AddResponseHeader
添加響應(yīng)頭。
SetRequestHeader
修改請(qǐng)求頭。
SetResponseHeader
修改響應(yīng)頭。
SetStatus
修改響應(yīng)碼。
SetPath
修改請(qǐng)求路徑。
MapRequestHeader
請(qǐng)求頭參數(shù)映射。
PrefixPath
為請(qǐng)求路徑添加前綴。
StripPrefix
刪除請(qǐng)求路徑前綴。
RemoveRequestHeader
刪除請(qǐng)求頭。
RemoveResponseHeader
刪除響應(yīng)頭。
RemoveRequestParameter
刪除請(qǐng)求參數(shù)。
DedupeResponseHeader
刪除響應(yīng)的重復(fù)頭。
PreserveHostHeader
保留請(qǐng)求的域名屬性。
RedirectTo
重定向。
RequestSize
請(qǐng)求大小限制。
RequestHeaderSize
請(qǐng)求頭大小限制。
RewritePath
重寫(xiě)請(qǐng)求路徑。
RewriteResponseHeader
重寫(xiě)響應(yīng)頭。
全局插件
登錄EDAS控制臺(tái)。
在左側(cè)導(dǎo)航欄,單擊 ,在頂部菜單欄選擇地域,并在頁(yè)面上方選擇微服務(wù)空間。
在應(yīng)用列表頁(yè)面,選擇一個(gè)Spring Cloud Gateway應(yīng)用,單擊應(yīng)用名稱進(jìn)入應(yīng)用詳情頁(yè),然后在左側(cè)導(dǎo)航欄,單擊應(yīng)用網(wǎng)關(guān) > 全局插件。
在全局插件詳情頁(yè)面,單擊添加全局插件或使用YAML創(chuàng)建添加。
全局插件和路由插件的交互一致,當(dāng)全局插件配置后,會(huì)對(duì)當(dāng)前網(wǎng)關(guān)實(shí)例全局開(kāi)啟。全局插件支持狀態(tài)管理,不希望全局插件產(chǎn)生作用時(shí),可以對(duì)其禁用。
結(jié)果驗(yàn)證
配置完成后,可通過(guò)請(qǐng)求應(yīng)用的路由路徑驗(yàn)證該功能。如果請(qǐng)求可以通過(guò)網(wǎng)關(guān)正常轉(zhuǎn)發(fā),且插件正常,表明路由和插件配置成功。