1.0企业版网格迁移到基础版
前言
本教程介绍了如何将企业版网格迁移到基础版本网格。您可以根据企业版网格的场景选择不同的迁移方案。版本差异详见基础版、企业版及社区开源版本对比。
费用
企业版网格迁移到基础版网格后,网格将会免费。当前基础版网格不收费。
迁移方案选择
准备工作
- 结束现有的灰度发布任务。
- 联系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
- 配置数据面集群kubectl,使用如下命令进行备份。
kubectl get Service --all-namespaces -o yaml > user-all-svc.yaml kubectl get Secret --all-namespaces -o yaml > user-all-secret.yaml
- 若网格内存在多集群,可按照规划,通过过滤namespace /deployment等对特定集群上的资源进行备份。
kubectl get vs -A |grep {namespaces} kubectl get vs -A |grep {deployment}
- 针对Envoyfilter和Sidecar等资源,如果仅作用在特定集群的服务上,则可按照作用范围进行分类,如workloadSelector等
- (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: *.*.*.*
- (可选) Deletegate VS整改,详见1.3升级1.8 VirtualService支持Delegate切换。
仅1.6企业版涉及,1.8版本以上console仅支持delegate vs展示,如果不使用console可不整改
- 检查是否使用了如下废弃资源clusterrbacconfigs、serviceroles、servicerolebindings。若存在这些资源,需要删除对应的资源,因为在1.8以上版本中这些资源已经废弃。
kubectl get clusterrbacconfigs -A kubectl get serviceroles-A kubectl get servicerolebindings-A
- 检查业务pod是否仅监听在了loopback interface(lo),从Istio 1.10版本开始,Sidecar不再重定向流量到 loopback interface(lo),而是将流量重定向到应用的eth0。若您的业务pod监听到了lo,需要改成监听到eth0或者全零监听,否则升级后将导致服务无法访问,详见升级操作指导。
- envoyfilter修改
请参考https://www.envoyproxy.io/docs/envoy/latest/version_history/version_history。
- 在“网格配置-sidecar管理”页面中查看已开启自动注入的命名空间并记录。