-
迁移集群 删除该集群上部署的网关。在待迁移网格详情页,网关管理页面查看待迁移集群上有几个网关路由。即“所属集群”字段是待迁移集群的全部网关。 将对应的集群移除出企业版网格。 在ASM控制台 ,创建基础版本网格,选择移除出企业版网格的集群。 在新建的网格详情页,依次单击“网格配置-sidecar管理-sidecar管理”,选择需要开启自动注入的命名空间(准备工作中步骤11中记录的命名空间),是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。 进行服务诊断,并处理异常。 恢复istio资源,选择如下任意一个方案执行。 方案一:重新手动创建网关,并添加路由。 方案二:将准备工作中备份的该集群资源上传到集群节点,执行如下命令恢复,其中xx为备份的文件名。 kubectl create -f xx.yaml (可选)执行解除业务跨集群访问方案二 重复执行上述步骤1-7,直至所有集群迁移完毕。
-
前提 确保准备工作已完成。 梳理网格下各个集群的网关和跨集群svc。 集群 网关 跨集群访问的服务 A a-gw 集群A 、集群B B b-gw 集群B ... ... ... 关闭mtls以及访问授权,使用如下命名查看是否存在对应资源。 kubectl get PeerAuthentication -A
kubectl get AuthorizationPolicy -A
kubectl get RequestAuthentication -A 查看查询到的PeerAuthentication ,若spec.mtls.mode为STRICT,则需要将STRICT改为PERMISSIVE。 查看查询到的AuthorizationPolicy, 若使用了该功能,则需要在迁移过程中暂时删除访问授权。 查看查询到的RequestAuthentication, 若使用了该功能,则需要在迁移过程中暂时删除请求认证。 允许迁移期间业务访问中断。 解除业务上使用k8s
域名 进行跨集群访问。
-
异常回退 若在迁移过程中出现异常,可按照如下步骤回退。 登录应用服务网格控制台,在网格列表页面单击待删除网格右上角的卸载按钮卸载网格,是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。 在网格详情页,依次单击“网格配置-基本信息-添加集群”将卸载后集群重新添加回1.0企业版里面。 添加集群时,集群 选择“扁平网格”,选择需要开启自动注入的命名空间(准备工作中步骤11中记录的命名空间),是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。 使用控制面kubectl 执行如下命令。 kubectl create -f all-svc.yaml
kubectl create -f all-vs.yaml
kubectl create -f all-dr.yaml
kubectl create -f all-gw.yaml 功能验证。 网关访问正常 路由显示正常 修改DNS解析地址为网关ELB IP。 删除CCE ingress。
-
迁移 登录应用服务网格控制台,单击待迁移的企业版网格名称进入网格详情页面,在在网关管理页面删除网格内的所有网关资源。 在网格详情页,单击“网格配置”进入基本信息页签,单击集群后面的“移除”按钮 。 是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。 选择从企业版网格移除出来的集群创建基础版网格。建议创建istio最新版本的网格。 在网格详情页,依次单击“网格配置-sidecar管理-sidecar管理”,选择需要开启自动注入的命名空间(准备工作中步骤11中记录的命名空间),是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。 单击创建出来的网格名称进入详情页,依次单击“服务网关-添加网关”手动创建网关,选择原ELB实例。 将准备工作中备份的配置文件在新网格中恢复,若未配置kubectl命令,可参考CCE配置kubectl 。 kubectl create -f all-vs.yaml
kubectl create -f all-dr.yaml 若出现“Error from server (AlreadyExists): xxxxx already exists” 已存在的报错则忽略。
-
迁移方案选择 表1 迁移方案 匹配条件 迁移方案 仅存在一个集群 业务允许小时级别中断 原集群卸载重装方案 网格使用了流量治理规则,envoyfilter等配置 对外ip端口可替换 客户业务可重新部署 新建集群和网格方案 仅使用了网格网关能力 业务允许闪断 使用ingress中转方案 业务多集群 业务允许小时级别中断 1.0企业版多集群场景(使用原集群创建网格) 业务多集群 业务允许闪断 1.0企业版多集群场景(新建集群和网格方案)
-
新建集群和网格 登录CCE 控制台,选择在当前企业版集群所在的同VPC下创建集群。 重新部署业务。 在ASM控制台,创建基础版本网格,选择步骤1新建的集群。 在新建的网格详情页,依次单击“网格配置-sidecar管理-sidecar管理”,选择需要开启自动注入的命名空间(准备工作中步骤11中记录的命名空间),是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。 查看网格使用了几个ELB,新建同等数量和规格的ELB,重新创建网关和路由。 方案一: 在待迁移网格详情页,网关管理页面查看待迁移集群上有几个网关路由。即“所属集群”字段是待迁移集群的全部网关。 在新基础版网格上选用新建的ELB,重新创建网关和路由。 方案二: 将准备工作中备份的该集群资源上传到集群节点,执行如下命令恢复,其中xx为备份的文件名。 #查看老资源
grep -i "老ELB IP" *.yaml
grep -i "老ELB ID" *.yaml
grep -i "老clusterID" *.yaml
grep -i "老CluseterName" *.yaml
#ELB IP 替换
sed -i 's/老ELB IP/新ELB IP/g' *.yaml
#ELB ID 替换
sed -i 's/老ELB ID/新ELB ID/g' *.yaml
#替换clusterID
sed -i 's/老clusterID/新clusterID/g' *.yaml
#替换CluseterName
sed -i 's/老CluseterName/新CluseterName/g' *.yaml
#替换完成后查看
grep -i "新ELB IP" *.yaml
grep -i "新ELB ID" *.yaml
grep -i "新clusterID" *.yaml
grep -i "新CluseterName" *.yaml
kubectl create -f xx.yaml
-
前提 确保准备工作已完成。 梳理网格下各个集群的网关和跨集群svc。 集群 网关 跨集群访问的服务 A a-gw 集群A 、集群B B b-gw 集群B ... ... ... 关闭mtls以及访问授权,使用如下命名查看是否存在对应资源。 kubectl get PeerAuthentication -A
kubectl get AuthorizationPolicy -A
kubectl get RequestAuthentication -A 查看查询到的PeerAuthentication ,若spec.mtls.mode为STRICT,则需要将STRICT改为PERMISSIVE。 查看查询到的AuthorizationPolicy, 若使用了该功能,则需要在迁移过程中暂时删除访问授权。 查看查询到的RequestAuthentication, 若使用了该功能,则需要在迁移过程中暂时删除请求认证。 解除业务上使用k8s域名进行跨集群访问。
-
异常回退 登录应用服务网格控制台,在网格列表页面单击待删除网格右上角的卸载按钮卸载网格,是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。 在网格详情页,依次单击“网格配置-基本信息-添加集群”将卸载后集群重新添加回1.0企业版里面。 添加集群时,集群 选择“扁平网格”,选择需要开启自动注入的命名空间(准备工作中步骤11中记录的命名空间),是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。 使用控制面kubectl 执行如下命令。 kubectl create -f all-svc.yaml
kubectl create -f all-vs.yaml
kubectl create -f all-dr.yaml
kubectl create -f all-gw.yaml
kubectl create -f all-se.yaml
kubectl create -f all-ef.yaml
kubectl create -f all-sidecar.yaml
kubectl create -f all-we.yaml
kubectl create -f all-wg.yaml
kubectl create -f all-pa.yaml
kubectl create -f all-ra.yaml
kubectl create -f all-ap.yaml 使用数据面集群kubectl执行如下命令。 kubectl create -f user-all-svc.yaml
kubectl create -f user-all-secret.yaml 功能验证。 网关访问正常 路由显示正常
-
创建新网格 根据如下支持列表选择创建基础网格。 表1 ASM网格版本与集群版本适配规则 ASM网格版本 集群版本 1.3 v1.13、v1.15、v1.17、v1.19 1.6 v1.15、v1.17 1.8 v1.15、v1.17、v1.19、v1.21 1.13 v1.21、v1.23 1.15 v1.21、v1.23、v1.25、v1.27、v1.28 1.18 v1.25、v1.27、v1.28、v1.29、v1.30、v1.31、v1.32 选择从企业版网格移除出来的集群创建基础版网格。建议创建istio最新版本的网格。 在网格详情页,依次单击“网格配置-sidecar管理-sidecar管理”,选择需要开启自动注入的命名空间(准备工作中步骤11中记录的命名空间),是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。
-
配置同步 将准备工作中备份的配置文件在新网格中恢复,若未配置kubectl命令,可参考CCE配置kubectl 。 kubectl create -f all-svc.yaml
kubectl create -f all-vs.yaml
kubectl create -f all-dr.yaml
kubectl create -f all-gw.yaml
kubectl create -f all-se.yaml
kubectl create -f all-ef.yaml
kubectl create -f all-sidecar.yaml
kubectl create -f all-we.yaml
kubectl create -f all-wg.yaml
kubectl create -f all-pa.yaml
kubectl create -f all-ra.yaml
kubectl create -f all-ap.yaml
kubectl create -f user-all-svc.yaml
kubectl create -f user-all-secret.yaml 若出现“Error from server (AlreadyExists): xxxxx already exists” 已存在的报错则忽略。 删除新版本无用配置。 若源版本是1.6企业版则执行如下命令: kubectl -nistio-system delete svc istiod-remote
kubectl -nistio-system delete svc istiod-elb
kubectl -nistio-system delete vs istiod 若源版本是1.8企业版则执行如下命令: kubectl -nistio-system delete envoyfilter metadata-exchange-1.6
kubectl -nistio-system delete envoyfilter metadata-exchange-1.7
kubectl -nistio-system delete envoyfilter metadata-exchange-1.8
kubectl -nistio-system delete envoyfilter stats-filter-1.6
kubectl -nistio-system delete envoyfilter stats-filter-1.7
kubectl -nistio-system delete envoyfilter stats-filter-1.8
kubectl -nistio-system delete envoyfilter tcp-metadata-exchange-1.6
kubectl -nistio-system delete envoyfilter tcp-metadata-exchange-1.7
kubectl -nistio-system delete envoyfilter tcp-metadata-exchange-1.8
kubectl -nistio-system delete envoyfilter tcp-stats-filter-1.6
kubectl -nistio-system delete envoyfilter tcp-stats-filter-1.7
kubectl -nistio-system delete envoyfilter tcp-stats-filter-1.8
kubectl -nistio-system delete svc istiod-remote
kubectl -nistio-system delete svc istiod-elb
kubectl -nistio-system delete vs istiod
-
配置同步 方案一 手动同步网格配置(推荐) 手动在新建的网格上添加网关路由,并同步1.0企业版网格配置。 方案二 使用备份网格资源还原配置 查看企业版网格网关使用了几个ELB,使用新建的几个ELB进行替换,如下图所示使用了两个ELB: ELB1:(3dbb4787-75c1-42f0-897a-1f683f7e89a0)* .*.*.* ELB2:(e60fdaa7-3398-4a19-8bd1-d53598c6917e)* .*.*.* 新建两个ELB。 newELB1:(caf6ec4a-2fa8-42ae-bdfb-388f8b13778a)* .*.*.* newELB2:(792c0a3d-190d-413d-a5b9-5c1ac3fe3705)* .*.*.* 将准备工作中备份的istio 配置文件拷贝一份到新集群节点上, 执行如下命令: #查看老ELB IP
grep -i "老ELB IP" *.yaml
#ELB IP 替换
sed -i 's/老ELB IP/新ELB IP/g' *.yaml
#ELB ID 替换
sed -i 's/老ELB ID/新ELB ID/g' *.yaml
#替换clusterID
sed -i 's/老clusterID/新clusterID/g' *.yaml
#替换CluseterName
sed -i 's/老CluseterName/新CluseterName/g' *.yaml
#替换完成后查看
grep -i "新ELB IP" *.yaml
grep -i "新ELB ID" *.yaml
grep -i "新clusterID" *.yaml
grep -i "新CluseterName" *.yaml 替换完成后如下所示: 将准备工作中备份的配置文件在新网格中恢复,若未配置kubectl命令,可参考CCE配置kubectl 。 kubectl create -f all-svc.yaml
//kubectl create -f all-secret.yaml
kubectl create -f all-vs.yaml
kubectl create -f all-dr.yaml
kubectl create -f all-gw.yaml
kubectl create -f all-se.yaml
kubectl create -f all-ef.yaml
kubectl create -f all-sidecar.yaml
kubectl create -f all-we.yaml
kubectl create -f all-wg.yaml
kubectl create -f all-pa.yaml
kubectl create -f all-ra.yaml
kubectl create -f all-ap.yaml
kubectl create -f user-all-svc.yaml
kubectl create -f user-all-secret.yaml 若出现“Error from server (AlreadyExists): xxxxx already exists” 已存在的报错则忽略。 删除新版本无用配置。 若源版本是1.6企业版则执行如下命令: kubectl -nistio-system delete svc istiod-remote
kubectl -nistio-system delete svc istiod-elb
kubectl -nistio-system delete vs istiod 若源版本是1.8企业版则执行如下命令: kubectl -nistio-system delete envoyfilter metadata-exchange-1.6
kubectl -nistio-system delete envoyfilter metadata-exchange-1.7
kubectl -nistio-system delete envoyfilter metadata-exchange-1.8
kubectl -nistio-system delete envoyfilter stats-filter-1.6
kubectl -nistio-system delete envoyfilter stats-filter-1.7
kubectl -nistio-system delete envoyfilter stats-filter-1.8
kubectl -nistio-system delete envoyfilter tcp-metadata-exchange-1.6
kubectl -nistio-system delete envoyfilter tcp-metadata-exchange-1.7
kubectl -nistio-system delete envoyfilter tcp-metadata-exchange-1.8
kubectl -nistio-system delete envoyfilter tcp-stats-filter-1.6
kubectl -nistio-system delete envoyfilter tcp-stats-filter-1.7
kubectl -nistio-system delete envoyfilter tcp-stats-filter-1.8
kubectl -nistio-system delete svc istiod-remote
kubectl -nistio-system delete svc istiod-elb
kubectl -nistio-system delete vs istiod 验证业务功能若出现服务异常场景,单击处理,查看异常错误。 在CCE service页面修改
-
新建集群和网格 登录CCE控制台选择在当前企业版集群所在的同VPC下创建集群。 在应用服务网格ASM控制台 ,创建基础版本网格,选择步骤1新建的集群。 在新建的网格详情页,依次单击“网格配置-sidecar管理-sidecar管理”,选择需要开启自动注入的命名空间(准备工作中步骤11中记录的命名空间),是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。 查看网格使用了几个ELB,新建同等数量和规格的ELB。
-
数据面升级说明 单击“升级”会将所有服务实例对接到新版本控制面,您可以通过修改命名空间的标签(去除istio-injection:enabled ,加上istio.io/rev: {revision} ,其中{revision} 为版本号,如1-13-9-r5),并重启部分pod进行测试,若无问题,则可以全部切换。 1.3和1.6版本升级到1.8版本,因为证书切换,sidecar需要同时全部重启。 数据面升级结束后,请等待所有升级中的工作负载滚动升级完成。 父主题: 金丝雀升级
-
企业版网格工作原理 企业版网格是如何管理用户集群的,这要从用户集群和网格控制面的连接方式说起。企业版网格支持用户集群通过公网连接和私网连接两种方式连接网格控制面。 公网连接主要用于跨Region添加集群或对接其他云厂商的集群 通过公网连接网格控制面,用户需要为集群绑定弹性公网IP(EIP),因为网格的控制面需要访问用户集群的Kubernetes API Server服务。还需要为集群所在的VPC创建公网NAT网关,因为服务的Envoy组件需要通过NAT网关连接网格的控制面。 图3 公网连接网格控制面 私网连接用于对接华为云Region内部的集群 私网连接网格控制面则是利用VPC间的对等连接功能,打通了不同VPC之间的网络隔离。在创建网格时,要提前规划网格控制面的网段。 图4 私网连接网格控制面 下面要讲一下企业版网格的多集群治理能力。 传统的服务跨集群访问,用户需要创建NodePort或LoadBalancer服务,绑定ELB,配置转发端口,而且对每一个需要跨集群访问的服务都要执行此操作。除此之外,用户还需要维护各个服务的对外访问配置。 图5 传统跨集群访问 ASM企业版网格提供的服务跨集群访问能力,不需要用户进行复杂的配置,只需要将集群添加到网格,网格管理的所有集群的所有服务之间都是能够相互访问的,不管服务属于哪个集群。 图6 ASM跨集群访问
-
1.18版本特性 支持Istio 1.18.7版本 支持v1.25、v1.27 、v1.28、v1.29 、v1.30、v1.31 、v1.32
CCE Turbo 集群版本 支持v1.25、v1.27、v1.28 、v1.29、v1.30、v1.31 、v1.32 CCE集群版本 支持 Kubernetes Gateway API 详细内容请参阅:https://istio.io/latest/news/releases/1.18.x/ 父主题: 升级