第二十一章 九析帶你輕鬆完爆 service mesh - Istio 路由規則

系列文章: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 前言

        若是你對博客有任何疑問,請告訴我。1.png


2 邀約

        你能夠從 b 站搜索 「九析」,獲取免費的、更生動的視頻資料:clipboard2.png


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 這兩個單詞就完美的包含了上面兩個概念。

下面再接着看代碼,加深一下理解:clipboard3.png

        語法簡單解釋以下,大意也就是匹配 XX 規則就路由到 OO,若是不匹配規則就路由到 SY(有點 if...else... 的味道):

match...route destination.../ route destination ...

        固然這裏有一點須要澄清,就是匹配條件並不是強制,也就是說路由規則不必定非要有匹配項(match),僅有路由也是能夠的。

        翻看第二十章運行本人設計的用例,執行命令和執行結果以下截圖所示:clipboard4.png


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 路由規則。

相關文章
相關標籤/搜索