我想通過Istio虛擬服務路由到我的微服務。當我使用基于@RequestParam的前綴或精確輸入時,對于/api/cities/{city_id}/tours,它會拋出404,但其余部分作業正常。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
元資料:
名稱: app
namespace: nsapp
規格:
門路:
- app-gateway
主機:
- app.*.*.*
http:/span>
- match:
- uri:
prefix: "/api/cities/{city_id}/tours"
- uri:
prefix: "/api/countries/{country_id}/cities"
- uri:
prefix: "/api/countries"
路線:
- 目的地:
主機: appservice
埠:
號碼: 9090
uj5u.com熱心網友回復:
前綴匹配匹配字面字串。
/api/countries也匹配你打算用/api/countries/{country_id}/cities
/api/cities/{city_id}/tours然而,并不作業。
對于更復雜的匹配,你可以使用一個精確的和regex,如VirtualService檔案中所述。
也許像這樣(未經測驗):
exact: "/api/countries"/span>
regex: "/api/countries/[^/]*/cities"
uj5u.com熱心網友回復:
這個片段
- uri:
prefix: "/api/cities/{city_id}/tours"
- uri:
prefix: "/api/countries/{country_id}/cities"
將按字面意思理解。{city_id}和{country_id}將不會被替換成你的自定義ID。在這一點上,istio將尋找一個前綴,從字面上看是/api/cities/{city_id}/tours或/api/countries/{country_id}/cities,這并不存在(你得到404錯誤)。如果你想將運算式與你的自定義ID相匹配,你必須使用正則運算式。請看本檔案。在那里你可以找到關于StringMatch的能力的資訊。exact, prefix或者regex。你可以在istio中找到正則運算式的語法這里。
總結。
你應該把prefix改為regex,然后創建你自己的正則運算式來匹配你的自定義ID。例子:
- uri:
regex: "/api/cities/[a-zA-Z] /tours"
- uri:
regex: "/api/countries/[a-zA-Z] /cities"
在我的例子中,ID中只有字母(大寫或小寫)。在這里,你必須根據本檔案創建你自己的正則運算式。
uj5u.com熱心網友回復:
方法1:-
我嘗試了下面的方法,發現它是有效的,添加了我測驗過的解決方案,并且是有效的。基本上,執行的步驟是:-
去掉了前綴。"/api/countries/{country_id}/cities",因為/api/countries/是兩個API的共同字串,最終,它能夠分別路由到原始應用服務主機上的兩個API,與/api/cities一樣。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
元資料:
名稱: app
namespace: NSAP
規格:
門路:
- app-gateway
主機:
- app.*.*.*
http:/span>
- match:
- uri:
prefix: "/api/cities"/span>
- uri:/span>
prefix: "/api/countries"
路線:
- 目的地:
主機: appservice
埠:
號碼: 9090
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/308780.html
標籤:
上一篇:reauthenticateWithCredential出錯得到錯誤TypeError:credential._getReauthenticationResolver不是一個函式(firebase9)
下一篇:全面理解ES6模塊化編程
