ASMSwimLaneGroup和ASMSwimLane CRD说明

ASM通过流量泳道组(ASMSwimLaneGroup)和流量泳道(ASMSwimLane)两种资源实现针对服务调用链路的流量泳道能力。流量泳道能够将应用的相关版本(或者其他特征)隔离成一个独立的运行环境(即泳道),然后通过设置泳道引流规则,将满足规则的请求流量路由到目标版本(或者其他特征)的应用上。

配置示例

以下配置表示为Kubernetes集群中default命名空间下的服务mocka、mockb、mockc建立一个名为mock的泳道组。泳道组中包含v1和v2两条流量泳道,分别对应这些服务的v1和v2版本(通过Pod上的version标签区分版本)。当mocka、mockb、mockc相互发送请求时,将只会调用相同版本的服务,保证v1和v2版本的隔离。同时,基于istio-system下名为ingressgateway的网关规则创建虚拟服务,为两条泳道进行引流。

展开查看YAML

apiVersion: istio.alibabacloud.com/v1
kind: ASMSwimLaneGroup
metadata:
  name: mock
spec:
  ingress:
    gateway:
      name: ingressgateway
      namespace: istio-system
      type: ASM
  services:
  - name: mocka
    namespace: default
  - name: mockb
    namespace: default
  - name: mockc
    namespace: default
---
apiVersion: istio.alibabacloud.com/v1
kind: ASMSwimLane
metadata:
  labels:
    swimlane-group: mock
  name: v1
spec:
  ingressRules:
  - hosts:
    - '*'
    match:
      uri:
        exact: /mock
    name: r1
    online: true
    route:
      destination:
        host: mocka.default.svc.cluster.local
  labelSelector:
    version: v1
---
apiVersion: istio.alibabacloud.com/v1
kind: ASMSwimLane
metadata:
  labels:
    swimlane-group: mock
  name: v2
spec:
  ingressRules:
  - hosts:
    - '*'
    match:
      uri:
        exact: /mock
    name: r2
    online: true
    route:
      destination:
        host: mocka.default.svc.cluster.local
  labelSelector:
    version: v2

ASMSwimLaneGroup字段说明

ASMSwimLaneGroup定义了一个流量泳道组。流量泳道组主要定义多条流量泳道需要共享的信息,包括需要为哪些服务创建流量泳道隔离环境、泳道引流的虚拟服务规则需要基于哪个网关规则创建等。一个流量泳道组可以与多个流量泳道建立关联,流量泳道可以通过swimlane-group: {ASMSwimLaneGroup名称}的方式关联泳道组。

ASMSwimLaneGroupSpec

ASMSwimLaneGroupSpec是ASMSwimLaneGroup的核心配置,即spec字段的部分。

字段

类型

是否必选

说明

services

ClusterServiceRef[]

指定需要为K8s集群中的哪些服务创建泳道隔离环境。通过K8s Service的名称、命名空间、所在K8s集群ID与集群名称来引用K8s集群中的服务。

ingress

SwimLaneGroupIngressConfiguration

指定流量泳道组的入口网关的相关配置。入口网关的主要作用是为泳道组中的多个版本服务进行引流。

isPermissive

bool

指定流量泳道组的模式。取值如下:

  • true:宽松模式。

  • false或不填:严格模式。

关于严格模式和宽松模式的流量泳道的详情,请参见流量泳道概述

permissiveModeConfiguration

PermissiveSwimLaneGroupConfiguration

宽松模式下泳道组的相关配置,当泳道组模式为宽松模式时必须配置。

defaultTrafficPolicyPatch

TrafficPolicy

应用到泳道组内所有服务的目的地流量策略。使用此字段时,泳道组将为所有泳道组内的所有服务的目标规则(DestinationRule)中增加指定的流量策略声明。

说明

使用此字段需要ASM实例版本在1.21.6.104及以上。

defaultHttpRoutePatch

HTTPRoute

应用到泳道组内所有服务的HTTP路由操作。泳道组将为泳道组内的所有服务声明虚拟服务(VirtualService),使用此字段时,泳道组将会向泳道组内每个服务的虚拟服务中增加指定的流量路由操作字段(如rewrite、timeout等)。注意,为防止破坏泳道流量规则,您无法指定match、name、route、delegate字段。

说明

使用此字段需要服务网格实例版本在1.21.6.104及以上。

ClusterServiceRef

每个ClusterServiceRef引用一个部署在K8s集群中的Service。流量泳道通过这些引用决定为哪些服务创建流量隔离环境。

字段

类型

是否必选

说明

name

string

K8s Service的名称。

namespace

string

K8s Service所在的命名空间。

cluster

ClusterRef

K8s集群的引用信息。

trafficPolicyPatch

TrafficPolicy

应用到具体泳道组内服务上的目的地流量策略。如果被指定,此字段将覆盖ASMSwimLaneGroupSpec下的defaultTrafficPolicyPatch。

说明

使用此字段需要服务网格实例版本在1.21.6.104及以上。

httpRoutePatch

HTTPRoute

应用到具体泳道组内服务的HTTP路由操作。如果被指定,此字段将覆盖ASMSwimLaneGroupSpec下的defaultHttpRoutePatch

说明

使用此字段需要服务网格实例版本在1.21.6.104及以上。

ClusterRef

ClusterRef提供一个添加到ASM实例中的K8s集群的引用信息。

字段

类型

是否必选

说明

name

string

K8s集群的显示名称。

id

string

K8s集群的集群ID。

SwimLaneGroupIngressConfiguration

SwimLaneGroupIngressConfiguration定义了为泳道组内服务进行引流的入口网关的相关信息。

字段

类型

是否必选

说明

gateway

SwimLaneGatewayConfiguration

与入口网关关联的网关规则(Gateway)的相关信息。

ingressRouting

SwimLaneGroupIngressRouteConfiguration

对泳道组内服务进行引流的引流规则相关配置。

说明

使用此字段需要网格实例版本在1.21.6.92及以上。

SwimLaneGatewayConfiguration

SwimLaneGatewayConfiguration定义了与入口网关相关联的网关规则(Gateway)的相关信息。

字段

类型

是否必选

说明

name

string

网关规则的名称。

namespace

string

网关规则所在命名空间。

type

string

网关规则的类型,必须填写为ASM,即服务网格ASM提供的网关规则。关于网关规则的字段说明,请参见网关规则(Gateway)CRD说明

SwimLaneGroupIngressRouteConfiguration

SwimLaneGroupIngressRouteConfiguration定义了对泳道组内服务进行引流的引流规则相关配置。

字段

类型

是否必填

说明

ingressRoutingStrategy

string

对泳道组内服务进行引流的策略,可以指定两个选项:

  • rule_based:默认的引流策略,每条泳道将使用ingressRules指定自己的请求匹配规则,匹配到某条匹配规则的请求将发往匹配规则对应的泳道。

  • weighted:基于权重的引流策略,泳道组内所有的服务将基于统一的请求匹配规则对请求进行匹配,匹配到的请求将以指定的比例发往不同泳道中的服务。

weightedRoutingRule

WeightedSwimLaneIngressConfiguration

在基于权重的引流策略下,匹配所有请求时使用的统一匹配规则。仅在ingressRoutingStrategy值为weighted时起效。

WeightedSwimLaneIngressConfiguration

WeightedSwimLaneIngressConfiguration指定了基于权重的引流策略下匹配所有请求时使用的统一匹配规则。

字段

类型

是否必填

说明

hosts

[]string

匹配请求的域名,该域名必须声明在泳道组关联的网关规则(Gateway)中。

requestMatches

SwimLaneIngressRequestMatch

对请求URI及请求头进行匹配的匹配条件。

PermissiveSwimLaneGroupConfiguration

PermissiveSwimLaneGroupConfiguration定义了在宽松模式下,流量泳道组需要指定的参数。

字段

类型

是否必选

说明

routeHeader

string

宽松模式下,流量泳道的引流请求头名称。

引流请求头用于请求在请求调用链路中传递时确定请求所处泳道。

在宽松模式下,请求经入口网关转发到达上游服务时,必须携带引流请求头,以确定请求所处泳道。

traceHeader

string

宽松模式下,流量泳道使用的链路透传请求头名称。

链路透传请求头必须具有以下性质:

  • 在请求的调用链路上保持传递。

  • 当链路透传请求头与引流请求头不相同时,需要链路透传请求头具有Trace ID的性质,可以使用Trace ID作为链路透传请求头(如x-b3-trace-id)。

fallbackTarget

string

宽松模式下的基线泳道名称。当路由到泳道对应版本的服务失败时,流量将回退到服务的基线版本。

ASMSwimLane字段说明

ASMSwimLane定义一条流量泳道。流量泳道定义主要包含与服务的具体版本(或其他特征)相关的信息。一条流量泳道通过打上swimlane-group: {ASMSwimLaneGroup名称}标签的方式与一个泳道组建立关联。

ASMSwimLaneSpec

ASMSwimLaneSpec是ASMSwimLane的核心配置,即spec的部分。

字段

类型

是否必选

说明

labelSelector

map<string, string>

一个或多个标签,用来匹配属于此泳道的服务Pod。一般使用带有版本信息的标签对泳道内的Pod进行匹配,如version: v1

services

ClusterServiceRef[]

指定泳道内部署了哪些服务。和ASMSwimLaneGroupSpec中的services字段相同,通过K8s Service的名称、命名空间、所在K8s集群ID与集群名称来引用K8s集群中的服务。

  • 当关联的泳道组为严格模式时,此字段无需填写。泳道内默认必须包含泳道组的全部服务。

  • 当关联的泳道组为宽松模式时,此字段必须填写。此时ASMSwimLane的services字段必须为关联的ASMSwimLaneGroup的services字段的子集。当请求调用在泳道内传递时,如果请求目的地服务没有定义在此泳道中,则会对应调用基线泳道中的对应服务。

ingressRules

SwimLaneIngressRule[]

泳道对应的引流规则定义。该引流规则定义将转化为泳道组关联的入口网关上的虚拟服务资源,负责将请求从网关上路由到泳道中的服务。

如果不填写ingressRules字段,也可以手动创建网关上的虚拟服务资源为泳道内的服务引流。

ingressWeight

SwimLaneIngressWeight

当泳道组使用基于权重的引流策略时,使用此字段指定每条泳道对应的引流权重比例。泳道组将依据不同泳道声明的引流权重向该条泳道的入口服务转发一定比例的请求。仅当ingressRoutingStrategy值为weighted时起效。

SwimLaneIngressRule

SwimLaneIngressRule指定了网关为一条泳道内服务进行引流的路由规则,该规则将转化为网关上的虚拟服务。

字段

类型

是否必选

说明

online

bool

指定引流规则是否生效。当online为true时,网关上的虚拟服务才会对应被创建。

hosts

string[]

引流规则匹配的域名。对应虚拟服务中的hosts字段。

name

string

引流规则名称。对应虚拟服务中HTTP路由的名称。

match

SwimLaneIngressRequestMatch

引流规则的请求匹配条件,将对应转化为虚拟服务中HTTP路由的match字段。

route

SwimLaneIngressRoute

引流规则的引流目的服务,将对应转化为虚拟服务中HTTP路由的route字段。

SwimLaneIngressWeight

字段

类型

是否必选

说明

weight

int

泳道的引流权重数值,不指定则为0。该数值将通过与其它泳道的引流权重比较来确定最终的引流比例。

destination

RouteDestination

在基于权重的引流策略下,指定应将请求转发到的服务实例。

SwimLaneIngressRequestMatch

SwimLaneIngressRequestMatch是引流规则的请求匹配条件。

字段

类型

是否必选

说明

uri

StringMatch

请求URI匹配条件。示例如下:

  • exact: "value":精确的字符串匹配。

  • prefix: "value":前缀匹配。

  • regex: "value":RE2样式的正则表达式匹配。更多信息,请参见Syntax

headers

map<string, StringMatch>

请求Header匹配条件。Map的键必须小写并使用短划线(-),代表Header的名称,例如x-request-id。Map的值同为StringMatch类型,示例如下:

  • exact: "value":精确的字符串匹配。

  • prefix: "value":前缀匹配。

  • regex: "value":RE2样式的正则表达式匹配。更多信息,请参见Syntax

StringMatch

StringMatch指定一个字符串匹配条件,用于指定如何匹配请求的URI和Header。

字段

类型

是否必选

说明

任选其一

exact

string

精确的字符串匹配。

prefix

string

基于前缀的匹配。

regex

string

RE2风格的基于正则表达式的匹配。更多信息,请参见wiki

SwimLaneIngressRoute

SwimLaneIngressRoute指定了引流规则的引流目的服务。

字段

类型

是否必选

说明

destination

RouteDestination

指定应将请求转发到的服务实例。

RouteDestination

字段

类型

是否必选

说明

host

string

K8s服务域名,例如mocka.default.svc.cluster.local

portNum

int

k8s服务端口。如8000

说明

使用此字段需要网格实例版本在1.21.4.104及以上。

相关文档