文档首页/ 应用服务网格 ASM/ 最佳实践/ 1.0企业版网格迁移到基础版
更新时间:2024-06-26 GMT+08:00
分享

1.0企业版网格迁移到基础版

前言

本教程介绍了如何将企业版网格迁移到基础版本网格。您可以根据企业版网格的场景选择不同的迁移方案。版本差异详见基础版、企业版及社区开源版本对比

费用

企业版网格迁移到基础版网格后,网格将会免费。当前基础版网格不收费。

迁移方案选择

表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等

  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切换

    仅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或者全零监听,否则升级后将导致服务无法访问,详见升级操作指导
  10. envoyfilter修改

    请参考https://www.envoyproxy.io/docs/envoy/latest/version_history/version_history

  11. 在“网格配置-sidecar管理”页面中查看已开启自动注入的命名空间并记录。

相关文档