1.0企业版多集群场景(新建集群和网格方案)
前提
- 确保准备工作已完成。
- 梳理网格下各个集群的网关和跨集群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域名进行跨集群访问。
新建集群和网格
- 登录CCE 控制台,选择在当前企业版集群所在的同VPC下创建集群。
- 重新部署业务。
- 在ASM控制台,创建基础版本网格,选择步骤1新建的集群。
- 在新建的网格详情页,依次单击“网格配置-sidecar管理-sidecar管理”,选择需要开启自动注入的命名空间(准备工作中步骤11中记录的命名空间),是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。
- 查看网格使用了几个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
- 将准备工作中备份的该集群资源上传到集群节点,执行如下命令恢复,其中xx为备份的文件名。
- 方案二:
【可选】解除业务跨集群k8s服务访问
- 方案一:将有访问关系的服务迁移到同一个集群中。
- 方案二:通过创建网关进行服务间访问。
业务解除跨集群流量访问,如A集群a服务访问B集群b服务,以此为例需进行如下操作
- 在新基础版网格上创建网关访问b服务,路由选择前缀匹配,URL选择 "/"。
- (可选) 在A集群所在的网格上创建b服务所在网格网关对应的ServiceEntry 和 WorkloadEntry代替b服务,在B网格新建的Gateway中添加'*', VirtualService中的 hosts 改为 '*' 。
apiVersion: networking.istio.io/v1alpha3 kind: ServiceEntry metadata: name: b-mesh-gateway spec: hosts: - b-mesh-gateway.default.svc.cluster.local location: MESH_EXTERNAL ports: - name: http number: 80 //创建的网关访问端口 protocol: HTTP targetPort: 80 //创建的网关访问端口 resolution: STATIC workloadSelector: labels: app: b-mesh-gateway --- apiVersion: networking.istio.io/v1alpha3 kind: WorkloadEntry metadata: name: b-mesh-gateway spec: address: x.x.x.x //新ELB的IP地址 labels: app: b-mesh-gateway
gateway和virtualSevice host添加‘*’
- 开启istio DNS访问
在A业务集群上使用如下命令
kubectl edit iop {iop名} -nistio-system
在spec.meshConfig.defaultConfig.proxyMetadata下如下添加配置
ISTIO_META_DNS_CAPTURE: "true" ISTIO_META_DNS_AUTO_ALLOCATE: "true"
- 修改访问,确保流量已经访问到新集群。
- 如使用springcloud,需要修改FeignClient访问地址,在注解中指定新url地址(producer.default:8089 -> b-mesh-gateway.default:8089,若第二步未操作,则直接替换为网关地址)
- 创建灰度任务,切部分流量到修改了配置的新版本。
- 验证功能正常后将在CCE界面将镜像替换成新版本,然后取消灰度任务。
移除企业版集群
- 从DNS上将待移除的网关的地址改为新基础版集群的网关。
- 删除该集群上部署的网关,可以在网关管理页面查看网关所属集群。
- 将对应的集群移除出企业版网格。
- 重复1-3步骤直到所有集群都移除出网格
功能验证
验证业务功能正常可用。
异常回退
- 将集群添加回企业版网格。
- 使用控制面kubectl 执行如下命令:
kubectl create -f all-gw.yaml
使用数据面kubectl 执行如下命令:
kubectl create -f user-all-svc.yaml
- 功能验证。
- 将新建网格集群删除。