全部產品
Search
文件中心

Alibaba Cloud Service Mesh:多叢集情境下啟用ASM本地叢集內流量保持功能

更新時間:Jun 30, 2024

當使用ASM管理多個叢集時,一個服務的工作負載可能會同時部署在多個叢集中。訪問服務時,流量預設在多叢集之間進行負載平衡。若您希望訪問服務時,流量只保持在本叢集中,可以使用叢集內流量保持功能。以Bookinfo應用為例,本文介紹如何在多叢集情境下啟用ASM本地叢集內流量保持功能。

前提條件

  • 已在同一VPC下建立兩個ACK叢集(本文以m1c1和m1c2為例)。具體操作,請參見建立ACK專有叢集

  • 已建立一個ASM執行個體,且版本為1.15.3.101及以上(本文以mesh1為例)。具體操作,請參見建立ASM執行個體

準備工作

步驟一:配置叢集的互訪聯通性

(可選)修改叢集的安全性群組名稱

將兩個叢集對應的安全性群組名稱修改為易於辨識的名稱,方便後續配置。本樣本安全性群組名稱配置為m1c1-sgm1c2-sg

展開查看如何修改叢集的安全性群組名稱

  1. 登入ECS控制台,然後在左側導覽列,選擇網路與安全 > 安全性群組

  2. 在頂部功能表列,選擇目標ECS執行個體所在的地區。

  3. 安全性群組頁面,將滑鼠懸浮至目標安全性群組名稱,單擊image表徵圖,輸入名稱,然後單擊確定

添加安全性群組訪問規則

為兩個叢集添加安全性群組訪問規則,使叢集可以相互訪問。在m1c1-sg安全性群組配置介面,添加以m1c2-sg為授權對象的訪問規則;在m1c2-sg安全性群組規則配置介面,添加以m1c1-sg為授權對象的訪問規則。具體操作,請參見添加安全性群組規則

圖 1. m1c1-sg安全性群組配置樣本圖11

步驟二:添加叢集到ASM執行個體並部署叢集的入口網關

將兩個叢集添加到ASM執行個體後,兩個叢集已實現訪問互連,因此只需為一個叢集部署入口網關即可。

  1. 將兩個叢集添加到ASM執行個體。具體操作,請參見添加叢集到ASM執行個體

  2. 為m1c1叢集部署入口網關。具體操作,請參見建立入口網關

步驟三:在兩個叢集中分別部署Bookinfo應用

本文以在兩個叢集中分別部署Bookinfo應用為例,驗證ASM叢集內流量保持功能。兩個叢集中服務的區別為m1c1中Reviews組件為v1版本,m1c2中Reviews組件為v2版本,其他保持一致。

  1. 使用bookinfo-with-reviews-v1.yaml,在m1c1中部署套件含v1版本的Reviews Deployment的Bookinfo應用。具體操作,請參見在ASM執行個體關聯的叢集中部署應用

    v1版本的Reviews Deployment在網頁的書評地區,將不展示星形評分。

  2. 使用bookinfo-with-reviews-v2.yaml,在m1c2中部署套件含v2版本的Reviews Deployment的Bookinfo應用。

    v2版本的Reviews Deployment在網頁的書評地區,將以黑白五角星的形式展示評分。

步驟四:在ASM中建立網關規則、虛擬服務和目標規則

  1. 使用以下YAML,在ASM執行個體的default命名空間下建立網關規則。具體操作,請參見管理網關規則

    展開查看網關規則YAML

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: bookinfo-gateway
    spec:
      selector:
        istio: ingressgateway
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"
  2. 使用以下YAML,在ASM執行個體的default命名空間下建立虛擬服務。具體操作,請參見管理虛擬服務

    展開查看虛擬服務YAML

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: bookinfo-cluster-local
    spec:
      hosts:
      - "*"
      gateways:
      - bookinfo-gateway
      http:
      - match:
        - uri:
            exact: /productpage1
        rewrite:
          uri: /productpage
        route:
        - destination:
            host: productpage
            port:
              number: 9080
            subset: m1c1
      - match:
        - uri:
            exact: /productpage2
        rewrite:
          uri: /productpage
        route:
        - destination:
            host: productpage
            port:
              number: 9080
            subset: m1c2
      - match:
        - uri:
            prefix: /static
        - uri:
            exact: /login
        - uri:
            exact: /logout
        - uri:
            prefix: /api/v1/products
        route:
        - destination:
            host: productpage
            port:
              number: 9080
  3. 使用以下YAML,在ASM執行個體的default命名空間下建立目標規則。具體操作,請參見管理目標規則

    展開查看目標規則YAML

    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:
      name: productpage-cluster-local
    spec:
      host: productpage
      subsets:
      - name: m1c1
        labels:
          cluster: m1c1
      - name: m1c2
        labels:
          cluster: m1c2
  4. 在瀏覽器訪問http://{入口網關IP}/productpage1http://{入口網關ip}/productpage2,並重新整理網頁。

    關於如何查看入口網關IP,請參見建立入口網關

    若書評地區的星形評分交替出現,表明Bookinfo應用部署成功。訪問productpage頁面

操作步驟

下文以按照服務等級開啟叢集內流量保持功能為例,將請求Reviews服務的流量保持在本叢集。關於按照全域或命名空間開啟叢集內流量保持功能的具體操作,請參見相關操作

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

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇網格執行個體 > 基本資料

  3. 基本資料頁面的配置資訊地區,單擊叢集內流量保持右側的編輯

    配置叢集內流量保持

  4. 配置叢集內流量保持服務對話方塊,開啟開啟保持叢集內流量的能力開關,選中部分服務生效,然後單擊選擇服務

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

    添加服務

  6. 配置完成後,在配置叢集內流量保持服務對話方塊,單擊確定

    配置叢集內流量保持服務

    配置資訊地區,叢集內流量保持右側顯示已配置,表明叢集內流量保持功能已開啟。

  7. 驗證叢集內流量保持功能是否生效。

    1. 在瀏覽器訪問http://{入口網關IP}/productpage1,並重新整理網頁。

      您可以看到書評地區始終不顯示評分。驗證流量保持-1

    2. 在瀏覽器訪問http://{入口網關IP}/productpage2,並重新整理網頁。

      您可以看到書評地區始終只顯示包含黑白星形評分。驗證叢集內流量保持-2

    以上結果表明叢集內流量保持功能生效。

結果分析

叢集內流量保持功能開啟前後,網格中流量的調用鏈路示意圖如下。網格中流量的調用鏈路分析

類型

說明

未開啟叢集內流量保持功能

在Bookinfo應用中,Productpage組件會調用Reviews服務以擷取書評資訊。在瀏覽器訪問http://{入口網關IP}/productpage1時,會訪問m1c1叢集中的Productpage;在瀏覽器訪問http://{入口網關IP}/productpage2時,會訪問m1c2叢集中的Productpage。

在m1c1和m1c2兩個叢集中都存在Reviews服務的工作負載。預設情況下,即使訪問某個特定叢集(例如m1c1叢集中的Productpage),對Reviews服務的請求也會在兩個叢集之間進行負載平衡。您可以在Productpage頁面的書評地區交替看到星形評分資訊。

已開啟叢集內流量保持功能

訪問某個特定叢集時(例如m1c1叢集中的Productpage),對Reviews服務的請求不會在兩個叢集之間進行負載平衡。您可以看到在Productpage頁面的書評地區始終不顯示評分,不會出現交替星形評分資訊的情況。

重要

流量保持功能開啟後,如果m1c1叢集中的Reviews-v1因故障等原因下線,Productpage無法通過訪問m1c2叢集中的Reviews-v2來提供服務。

說明

如果您為一個服務開啟了叢集內流量保持功能,當其它服務的工作負載訪問此服務時,將只能訪問到該服務在同叢集內的端點。即使該服務在同叢集內的端點不可用,訪問該服務的流量目標也不會降級到該服務在其它叢集的端點。

如果您希望為服務實現叢集內流量保持的效果,同時實現流量降級,請參考基於流量規則配置實現流量泳道和流量降級,使用流量規則為不同叢集中的服務建立流量泳道並實現流量降級。

相關操作

按照全域開啟叢集內流量保持功能

  1. 基本資料頁面的配置資訊地區,單擊叢集內流量保持右側的編輯

  2. 配置叢集內流量保持服務對話方塊,開啟開啟保持叢集內流量的能力開關,選中全部服務生效,然後單擊確定

    開啟後,叢集的流量都將保持在本叢集內。

按照命名空間開啟叢集內流量保持功能

  1. 基本資料頁面的配置資訊地區,單擊叢集內流量保持右側的編輯

  2. 配置叢集內流量保持服務對話方塊,開啟開啟保持叢集內流量的能力開關,選中部分服務生效,然後單擊選擇服務

  3. 添加服務對話方塊,選中命名空間,在選擇服務地區,選中目標命名空間,單擊添加表徵圖,然後單擊確定

  4. 配置叢集內流量保持服務對話方塊,單擊確定

    開啟後,訪問目標命名空間下服務的流量都將保持在本叢集內。

    按命名空間開啟