
问题背景
Aliware
项目测试环境被抢占
开发联调环境不稳定
线上灰度环境的缺乏
方案调研与探索
Aliware
自研 Ribbon 实现
物理隔离(蓝绿发布)
MSE 标签路由+APPSTACK 应用编排(我们的选择)
这两款产品的说明文档见链接 云效应用交付平台 AppStack : https://help.aliyun.com/document_detail/321856.html 阿里云微服务引擎 MSE 全链路灰度 : https://help.aliyun.com/document_detail/170454.html
MSE 全链路灰度的重要概念
核心示意图
1. 应用(服务)打标
对照核心示意图,我们发现每个应用都有个(base/gray)的 tag,有了这个 tag,我们才可以根据 tag 定义流量规则。
特定 annotation: alicloud.service.tag=dev1 环境变量: spring.cloud.nacos.discovery.metadata.version
增加特定的 annotation 跟环境变量
MSE 流量规则配置
Nacos 里面元数据信息
也有额外增加一个容器环境变量的做法: spring.cloud.nacos.discovery.metadata.version
容器中增加 gray 相关的环境变量
MSE 流量规则配置出现 gray 节点
Nacos 里面有gray环境的元数据信息
MSE 云原生网关可以选择 gray 版本
2. 流量染色/自动染色
3. 标识链路传递
阿里云效应用交付 APPSTACK 简述
我们把云效 APPSTACK 引入进来,主要目的是方便开发同学通过白屏的管理方式自助完成 MSE 所需要的配置工作,同时在微服务架构下,我们希望应用进行拆分之后,每个应用都有自己的 owner。
应用的多套环境部署
每个环境都会按照 MSE 标签路由的要求打上不同的标识
我们的解决方案
Aliware
环境定义
主要场景实施
场景一:项目隔离的动态多环境

通过注解 nginx.ingress.kubernetes.io/configuration-snippet 实现,具体如下: metadata: annotations: nginx.ingress.kubernetes.io/configuration-snippet: proxy_set_header x-mse-tag dev1
场景二:规则流量全链路灰度的生产环境

场景三:自然流量全链路灰度的生产环境

相关技术原理概要介绍

借事修人

