本文介绍自建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"