ASMSwimLaneGroup和ASMSwimLane CRD說明
ASM通過流量泳道組(ASMSwimLaneGroup)和流量泳道(ASMSwimLane)兩種資源實(shí)現(xiàn)針對(duì)服務(wù)調(diào)用鏈路的流量泳道能力。流量泳道能夠?qū)?yīng)用的相關(guān)版本(或者其他特征)隔離成一個(gè)獨(dú)立的運(yùn)行環(huán)境(即泳道),然后通過設(shè)置泳道引流規(guī)則,將滿足規(guī)則的請(qǐng)求流量路由到目標(biāo)版本(或者其他特征)的應(yīng)用上。
配置示例
以下配置表示為Kubernetes集群中default命名空間下的服務(wù)mocka、mockb、mockc建立一個(gè)名為mock的泳道組。泳道組中包含v1和v2兩條流量泳道,分別對(duì)應(yīng)這些服務(wù)的v1和v2版本(通過Pod上的version標(biāo)簽區(qū)分版本)。當(dāng)mocka、mockb、mockc相互發(fā)送請(qǐng)求時(shí),將只會(huì)調(diào)用相同版本的服務(wù),保證v1和v2版本的隔離。同時(shí),基于istio-system下名為ingressgateway的網(wǎng)關(guān)規(guī)則創(chuàng)建虛擬服務(wù),為兩條泳道進(jìn)行引流。
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定義了一個(gè)流量泳道組。流量泳道組主要定義多條流量泳道需要共享的信息,包括需要為哪些服務(wù)創(chuàng)建流量泳道隔離環(huán)境、泳道引流的虛擬服務(wù)規(guī)則需要基于哪個(gè)網(wǎng)關(guān)規(guī)則創(chuàng)建等。一個(gè)流量泳道組可以與多個(gè)流量泳道建立關(guān)聯(lián),流量泳道可以通過swimlane-group: {ASMSwimLaneGroup名稱}
的方式關(guān)聯(lián)泳道組。
ASMSwimLaneGroupSpec
ASMSwimLaneGroupSpec是ASMSwimLaneGroup的核心配置,即spec字段的部分。
字段 | 類型 | 是否必選 | 說明 |
services | 是 | 指定需要為K8s集群中的哪些服務(wù)創(chuàng)建泳道隔離環(huán)境。通過K8s Service的名稱、命名空間、所在K8s集群ID與集群名稱來引用K8s集群中的服務(wù)。 | |
ingress | 是 | 指定流量泳道組的入口網(wǎng)關(guān)的相關(guān)配置。入口網(wǎng)關(guān)的主要作用是為泳道組中的多個(gè)版本服務(wù)進(jìn)行引流。 | |
isPermissive | bool | 否 | 指定流量泳道組的模式。取值如下:
關(guān)于嚴(yán)格模式和寬松模式的流量泳道的詳情,請(qǐng)參見流量泳道概述。 |
permissiveModeConfiguration | 否 | 寬松模式下泳道組的相關(guān)配置,當(dāng)泳道組模式為寬松模式時(shí)必須配置。 | |
defaultTrafficPolicyPatch | 否 | 應(yīng)用到泳道組內(nèi)所有服務(wù)的目的地流量策略。使用此字段時(shí),泳道組將為所有泳道組內(nèi)的所有服務(wù)的目標(biāo)規(guī)則(DestinationRule)中增加指定的流量策略聲明。 說明 使用此字段需要ASM實(shí)例版本在1.21.6.104及以上。 | |
defaultHttpRoutePatch | 否 | 應(yīng)用到泳道組內(nèi)所有服務(wù)的HTTP路由操作。泳道組將為泳道組內(nèi)的所有服務(wù)聲明虛擬服務(wù)(VirtualService),使用此字段時(shí),泳道組將會(huì)向泳道組內(nèi)每個(gè)服務(wù)的虛擬服務(wù)中增加指定的流量路由操作字段(如rewrite、timeout等)。注意,為防止破壞泳道流量規(guī)則,您無(wú)法指定match、name、route、delegate字段。 說明 使用此字段需要服務(wù)網(wǎng)格實(shí)例版本在1.21.6.104及以上。 |
ClusterServiceRef
每個(gè)ClusterServiceRef引用一個(gè)部署在K8s集群中的Service。流量泳道通過這些引用決定為哪些服務(wù)創(chuàng)建流量隔離環(huán)境。
字段 | 類型 | 是否必選 | 說明 |
name | string | 是 | K8s Service的名稱。 |
namespace | string | 是 | K8s Service所在的命名空間。 |
cluster | 否 | K8s集群的引用信息。 | |
trafficPolicyPatch | 否 | 應(yīng)用到具體泳道組內(nèi)服務(wù)上的目的地流量策略。如果被指定,此字段將覆蓋ASMSwimLaneGroupSpec下的defaultTrafficPolicyPatch。 說明 使用此字段需要服務(wù)網(wǎng)格實(shí)例版本在1.21.6.104及以上。 | |
httpRoutePatch | 否 | 應(yīng)用到具體泳道組內(nèi)服務(wù)的HTTP路由操作。如果被指定,此字段將覆蓋ASMSwimLaneGroupSpec下的defaultHttpRoutePatch。 說明 使用此字段需要服務(wù)網(wǎng)格實(shí)例版本在1.21.6.104及以上。 |
ClusterRef
ClusterRef提供一個(gè)添加到ASM實(shí)例中的K8s集群的引用信息。
字段 | 類型 | 是否必選 | 說明 |
name | string | 否 | K8s集群的顯示名稱。 |
id | string | 否 | K8s集群的集群ID。 |
SwimLaneGroupIngressConfiguration
SwimLaneGroupIngressConfiguration定義了為泳道組內(nèi)服務(wù)進(jìn)行引流的入口網(wǎng)關(guān)的相關(guān)信息。
字段 | 類型 | 是否必選 | 說明 |
gateway | 是 | 與入口網(wǎng)關(guān)關(guān)聯(lián)的網(wǎng)關(guān)規(guī)則(Gateway)的相關(guān)信息。 | |
ingressRouting | 否 | 對(duì)泳道組內(nèi)服務(wù)進(jìn)行引流的引流規(guī)則相關(guān)配置。 說明 使用此字段需要網(wǎng)格實(shí)例版本在1.21.6.92及以上。 |
SwimLaneGatewayConfiguration
SwimLaneGatewayConfiguration定義了與入口網(wǎng)關(guān)相關(guān)聯(lián)的網(wǎng)關(guān)規(guī)則(Gateway)的相關(guān)信息。
字段 | 類型 | 是否必選 | 說明 |
name | string | 是 | 網(wǎng)關(guān)規(guī)則的名稱。 |
namespace | string | 是 | 網(wǎng)關(guān)規(guī)則所在命名空間。 |
type | string | 是 | 網(wǎng)關(guān)規(guī)則的類型,必須填寫為 |
SwimLaneGroupIngressRouteConfiguration
SwimLaneGroupIngressRouteConfiguration定義了對(duì)泳道組內(nèi)服務(wù)進(jìn)行引流的引流規(guī)則相關(guān)配置。
字段 | 類型 | 是否必填 | 說明 |
ingressRoutingStrategy | string | 否 | 對(duì)泳道組內(nèi)服務(wù)進(jìn)行引流的策略,可以指定兩個(gè)選項(xiàng):
|
weightedRoutingRule | 否 | 在基于權(quán)重的引流策略下,匹配所有請(qǐng)求時(shí)使用的統(tǒng)一匹配規(guī)則。僅在ingressRoutingStrategy值為weighted時(shí)起效。 |
WeightedSwimLaneIngressConfiguration
WeightedSwimLaneIngressConfiguration指定了基于權(quán)重的引流策略下匹配所有請(qǐng)求時(shí)使用的統(tǒng)一匹配規(guī)則。
字段 | 類型 | 是否必填 | 說明 |
hosts | []string | 是 | 匹配請(qǐng)求的域名,該域名必須聲明在泳道組關(guān)聯(lián)的網(wǎng)關(guān)規(guī)則(Gateway)中。 |
requestMatches | 否 | 對(duì)請(qǐng)求URI及請(qǐng)求頭進(jìn)行匹配的匹配條件。 |
PermissiveSwimLaneGroupConfiguration
PermissiveSwimLaneGroupConfiguration定義了在寬松模式下,流量泳道組需要指定的參數(shù)。
字段 | 類型 | 是否必選 | 說明 |
routeHeader | string | 是 | 寬松模式下,流量泳道的引流請(qǐng)求頭名稱。 引流請(qǐng)求頭用于請(qǐng)求在請(qǐng)求調(diào)用鏈路中傳遞時(shí)確定請(qǐng)求所處泳道。 在寬松模式下,請(qǐng)求經(jīng)入口網(wǎng)關(guān)轉(zhuǎn)發(fā)到達(dá)上游服務(wù)時(shí),必須攜帶引流請(qǐng)求頭,以確定請(qǐng)求所處泳道。 |
traceHeader | string | 是 | 寬松模式下,流量泳道使用的鏈路透?jìng)髡?qǐng)求頭名稱。 鏈路透?jìng)髡?qǐng)求頭必須具有以下性質(zhì):
|
fallbackTarget | string | 否 | 寬松模式下的基線泳道名稱。當(dāng)路由到泳道對(duì)應(yīng)版本的服務(wù)失敗時(shí),流量將回退到服務(wù)的基線版本。 |
ASMSwimLane字段說明
ASMSwimLane定義一條流量泳道。流量泳道定義主要包含與服務(wù)的具體版本(或其他特征)相關(guān)的信息。一條流量泳道通過打上swimlane-group: {ASMSwimLaneGroup名稱}
標(biāo)簽的方式與一個(gè)泳道組建立關(guān)聯(lián)。
ASMSwimLaneSpec
ASMSwimLaneSpec是ASMSwimLane的核心配置,即spec的部分。
字段 | 類型 | 是否必選 | 說明 |
labelSelector | map<string, string> | 是 | 一個(gè)或多個(gè)標(biāo)簽,用來匹配屬于此泳道的服務(wù)Pod。一般使用帶有版本信息的標(biāo)簽對(duì)泳道內(nèi)的Pod進(jìn)行匹配,如 |
services | 否 | 指定泳道內(nèi)部署了哪些服務(wù)。和ASMSwimLaneGroupSpec中的services字段相同,通過K8s Service的名稱、命名空間、所在K8s集群ID與集群名稱來引用K8s集群中的服務(wù)。
| |
ingressRules | 否 | 泳道對(duì)應(yīng)的引流規(guī)則定義。該引流規(guī)則定義將轉(zhuǎn)化為泳道組關(guān)聯(lián)的入口網(wǎng)關(guān)上的虛擬服務(wù)資源,負(fù)責(zé)將請(qǐng)求從網(wǎng)關(guān)上路由到泳道中的服務(wù)。 如果不填寫ingressRules字段,也可以手動(dòng)創(chuàng)建網(wǎng)關(guān)上的虛擬服務(wù)資源為泳道內(nèi)的服務(wù)引流。 | |
ingressWeight | 否 | 當(dāng)泳道組使用基于權(quán)重的引流策略時(shí),使用此字段指定每條泳道對(duì)應(yīng)的引流權(quán)重比例。泳道組將依據(jù)不同泳道聲明的引流權(quán)重向該條泳道的入口服務(wù)轉(zhuǎn)發(fā)一定比例的請(qǐng)求。僅當(dāng)ingressRoutingStrategy值為weighted時(shí)起效。 |
SwimLaneIngressRule
SwimLaneIngressRule指定了網(wǎng)關(guān)為一條泳道內(nèi)服務(wù)進(jìn)行引流的路由規(guī)則,該規(guī)則將轉(zhuǎn)化為網(wǎng)關(guān)上的虛擬服務(wù)。
字段 | 類型 | 是否必選 | 說明 |
online | bool | 是 | 指定引流規(guī)則是否生效。當(dāng)online為true時(shí),網(wǎng)關(guān)上的虛擬服務(wù)才會(huì)對(duì)應(yīng)被創(chuàng)建。 |
hosts | string[] | 是 | 引流規(guī)則匹配的域名。對(duì)應(yīng)虛擬服務(wù)中的hosts字段。 |
name | string | 否 | 引流規(guī)則名稱。對(duì)應(yīng)虛擬服務(wù)中HTTP路由的名稱。 |
match | 否 | 引流規(guī)則的請(qǐng)求匹配條件,將對(duì)應(yīng)轉(zhuǎn)化為虛擬服務(wù)中HTTP路由的match字段。 | |
route | 是 | 引流規(guī)則的引流目的服務(wù),將對(duì)應(yīng)轉(zhuǎn)化為虛擬服務(wù)中HTTP路由的route字段。 |
SwimLaneIngressWeight
字段 | 類型 | 是否必選 | 說明 |
weight | int | 否 | 泳道的引流權(quán)重?cái)?shù)值,不指定則為0。該數(shù)值將通過與其它泳道的引流權(quán)重比較來確定最終的引流比例。 |
destination | 是 | 在基于權(quán)重的引流策略下,指定應(yīng)將請(qǐng)求轉(zhuǎn)發(fā)到的服務(wù)實(shí)例。 |
SwimLaneIngressRequestMatch
SwimLaneIngressRequestMatch是引流規(guī)則的請(qǐng)求匹配條件。
字段 | 類型 | 是否必選 | 說明 |
uri | 否 | 請(qǐng)求URI匹配條件。示例如下:
| |
headers | map<string, StringMatch> | 否 | 請(qǐng)求Header匹配條件。Map的鍵必須小寫并使用短劃線(-),代表Header的名稱,例如x-request-id。Map的值同為StringMatch類型,示例如下:
|
StringMatch
StringMatch指定一個(gè)字符串匹配條件,用于指定如何匹配請(qǐng)求的URI和Header。
字段 | 類型 | 是否必選 | 說明 | |
任選其一 | exact | string | 否 | 精確的字符串匹配。 |
prefix | string | 否 | 基于前綴的匹配。 | |
regex | string | 否 | RE2風(fēng)格的基于正則表達(dá)式的匹配。更多信息,請(qǐng)參見wiki。 |
SwimLaneIngressRoute
SwimLaneIngressRoute指定了引流規(guī)則的引流目的服務(wù)。
字段 | 類型 | 是否必選 | 說明 |
destination | 是 | 指定應(yīng)將請(qǐng)求轉(zhuǎn)發(fā)到的服務(wù)實(shí)例。 |
RouteDestination
字段 | 類型 | 是否必選 | 說明 |
host | string | 是 | K8s服務(wù)域名,例如 |
portNum | int | 否 | k8s服務(wù)端口。如 說明 使用此字段需要網(wǎng)格實(shí)例版本在1.21.4.104及以上。 |
相關(guān)文檔
關(guān)于流量泳道的概念、使用場(chǎng)景,以及嚴(yán)格與寬松兩種模式的流量泳道對(duì)比,請(qǐng)參見流量泳道概述。
關(guān)于如何使用嚴(yán)格模式流量泳道實(shí)現(xiàn)全鏈路流量管理,請(qǐng)參見使用嚴(yán)格模式流量泳道。
關(guān)于如何使用寬松模式流量泳道實(shí)現(xiàn)全鏈路流量管理,請(qǐng)參見使用寬松模式流量泳道。