本文介紹自建Istio IngressGateway如何遷移至ASM網關。
方案示意圖
步驟一:在ASM執行個體中建立入口網關
關於建立入口網關的具體操作,請參見建立入口網關。
建立入口網關時,請注意以下幾點:
命名ASM網關時,請不要與已有網關重名。您可以在命名時加上-asm尾碼,與已有網關進行區分,例如命名為ingressgateway-asm。
將網域名稱解析更改為新的ASM Gateway地址。若不能切換網域名稱對應的DNS解析,或需要通過權重方式漸進地遷移流量,遷移時建立的ASM網關需要複用原有網關的CLB執行個體(如上圖所示,右側的ASM網關採用複用原有網關的CLB執行個體方式)。
說明通過Service Loadbalancer型別宣告建立的CLB複用請參考本文FAQ。
步驟二:遷移相關配置
遷移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?
前往CLB控制台,找到相關的CLB執行個體。刪除對應CLB上的這兩個特殊標籤:
kubernetes.do.not.delete
、ack.aliyun.com
。給對應的網關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"