系列文章:html
總目錄索引:九析帶你輕鬆完爆 istio 服務網格系列教程程序員
目錄
web
1 前言正則表達式
2 邀約api
3 Routing Rule 語法tomcat
4 Routing Rule 優先級運維
5 Routing Rule 匹配規則/條件ide
5.1 基於 HttpMatchRequest測試
5.2 基於權重spa
6 流量操做(HTTPRoute)
1 前言
若是你對博客有任何疑問,請告訴我。
2 邀約
你能夠從 b 站搜索 「九析」,獲取免費的、更生動的視頻資料:
3 Routing Rule 語法
在上節中介紹了 Virtual Service 的概念,並運行了一個簡單的樣例,你們應該對 Virtual Service 有了一個大體的瞭解。
Virutal Service 中最重要的概念就是路由規則(Routing Rule),注意跟 Istio traffic management 中的另一個概念——目的地規則(Destination Rule)區分,前者是一個邏輯概念,然後者則跟 Virtual Service 同樣,是實際能夠部署到 K8S 上的 Istio 資源。
在解釋路由規則以前,這裏先舉一個例子:
又到了招聘的高峯期,HR 陸續招聘了一批校園畢業生。招聘結束後,這些畢業生要分配到具體的工做崗位。分配的規則以下:
1、986 學校畢業的學生分配到基礎平臺組
2、普通學校畢業的學生分配到交易平臺組
3、黑馬程序員畢業的學生分配到運維平臺組
上面的例子提到了兩個概念。一:匹配規則(或匹配條件);二:路由目的地。這其實也就是這節介紹的主角 Routing Rule,Routing Rule 這兩個單詞就完美的包含了上面兩個概念。
下面再接着看代碼,加深一下理解:
語法簡單解釋以下,大意也就是匹配 XX 規則就路由到 OO,若是不匹配規則就路由到 SY(有點 if...else... 的味道):
match...route destination.../ route destination ...
固然這裏有一點須要澄清,就是匹配條件並不是強制,也就是說路由規則不必定非要有匹配項(match),僅有路由也是能夠的。
翻看第二十章運行本人設計的用例,執行命令和執行結果以下截圖所示:
4 Routing Rule 優先級
路由規則從上到下按順序進行評估,其中 Virtual Service 定義的第一個路由規則具備最高優先級。固然這裏建議在每一個虛擬服務中提供默認的「無條件」或者基於權重(weight)的規則來做爲最後一個規則,以確保到虛擬服務的流量始終具備至少一條匹配的路由。
5 Routing Rule 匹配規則/條件
5.1 基於 HttpMatchRequest
匹配規則/條件從關鍵字 match 開始,針對某些匹配條件,能夠選擇使用精確值(exact),前綴(prefix)或正則表達式來選擇它們。 有關匹配條件字段及其可能值的完整列表可在 HTTPMatchRequest 找到。
http 匹配條件樣例資源文件以下,該樣例中指明請求 uri 在忽略大小寫的狀況下,前綴若是是 /ratings/v2/,而且 http header 中 end-user 字段的值爲 jason,就路由到命名空間爲 prod 的名稱爲 ratings 的服務去:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings-route
spec:
hosts:
- ratings.prod.svc.cluster.local
http:
- match:
- headers:
end-user:
exact: jason
uri:
prefix: "/ratings/v2/"
ignoreUriCase: true
route:
- destination:
host: ratings.prod.svc.cluster.local
5.2 基於權重
路由規則除了基於 HTTPMatchRequest 匹配以外,還能夠基於權重(weight),經過權重就能夠輕鬆完爆 A/B 測試和金絲雀(Canary)發佈了。權重設置以下所示:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: web-vs-svc
spec:
hosts:
- web-svc
http:
- route:
- destination:
host: httpd-svc
weight: 20
- destination:
host: tomcat-svc
weight: 80
6 流量操做(HTTPRoute)
能夠使用路由規則對流量作一些操做:
附加或者刪除標題
重寫 URL
爲路由目的地設置重試策略
有關流量操做的例子以下:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: web-vs-svc
spec:
hosts:
- web-svc
http:
- match:
- uri:
prefix: /index.html
rewrite:
uri: /index.html
route:
- destination:
host: tomcat-svc
有關流量操做的更多信息,能夠參考 HTTPRoute。
自此,九析帶你輕鬆完爆 Istio 路由規則。