创建泳道组
从服务网格控制台选择 流量管理中心 -> 全链路灰度 -> 创建泳道组,如下图
选项说明如下:
选项 | 说明 |
泳道组名称 | 字母+数字,最大长度32 |
traceid头部 | 字母+数字+下划线+横线,以字母开头,最大长度32,可选值如x-b3-traceid(根据业务接入的链路追踪实现选择) |
入口网关集群 | 用于实现全链路灰度的入口网关所在的集群 |
入口网关命名空间 | 入口网关所在的命名空间 |
入口网关服务 | 入口网关服务名 |
泳道服务集群 | 要添加到泳道组内的服务所在的集群 |
泳道服务命名空间 | 要添加到泳道组内服务所在的命名空间 |
可选服务列表 | 要添加到泳道组内的服务列表 |
已选服务列表 | 已经选择的泳道组服务列表 |
是否关联网关 | 泳道组服务是否关联网关(只有入口服务需要关联网关) |
创建泳道
创建完泳道组,点击泳道名称进入泳道详情页,如下图展示了泳道组基本信息
选择 创建泳道 按钮 创建新的泳道:
选项说明如下:
选项 | 说明 |
泳道名称 | 对应泳道内的服务版本(取值需要和pod的csm-traffic-tag标签一致),字母+数字,最大长度32 |
泳道服务 | 该泳道内包含的服务,可以是泳道组内服务的子集,不能是空 |
删除泳道
在泳道组详情页面,点击泳道列表右边的删除操作即可
删除泳道组
进入流量管理中心,选择全链路灰度菜单,进入泳道组列表页,选择右侧的删除操作即可
泳道&泳道组相关资源说明
在创建泳道组后,后台会创建一些资源(占位符说明ns:命名空间,group:泳道组名称,svc:服务名称,swimlane:泳道名称):
资源 | 命名空间 | 命名 | 说明 |
网关流量标签 | 网关所在的命名空间 | trafficlabel-$ns-$svc-$group | 在ingress网关处实现流量打标逻辑 |
sidecar流量标签 | 服务所在的命名空间 | trafficlabel-$ns-$svc-$group | 在sidecar处实现流量打标和流量标签透传 |
流量标签名称 | - | csm-traffic-label-$group | |
网关VirtualService | 网关所在的命名空间 | ingress-swim-group-vs-$svc-$ns | 在网关处实现流量路由 |
sidecar VirtualService | 服务所在的命名空间 | sidecar-swim-group-vs-$svc-$ns | 在sidecar实现流量路由 |
服务DestinationRule | 服务所在的命名空间 | sidecar-swim-group-dr-$ns-$svc | 服务版本分组定义 |
DestinationRule subset | 服务所在的命名空间 | $swimlane | 服务分组 |
ingress默认路由 | 网关所在的命名空间 | csm-tl-ingress-http-route-$group-$svc | ingress兜底路由 |
sidecar默认路由 | 服务所在的命名空间 | csm-tl-sidecar-http-route-$group-$svc | sidecar兜底路由 |
ingress版本路由 | 网关所在的命名空间 | csm-tl-ingress-http-route-$group-$svc-$swimlane | ingress内对后端服务多版本的路由规则 |
sidecar版本路由 | 服务所在的命名空间 | csm-tl-sidecar-http-route-$group-$svc-$swimlane | sidecar内对后端服务多版本的路由规则 |
资源复用说明
(1)针对网格内的服务,预期每个服务在其所在的命名空间有一个sidecar VirtualService资源,如果已经您已经在服务所在的命名空间创建了一个VirtualService,gateways为空或者包含mesh,全链路灰度将尝试复用您创建的VirtualService资源
(2)如果您已经在服务所在的命名空间创建了DestinationRule资源,这里将尝试复用,需要保证subset不冲突
(3)如果您在网关所在的命名空间创建了相关服务的VirtualService资源,且gateways包含目标Gateway,这里将尝试复用
其他注意事项
(1)全链路灰度创建的DestinationRule资源默认使用csm-traffic-tag标签进行服务分组
(2)全链路灰度创建的流量标签规则默认使用x-csm-traffic-tag头部对请求进行路由控制,比如请求带上了x-csm-traffic-tag: test头部,预期会访问微服务内带了csm-traffic-tag标签值为test的版本
(3)Service需要带上withServiceMesh: true标签