全部產品
Search
文件中心

Alibaba Cloud Service Mesh:使用Istio資源實現版本流量路由

更新時間:Dec 06, 2024

版本流量路由是指將流量按照比例路由到服務的不同版本,適用於灰階發布和A/B測試等情境。本文介紹如何使用Istio資源實現版本流量路由。

前提條件

步驟一:建立網關規則

網關規則(Gateway)定義了在網格出入口操作的負載平衡器,用於接收傳入或傳出的HTTP/TCP串連。下文介紹如何建立網關規則,並將其綁定到入口網關。

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇ASM網關 > 網關規則,然後單擊建立

  3. 建立頁面,進行以下配置,然後單擊建立

    關於配置項的詳情,請參見Gateway

    配置項

    說明

    基本資料

    配置命名空間default,網關規則的名稱bookinfo-gateway

    作用網關執行個體

    配置標籤名istio標籤值ingressgateway

    對外提供服務

    配置名稱http連接埠80協議HTTP服務*

    網關規則

    以上配置對應的網關規則YAML如下。

    展開查看網關規則YAML

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: bookinfo-gateway
      namespace: default
    spec:
      selector:
        istio: ingressgateway
      servers:
        - port:
            number: 80
            name: http
            protocol: HTTP
          hosts:
            - '*'
    

步驟二:建立虛擬服務

虛擬服務(VirtualService)定義流量路由規則和請求轉寄策略。建立虛擬服務後,您可以通過/productpage/static/login/logout/api/v1/products路徑訪問Bookinfo應用。

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇流量管理中心 > 虛擬服務,然後單擊建立

  3. 建立頁面,進行以下配置,然後單擊建立

    關於配置項的詳情,請參見Virtual Service

    配置項

    說明

    基本資料

    命名空間

    本樣本選擇default

    名稱

    自訂虛擬服務的名稱。

    作用範圍

    1. 開啟作用於指定網關規則開關,單擊請選擇網關規則

    2. 請選擇網關規則對話方塊,選中bookinfo-gateway,單擊添加表徵圖,然後單擊確定

    3. 關閉作用於所有Sidecar開關。

    所屬服務

    單擊選擇所屬網關服務網域名稱,在選擇所屬網關服務網域名稱對話方塊,選中*,單擊添加表徵圖,然後單擊確定

    HTTP路由

    路由名稱

    單擊HTTP路由,單擊添加路由,自訂路由名稱

    請求匹配規則

    重複單擊添加請求匹配規則,配置如下五條規則:

    • 開啟匹配請求的URI開關,配置匹配方式精確匹配內容/productpage

    • 開啟匹配請求的URI開關,配置匹配方式首碼匹配內容/static

    • 開啟匹配請求的URI開關,配置匹配方式精確匹配內容/login

    • 開啟匹配請求的URI開關,配置匹配方式精確匹配內容/logout

    • 開啟匹配請求的URI開關,配置匹配方式首碼匹配內容/api/v1/products

    路由目的地

    單擊添加路由目的地,配置服務名稱productpage連接埠9080

    建立虛擬服務.png

    以上配置對應的虛擬服務YAML如下。

    展開查看虛擬服務YAML

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: vs-demo
      namespace: default
    spec:
      hosts:
        - '*'
      http:
        - name: gw-to-productage
          match:
            - uri:
                exact: /productpage
            - uri:
                prefix: /static
            - uri:
                exact: /login
            - uri:
                exact: /logout
            - uri:
                prefix: /api/v1/products
          route:
            - destination:
                host: productpage
                port:
                  number: 9080
      gateways:
        - bookinfo-gateway
    

步驟三:訪問Bookinfo應用

  1. 擷取入口網關地址。

    方式一:通過ASM控制台

    1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

    2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇ASM網關 > 入口網關

    3. 入口網關頁面,擷取服務地址。

    方式二:通過Container Service管理主控台

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇網路 > 服務

    3. 服務頁面頂部,選擇命名空間istio-system,在External IP列,查看istio-ingressgateway對應的80連接埠的IP地址。

  2. 在瀏覽器地址欄,輸入http://{入口網關服務的IP地址}/productpage,持續重新整理頁面10次,訪問Bookinfo應用。

    每次重新整理都會訪問reviews服務的v1、v2和v3版本。您可以看到reviews服務三個版本出現的比例接近1:1:1。

    yuque_diagram

步驟四:建立版本路由規則

  1. 建立目標規則,按版本給reviews服務進行分組,分為v1、v2、v3子集。

    1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

    2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇流量管理中心 > 目標規則,然後單擊建立

    3. 建立頁面,進行以下配置,然後單擊建立

      關於配置項的詳情,請參見Destination Rule

      配置項

      說明

      基本資料

      配置命名空間default,自訂目標規則的名稱,配置服務名稱reviews

      服務版本(子集)

      單擊服務版本(子集),重複單擊添加服務版本(子集),配置如下三個版本。

      • 版本1:配置版本名稱v1,單擊添加標籤,配置標籤名version標籤值v1

      • 版本2:配置版本名稱v2,單擊添加標籤,配置標籤名version標籤值v2

      • 版本3:配置版本名稱v3,單擊添加標籤,配置標籤名version標籤值v3

      目標規則

      以上配置對應的目標規則YAML如下。

      展開查看目標規則YAML

      apiVersion: networking.istio.io/v1beta1
      kind: DestinationRule
      metadata:
        name: reviews
        namespace: default
        labels: {}
      spec:
        host: reviews
        subsets:
          - name: v1
            labels:
              version: v1
          - name: v2
            labels:
              version: v2
          - name: v3
            labels:
              version: v3
      
  2. 建立虛擬服務,將10%流量路由到reviews服務的v1版本,40%流量路由到reviews服務的v2版本,50%流量路由到reviews服務的v3版本。

    1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

    2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇流量管理中心 > 虛擬服務,然後單擊建立

    3. 建立頁面,進行以下配置,然後單擊建立

      配置項

      說明

      基本資料

      命名空間

      本樣本選擇default

      名稱

      自訂虛擬服務的名稱。

      作用範圍

      開啟作用於所有Sidecar開關。

      所屬服務

      單擊添加所屬服務,在添加所屬服務對話方塊,配置命名空間default,在添加所屬服務地區,選中reviews服務,單擊添加表徵圖,然後單擊確定

      HTTP路由

      路由名稱

      單擊HTTP路由,單擊添加路由,自訂路由名稱

      路由目的地

      重複單擊添加路由目的地,配置如下三個路由目的地。

      • 配置服務名稱reviews,版本為v1,權重為10

      • 配置服務名稱reviews版本v2權重40

      • 配置服務名稱reviews版本v3權重50

      虛擬服務2

      以上配置對應的虛擬服務YAML如下。

      展開查看虛擬服務YAML

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: reviews
        namespace: default
      spec:
        hosts:
          - reviews.default.svc.cluster.local
        http:
          - name: route
            route:
              - destination:
                  host: reviews
                  subset: v1
                weight: 10
              - destination:
                  host: reviews
                  subset: v2
                weight: 40
              - destination:
                  host: reviews
                  subset: v3
                weight: 50

步驟五:驗證版本流量路由是否成功

在瀏覽器地址欄,輸入http://{入口網關服務的IP地址}/productpage,持續重新整理頁面10次。

若reviews服務的v1、v2、v3三個版本出現的比例接近1:4:5,表明版本流量路由成功。