全部產品
Search
文件中心

Alibaba Cloud Service Mesh:自建Istio IngressGateway如何遷移至ASM網關

更新時間:Jun 30, 2024

本文介紹自建Istio IngressGateway如何遷移至ASM網關。

方案示意圖

遷移方案

步驟一:在ASM執行個體中建立入口網關

關於建立入口網關的具體操作,請參見建立入口網關

建立入口網關時,請注意以下幾點:

  • 命名ASM網關時,請不要與已有網關重名。您可以在命名時加上-asm尾碼,與已有網關進行區分,例如命名為ingressgateway-asm。

  • 建立入口網關步驟3,選擇部署叢集為原有的Istio ingressGateway所在的Kubernetes叢集。

  • 將網域名稱解析更改為新的ASM Gateway地址。若不能切換網域名稱對應的DNS解析,或需要通過權重方式漸進地遷移流量,遷移時建立的ASM網關需要複用原有網關的CLB執行個體(如上圖所示,右側的ASM網關採用複用原有網關的CLB執行個體方式)。

    說明

    通過Service Loadbalancer型別宣告建立的CLB複用請參考本文FAQ。

展開查看ASM網關複用已有CLB的相關說明。

在ASM執行個體下採用IstioGateway YAML方式建立ASM網關時,若需要複用已有的CLB,請注意以下幾點:

  • 編輯ASM網關對應的IstioGateway YAML,在serviceAnnotations下設定CLB相關配置。

  • 複用要遷移的Istio ingressGateway已有的CLB執行個體,對應Annotation為service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id

  • 設定不覆蓋CLB已有監聽,對應Annotation為service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: 'false'

  • 複用CLB已有的虛擬伺服器組時,如果service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port有多個連接埠及虛擬伺服器組的組合,可以使用英文半形逗號(,)分隔,例如"${YOUR_VGROUP_ID_1}:80, ${YOUR_VGROUP_ID_2}:443"

  • 確認CLB的負載平衡調度演算法已調整為WRR(加權輪詢)。根據實際需求,調整ASM網關執行個體在CLB下的權重。將權重設定為0,表示CLB不會轉寄流量,可用於前期ASM網關下對應路由配置還未Ready的情況,或者遭遇異常的情況進行摘流。

serviceAnnotations YAML樣本如下:

serviceAnnotations:
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "lb-xxxxx"  //lb-xxxxx請替換為您通過負載平衡管理主控台建立的CLB執行個體ID。
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: 'false'  //需要設定為false, 因為IstioGateway預設是覆蓋監聽的方式。
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: "${YOUR_VGROUP_ID}:80"   //${YOUR_VGROUP_ID}請替換為您的虛擬伺服器。
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "60"   //設定Service流量權重,設定為0,表示不再接受流量。

步驟二:遷移相關配置

  • 遷移Gateway時,selcetor.istio需修改為實際的ASM網關名稱。YAML樣本如下:

    spec:
      selector:
        istio: ingressgateway-asm
  • VirtualService、DestinationRule等其他配置隨即轉移即可。

步驟三:遷移流量

通過修改serviceAnnotations,可以切換新舊兩個網關的權重。對應ASM網關執行個體的權重可以先設定為較小值(例如10%),觀察一段時間的線上請求是否符合預期,然後逐步增加ASM網關執行個體的權重,直到全部切換到ASM網關。

權重調整方式如下:

  • 修改原Istio ingressGateway的權重:在對應Service中添加Annotation,例如service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "90"

  • 修改ASM網關的執行個體的權重:在對應istiogateway下添加serviceAnnotaions,例如service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "10"

FAQ:如果自建網關的CLB是跟隨Service自動建立的,如何更改為複用CLB?

  1. 前往CLB控制台,找到相關的CLB執行個體。刪除對應CLB上的這兩個特殊標籤:kubernetes.do.not.deleteack.aliyun.com

  2. 給對應的網關Service添加如下Annotation:

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "false"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${對應CLB id}
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: ${虛擬伺服器組ID}:${連接埠}
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "100"