全部產品
Search
文件中心

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

更新時間:Feb 19, 2025

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

方案示意圖

遷移方案

步驟一:將Istio網關所建立的CLB改為可複用

如果Istio網關對應的CLB是由Service自動建立的,則該CLB預設不可複用。為了實現在遷移過程中通過該SLB將流量按比例分配至Istio網關和ASM網關,則需要將其改為可複用。

  1. 前往CLB控制台,找到相關的CLB執行個體。點擊執行個體ID進入執行個體配置介面。

  2. 關閉執行個體的配置修改保護

  3. 刪除對應CLB上的這兩個特殊標籤:kubernetes.do.not.deleteack.aliyun.com

  4. 為Istio網關的Service添加如下Annotation:

# 當這個註解為false時,當前Service的連接埠變更將不會影響對應的CLB監聽。
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}:${連接埠},${虛擬伺服器組ID}:${連接埠}...
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "100"

樣本:

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "false"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: lb-bp1onpskfeceg********
# 虛擬伺服器組資訊可以通過CLB控制台獲得,進入執行個體後點擊“虛擬伺服器組”標籤頁
# 您需要將SLB所有的虛擬伺服器組全部列在下面的annotation中,格式為${虛擬服務組ID}:${連接埠}
# 多個值以,分割。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: rsp-bp1r4xk******:15021,rsp-bp1kaqd******:80,rsp-bp1jyz0******:443
# 在遷移開始之前,Istio網關的權重為100,全部流量經過Istio網關
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "100"

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

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

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

  • 參考ASM網關CRD說明,使用Yaml建立ASM網關

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

    • 您需要確保ASM網關的port列表以及targetPort與Istio網關相同

    • 參考步驟一:將Istio網關所建立的CLB改為可複用中的(4),通過CRD(參考CRD欄位說明)建立ASM網關。為了複用Istio網關的CLB並實現CLB切流,ASM網關的serviceAnnotation配置如下:

      # 當這個註解為true時,ACK會使用ASM網關的Service的連接埠來更新CLB的Listener。
      # 為了確保服務不中斷,請確保ASM網關暴露的連接埠和Istio網關一致。
      # 如果建立後出現流量異常,請將ASM網關上的這個註解改為false,並將Istio網關上的該註解改為true來恢複監聽配置。
      service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"
      service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: lb-bp1onpskfeceg********
      # 虛擬伺服器組資訊可以通過CLB控制台獲得,進入執行個體後點擊“虛擬伺服器組”標籤頁
      # 您需要將SLB所有的虛擬伺服器組全部列在下面的annotation中,格式為${虛擬服務組ID}:${連接埠}
      # 多個值以,分割。
      service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: rsp-bp1r4xk******:15021,rsp-bp1kaqd******:80,rsp-bp1jyz0******:443
      # 在遷移開始之前,Istio網關的權重為100,全部流量經過Istio網關。ASM網關權重為0。
      service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "0"
  • 驗證CLB複用,開啟CLB控制台,選擇虛擬伺服器組,點擊虛擬伺服器組名稱查看虛擬伺服器組後端,若Istio網關Pod地址和ASM網關Pod地址都出現在列表中,即表示本步驟成功完成。

步驟三:將網關相關配置遷移至ASM

為了使得ASM網關行為與Istio網關一致,您需要將Istio中與該網關相關的配置應用至ASM。

  • 由於ASM網關不能與Istio網關重名,遷移Gateway CR時,Gateway CR的spec.selcetor.istio欄位需修改為實際的ASM網關名稱。YAML樣本如下:

    spec:
      selector:
        istio: ingressgateway-asm
  • VirtualService CR、DestinationRule CR等無需修改,隨即轉移。

步驟四:將流量灰階遷移至ASM網關

通過分別修改Istio網關和ASM入口網關的serviceAnnotations,可以切換新舊兩個網關的權重。您可以通過緩慢放大ASM網關流量比例同時緩慢縮小Istio網關流量比例將流量逐步切換至ASM網關,最終直至將全部流量切換至ASM網關,即完成遷移。

您可以通過修改Istio網關Service annotation以及ASM網關Service annotation以控制CLB轉寄流量的比例:

  • 修改原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"