
# 1.0企业版网格迁移到基础版概述
#### **前言**
企业版网格已下线，存量的企业版网格建议您迁移到基础版网格。
本教程介绍了如何将企业版网格迁移到基础版本网格。您可以根据企业版网格的场景选择不同的[迁移方案]。版本差异详见[基础版及社区开源版本对比](https://support.huaweicloud.com/productdesc-asm/asm_productdesc_0018.html)。
#### **费用**
企业版网格迁移到基础版网格后，网格将会免费。当前基础版网格不收费。
#### **迁移方案选择**
 表1迁移方案 
| 匹配条件                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 迁移方案                   |
|:---|:---|
| - 仅存在一个集群    - 业务允许小时级别中断                                                                                                                                                                     | 原集群卸载重装方案              |
| - 网格使用了流量治理规则，envoyfilter等配置    - 对外ip端口可替换    - 客户业务可重新部署   | 新建集群和网格方案              |
| - 仅使用了网格网关能力    - 业务允许闪断                                                                                                                                                                       | 使用ingress中转方案          |
| - 业务多集群    - 业务允许小时级别中断                                                                                                                                                                       | 1.0企业版多集群场景（使用原集群创建网格） |
| - 业务多集群  - 业务允许闪断                                                                                                                                                                                                                                   | 1.0企业版多集群场景（新建集群和网格方案） |
   
 #### **准备工作**
1. 结束现有的灰度发布任务。
2. 联系ASM oncall, 配置控制面集群kubectl,使用如下命令进行资源备份。 
   ```
   kubectl get Service --all-namespaces -o yaml > all-svc.yaml
   kubectl get Secret --all-namespaces -o yaml > all-secret.yaml
   kubectl get VirtualService --all-namespaces -o yaml > all-vs.yaml
   kubectl get DestinationRule --all-namespaces -o yaml > all-dr.yaml
   kubectl get Gateway --all-namespaces -o yaml > all-gw.yaml
   kubectl get ServiceEntry --all-namespaces -o yaml > all-se.yaml
   kubectl get EnvoyFilter --all-namespaces -o yaml > all-ef.yaml
   kubectl get Sidecar --all-namespaces -o yaml > all-sidecar.yaml
   kubectl get WorkloadEntry --all-namespaces -o yaml > all-we.yaml
   kubectl get WorkloadGroup --all-namespaces -o yaml > all-wg.yaml
   kubectl get PeerAuthentication --all-namespaces -o yaml > all-pa.yaml
   kubectl get RequestAuthentication --all-namespaces -o yaml > all-ra.yaml
   kubectl get AuthorizationPolicy --all-namespaces -o yaml > all-ap.yaml
   ```
   
   
3. 配置数据面集群kubectl，使用如下命令进行备份。 
   ```
   kubectl get Service --all-namespaces -o yaml > user-all-svc.yaml
   kubectl get Secret --all-namespaces -o yaml > user-all-secret.yaml
   ```
   
   
4. 若网格内存在多集群，可按照规划，通过过滤namespace /deployment等对特定集群上的资源进行备份。 
   ```
   kubectl get vs -A |grep {namespaces}
   kubectl get vs -A |grep {deployment}
   ```
   
   
5. 针对Envoyfilter和Sidecar等资源，如果仅作用在特定集群的服务上，则可按照作用范围进行分类，如workloadSelector等 
   ![](https://support.huaweicloud.com/bestpractice-asm/zh-cn_image_0000001816260626.png)
   
   
6. （1.6企业版涉及）Istio 1.8及以上版本网格网关默认端口需要大于等于1024，整改方案如下： 
   - 针对gateway资源，将servers.port下的name和number改为大于1024的端口，如80改为1080。
   
   
   ```
   apiVersion: networking.istio.io/v1alpha3
   kind: Gateway
   metadata:
     annotations:
       asm/elbPort: '8001'
     name: test-gw
     namespace: istio-system
   spec:
     selector:
       istio: ingressgateway
     servers:
       - hosts:
           - *.*.*.*
         port:
           name: http-80    --> http-1080
           number: 80       --> 1080
           protocol: http
   ```
   - 针对该网关下的svc资源，需要同步修改service targetPort端口。
   
   
   ```
   apiVersion: v1
   kind: Service
   metadata:
     name: test-gw-svc
     namespace: istio-system
   spec:
     ports:
       - name: http-f406803d
         protocol: TCP
         port: 8001
         targetPort: 80  --> 1080
         nodePort: 32608
     selector:
       app: istio-ingressgateway
       istio: ingressgateway
     clusterIP: *.*.*.*
     clusterIPs:
       - *.*.*.*
     type: LoadBalancer
     sessionAffinity: None
     loadBalancerIP: *.*.*.*
     externalTrafficPolicy: Cluster
   status:
     loadBalancer:
       ingress:
         - ip: *.*.*.*
         - ip: *.*.*.*
   ```
   
   
   
7. （可选) Deletegate VS整改，详见[1.3升级1.8 VirtualService支持Delegate切换](https://support.huaweicloud.com/usermanual-asm/asm_01_0083.html)。
   
   ![](https://support.huaweicloud.com/bestpractice-asm/public_sys-resources/note_3.0-zh-cn.png)
   仅1.6企业版涉及，1.8版本以上console仅支持delegate vs展示，如果不使用console可不整改
   
   
8. 检查是否使用了如下废弃资源clusterrbacconfigs、serviceroles、servicerolebindings。若存在这些资源，需要删除对应的资源，因为在1.8以上版本中这些资源已经废弃。 
   ```
   kubectl get clusterrbacconfigs -A
   kubectl get serviceroles-A
   kubectl get servicerolebindings-A
   ```
   
   
9. 检查业务pod是否仅监听在了loopback interface（lo），从Istio 1.10版本开始，Sidecar不再重定向流量到 loopback interface（lo），而是将流量重定向到应用的eth0。若您的业务pod监听到了lo，需要改成监听到eth0或者全零监听，否则升级后将导致服务无法访问，详见[升级操作指导](https://clouddevops.huawei.com/domains/5414/wiki/3/WIKI2023071201294)。
10. envoyfilter修改 
    请参考<https://www.envoyproxy.io/docs/envoy/latest/version_history/version_history>。
    
    
11. 在"网格配置-sidecar管理"页面中查看已开启自动注入的命名空间并记录。
    
    
    
    
 
