{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
作者:ucloud徐亮
本文主要详细阐述了在ucloud的虚拟网络里,如何利用servicemesh技术在虚拟网络控制面以及利用可编程交换机在转发面实现灰度发布。
servicemesh实现控制面灰度
在控制面,早期灰度发布采用apigw的方式实现。apigw通常仅部署在用户流量的入口,完全灰度发布就需要完整地部署两套系统。但在微服务化的时代,任何一个微服务发生变更都需要完整地部署两套系统,这不仅成本高且严重影响产品变更速度。servicemesh以类似于将apigateway部署到本地,同时提供集中化控制的方式,完美地解决了这些问题。
ucloud的轻量级servicemesh平台基于istio,继续使用envoy代理,修改pilot在保留完整的dsl支持的基础上实现了脱离k8s运行。
因此网络团队对pilot做了高度定制,从而更能满足自身的需求。
l定制方案一:按账号灰度。在grpc或者http请求中添加⾃自定义headerx-ucloud-routeby,x-ucloud-routeby采用cookie的编码格式,在其中包含账户信息,配置envoy根据该header进行策略路由。
l定制方案二:采用显式代理而不是iptables透明引流的方式和envoy集成,支持http1.0、http2.0和grpc。在配置了envoy的proxyport情况下,通过envoy接入servicemesh;如果配置域名且没有配置envoy的proxy,则自动采用etcdgrpcnaminganddiscovery的方式;如果配置ip地址和端口,则直连指定地址。
定制方案三:采用docker-compose管理container实现sidecar。新方案中仍然采用container的方式打包和部署微服务,但采用host的网络方式简化了现存服务的网络通信方式。通过采用docker-compose管理container实现sidecar,实现了一个简单的服务管理、版本管理、集群管理、路由策略管理层,为集群中的每台node(vm或物理服务器)生成docker-compose配置文件,从而部署和管理每台node的服务。
可编程交换机实现转发面灰度
在转发面灰度的方案选择上,团队采用了可编程交换机(基于barefoottofino芯片)来实现灰度网关,替换普通交换机实现强灰度能力。
灰度网关最大提供64个100g的接口、6.4t带宽,pps性能可达4400兆,延迟为us级别,能够很好支持网络宽带的高性能要求。灰度网关可以提供:一致性哈希ecmp的能力;可以基于任意定制字段(包括内层虚拟网络地址以及租户id)计算哈希;在计算哈希前优先应用灰度规则,可以根据任意字段定制灰度规则,最小粒度可以做到按tcp流来灰度。
转发面灰度示例
有了上述这些新工具,可以通过部署新的策略实现更加细粒的灰度发布,具体方案为:可编程交换机bgp宣告集群vip引流,根据选择字段计算一致性哈希后将流量量分发给后端服务器,并按照选择字段(vni、源地址、目的地址)配置灰度规则。
灰度步骤如下:
1.按vm的粒度将流量量切换到灰度后端服务器器;
2.切换完成后立刻自动回归测试,根据路由表自动生成监测地址列表,并ping检测网络互通性;
3.测试通过则逐步增加灰度的vm地址;
4.直到整个vpc的流量量全部切换到灰度后端服务器器;
5.再切换一个新的vpc,直到所有分片内的vpc都切换到新的灰度后端服务器;
6.完成灰度发布。
以上内容最早发表于ucloud10月12日在上海主办的techtalk第一期活动。techtalk是ucloud面向用户做深度技术交流的线下活动,后面也会继续举办,欢迎参加。