文档首页/ 应用服务网格 ASM/ 最佳实践/ 1.0企业版网格迁移到基础版/ 1.0企业版多集群场景(新建集群和网格方案)
更新时间:2024-06-26 GMT+08:00
分享

1.0企业版多集群场景(新建集群和网格方案)

前提

  1. 确保准备工作已完成。
  2. 梳理网格下各个集群的网关和跨集群svc。

    集群

    网关

    跨集群访问的服务

    A

    a-gw

    集群A 、集群B

    B

    b-gw

    集群B

    ...

    ...

    ...

  3. 关闭mtls以及访问授权,是用如下命名查看是否存在对应资源。
    kubectl get PeerAuthentication -A
    kubectl get AuthorizationPolicy -A
    kubectl get RequestAuthentication -A
    • 查看查询到的PeerAuthentication ,若spec.mtls.mode为STRICT,则需要将STRICT改为PERMISSIVE。
    • 查看查询到的AuthorizationPolicy, 若使用了该功能,则需要在迁移过程中暂时删除访问授权。
    • 查看查询到的RequestAuthentication, 若使用了该功能,则需要在迁移过程中暂时删除请求认证。
  4. 解除业务上使用k8s域名进行跨集群访问。

新建集群和网格

  1. 登录CCE 控制台,选择在当前企业版集群所在的同VPC下创建集群
  2. 重新部署业务。
  3. 在ASM控制台,创建基础版本网格,选择步骤1新建的集群。

  4. 在新建的网格详情页,依次单击“网格配置-sidecar管理-sidecar管理”,选择需要开启自动注入的命名空间(准备工作中步骤11中记录的命名空间),是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。

  5. 查看网格使用了几个ELB,新建同等数量和规格的ELB,重新创建网关和路由。

    • 方案一:
      1. 在待迁移网格详情页,网关管理页面查看待迁移集群上有几个网关路由。即“所属集群”字段是待迁移集群的全部网关。

      2. 在新基础版网格上选用新建的ELB,重新创建网关和路由。
    • 方案二:
      1. 将准备工作中备份的该集群资源上传到集群节点,执行如下命令恢复,其中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

【可选】解除业务跨集群k8s服务访问

  • 方案一:将有访问关系的服务迁移到同一个集群中。
  • 方案二:通过创建网关进行服务间访问。

业务解除跨集群流量访问,如A集群a服务访问B集群b服务,以此为例需进行如下操作

  1. 在新基础版网格上创建网关访问b服务,路由选择前缀匹配,URL选择 "/"。
  2. (可选) 在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添加‘*’

  3. 开启istio DNS访问

    在A业务集群上使用如下命令

    kubectl edit iop {iop名} -nistio-system

    在spec.meshConfig.defaultConfig.proxyMetadata下如下添加配置

    ISTIO_META_DNS_CAPTURE: "true"
    ISTIO_META_DNS_AUTO_ALLOCATE: "true"

  4. 修改访问,确保流量已经访问到新集群。

    1. 如使用springcloud,需要修改FeignClient访问地址,在注解中指定新url地址(producer.default:8089 -> b-mesh-gateway.default:8089,若第二步未操作,则直接替换为网关地址)

    1. 创建灰度任务,切部分流量到修改了配置的新版本。
    2. 验证功能正常后将在CCE界面将镜像替换成新版本,然后取消灰度任务。

移除企业版集群

  1. 从DNS上将待移除的网关的地址改为新基础版集群的网关。
  2. 删除该集群上部署的网关,可以在网关管理页面查看网关所属集群。
  3. 将对应的集群移除出企业版网格。
  4. 重复1-3步骤直到所有集群都移除出网格

功能验证

验证业务功能正常可用。

异常回退

  1. 将集群添加回企业版网格。
  2. 使用控制面kubectl 执行如下命令:

    kubectl create -f all-gw.yaml

    使用数据面kubectl 执行如下命令:

    kubectl create -f user-all-svc.yaml

  3. 功能验证。
  4. 将新建网格集群删除。

相关文档