Open sczyh30 opened 2 years ago
社区在 https://github.com/opensergo/opensergo-specification/pull/29 中重构并完善了流量路由 spec 的设计。
如果有一个流量匹配到多个TrafficLabelRule
,打上多个trafficLabel
,会路由到哪些workload呢?
是否需要配置一个优先级字段?
@GuoHaoZai 新的模型并没有使用TrafficLabelRule
这个设计,可以再看一下。
(English version TBD...)
流量路由,顾名思义就是将具有某些属性特征的流量,路由到指定的目标。流量路由是流量治理中重要的一环,我们可以基于流量路由标准来实现各种场景,如全链路灰度、金丝雀发布、容灾路由等。
流量路由规则 (v1alpha1) 主要分为三部分:
WorkloadLabelRule
):将某一组 workload(如 Kubernetes Deployment, Statefulset 或者一组 pod,或某个 JVM 进程,甚至是一组 DB 实例)打上对应的标签TrafficLabelRule
):将具有某些属性特征的流量,打上对应的标签Workload 打标
Workload 标签规则 (
WorkloadLabelRule
) 将某一组 workload(如 Kubernetes Deployment, Statefulset 或者一组 pod,或某个 JVM 进程,甚至是一组 DB、缓存实例)打上对应的标签。对于通用的 workload 打标场景,我们可以利用 WorkloadLabelRule CRD 进行打标。特别地,对于 Kubernetes workload,我们可以通过直接在 workload 上打 label 的方式进行标签绑定,如在 Deployment 上打上
traffic.opensergo.io/label: gray
标签代表灰度。一个标准的 workload 划分应该类似于:
流量打标
流量标签规则 (
TrafficLabelRule
) 将具有某些属性特征的流量,打上对应的标签。示例 YAML:按照标签匹配进行路由
在具体的路由过程中,接入了 OpenSergo 的微服务框架、Service Mesh 的 proxy 中,只要实现了 OpenSergo 标准并进行上述规则配置,那么就能识别流量的标签和 workload 的标签。带 label 的流量就会流转到对应 label 的实例分组中;如果集群中没有该 label 的实例分组(即没有 workload 带有这个标签),则默认 fallback 到没有标签的实例上。后续版本标准将提供未匹配流量的兜底配置方式。
Updates
欢迎社区一起参与讨论。