全部產品
Search
文件中心

Alibaba Cloud Service Mesh:ASMSwimLaneGroup和ASMSwimLane CRD說明

更新時間:Sep 12, 2024

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或不填:strict 模式。

關於strict 模式和寬鬆模式的流量泳道的詳情,請參見流量泳道概述。

permissiveModeConfiguration

PermissiveSwimLaneGroupConfiguration

否

寬鬆模式下泳道組的相關配置,當泳道組模式為寬鬆模式時必須配置。

ClusterServiceRef

每個ClusterServiceRef引用一個部署在K8s叢集中的Service。流量泳道通過這些引用決定為哪些服務建立流量隔離環境。

欄位

類型

是否必選

說明

name

string

是

K8s Service的名稱。

namespace

string

是

K8s Service所在的命名空間。

cluster

ClusterRef

否

K8s叢集的引用資訊。

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提供的網關規則。

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叢集中的服務。

  • 當關聯的泳道組為strict 模式時,此欄位無需填寫。泳道內預設必須包含泳道組的全部服務。

  • 當關聯的泳道組為寬鬆模式時,此欄位必須填寫。此時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樣式的Regex匹配。更多資訊,請參見Syntax。

headers

map<string, StringMatch>

否

請求Header匹配條件。Map的鍵必須小寫並使用短劃線(-),代表Header的名稱,例如x-request-id。Map的值同為StringMatch類型,樣本如下:

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

  • prefix: "value":首碼匹配。

  • regex: "value":RE2樣式的Regex匹配。更多資訊,請參見Syntax。

StringMatch

StringMatch指定一個字串匹配條件,用於指定如何匹配請求的URI和Header。

欄位

類型

是否必選

說明

任選其一

exact

string

否

精確的字串匹配。

prefix

string

否

基於首碼的匹配。

regex

string

否

RE2風格的基於Regex的匹配。更多資訊,請參見wiki。

SwimLaneIngressRoute

SwimLaneIngressRoute指定了引流規則的引流目的服務。

欄位

類型

是否必選

說明

destination

RouteDestination

是

指定應將請求轉寄到的服務執行個體。

RouteDestination

欄位

類型

是否必選

說明

host

string

是

K8s服務網域名稱,例如mocka.default.svc.cluster.local。

portNum

int

否

k8s服務連接埠。如8000。

說明

使用此欄位需要網格執行個體版本在1.21.4.104及以上。

相關文檔