Service Mesh (ASM) menyediakan dua CustomResourceDefinitions (CRDs) untuk manajemen traffic lane: ASMSwimLaneGroup dan ASMSwimLane. Keduanya memungkinkan Anda mengisolasi versi layanan tertentu atau layanan dengan karakteristik tertentu ke dalam lingkungan runtime independen yang disebut traffic lane, lalu mengarahkan permintaan yang sesuai ke versi tersebut.
Cara kerja CRD ini secara bersamaan
ASMSwimLaneGroup menentukan apa yang diisolasi: layanan-layanan yang berpartisipasi dalam traffic lane dan gerbang masuk (ingress gateway) yang mengarahkan permintaan ke layanan tersebut. ASMSwimLane menentukan bagaimana isolasi dilakukan: versi pod mana yang termasuk dalam suatu lane dan aturan routing apa yang berlaku.
Hubungan antara keduanya:
Satu ASMSwimLaneGroup mengelompokkan beberapa layanan dan menentukan gerbang masuk bersama.
Beberapa resource ASMSwimLane diasosiasikan dengan grup tersebut melalui label
swimlane-group: <group-name>. Setiap lane menargetkan versi spesifik dari layanan-layanan yang dikelompokkan.
ASM mendukung dua mode lane:
Strict mode (
isPermissive: falseatau tidak diatur) — Setiap lane harus mencakup semua layanan yang didefinisikan dalam grup.Permissive mode (
isPermissive: true) — Lane dapat mencakup subset layanan dari grup. Permintaan ke layanan yang tidak tersedia dialihkan ke baseline lane.
Field ASMSwimLaneGroup
ASMSwimLaneGroup mendefinisikan grup traffic lane—konfigurasi bersama untuk layanan dan routing ingress di berbagai lane.
ASMSwimLaneGroupSpec
Bagian spec merupakan konfigurasi inti.
| Field | Type | Required | Description |
|---|---|---|---|
services | ClusterServiceRef[] | Ya | Layanan dalam kluster Kubernetes yang berpartisipasi dalam traffic lane. |
ingress | SwimLaneGroupIngressConfiguration | Ya | Konfigurasi gerbang masuk untuk mengarahkan permintaan ke versi layanan yang berbeda. |
isPermissive | bool | Tidak | Mode grup lane. true: permissive mode. false atau tidak diatur: strict mode. Untuk detail selengkapnya, lihat Ikhtisar traffic lane. |
permissiveModeConfiguration | PermissiveSwimLaneGroupConfiguration | Tidak | Pengaturan mode permissive. Wajib ditentukan saat isPermissive bernilai true. |
ClusterServiceRef
Mereferensikan layanan Kubernetes yang berpartisipasi dalam traffic lane.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Ya | Nama layanan Kubernetes. |
namespace | string | Ya | Namespace layanan Kubernetes. |
cluster | ClusterRef | Tidak | Referensi ke kluster Kubernetes. Gunakan ini saat instans ASM mengelola beberapa kluster. |
ClusterRef
Mengidentifikasi kluster Kubernetes yang ditambahkan ke instans ASM.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Tidak | Nama tampilan kluster Kubernetes. |
id | string | Tidak | ID kluster Kubernetes. |
SwimLaneGroupIngressConfiguration
Mengonfigurasi gerbang masuk yang mengarahkan permintaan ke layanan dalam grup lane.
| Field | Type | Required | Description |
|---|---|---|---|
gateway | SwimLaneGatewayConfiguration | Ya | Gateway Istio yang diasosiasikan dengan gerbang masuk. |
ingressRouting | SwimLaneGroupIngressRouteConfiguration | Tidak | Strategi routing permintaan untuk grup lane. Catatan Memerlukan ASM v1.21.6.92 atau lebih baru. |
SwimLaneGatewayConfiguration
Menentukan gateway Istio yang diasosiasikan dengan gerbang masuk.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Ya | Nama gateway Istio. |
namespace | string | Ya | Namespace gateway Istio. |
type | string | Ya | Jenis gateway Istio. Atur nilai ini ke ASM, yang menunjukkan gateway Istio yang disediakan oleh ASM. |
SwimLaneGroupIngressRouteConfiguration
Menentukan strategi routing permintaan untuk grup lane.
| Field | Type | Required | Description |
|---|---|---|---|
ingressRoutingStrategy | string | Tidak | Strategi routing. Nilai yang valid: rule_based (default) — setiap lane menentukan aturan routing sendiri melalui ingressRules. weighted — permintaan didistribusikan ke berbagai lane berdasarkan bobot menggunakan aturan routing bersama. |
weightedRoutingRule | WeightedSwimLaneIngressConfiguration | Tidak | Aturan pencocokan permintaan terpadu untuk routing berbasis bobot. Berlaku hanya saat ingressRoutingStrategy bernilai weighted. |
WeightedSwimLaneIngressConfiguration
Menentukan aturan pencocokan permintaan terpadu yang digunakan dengan routing berbasis bobot.
| Field | Type | Required | Description |
|---|---|---|---|
hosts | []string | Ya | Host yang dicocokkan. Harus dideklarasikan dalam gateway Istio yang diasosiasikan dengan grup lane. |
requestMatches | SwimLaneIngressRequestMatch | Tidak | Kondisi pencocokan URI dan header. |
PermissiveSwimLaneGroupConfiguration
Mengonfigurasi mode permissive untuk grup traffic lane. Wajib ditentukan saat isPermissive bernilai true.
| Field | Type | Required | Description |
|---|---|---|---|
routeHeader | string | Ya | Header permintaan yang menentukan lane mana yang dimiliki permintaan saat melewati rantai panggilan. Permintaan yang masuk melalui gerbang masuk harus membawa header ini. |
traceHeader | string | Ya | Header transmisi langsung end-to-end (E2E) yang dipropagasikan sepanjang rantai panggilan. Harus unik per permintaan jika berbeda dari routeHeader. Contoh: x-b3-trace-id. |
fallbackTarget | string | Tidak | Nama baseline lane. Saat permintaan tidak dapat mencapai versi layanan target di lane yang ditentukan, permintaan dialihkan ke layanan yang sama di baseline lane ini. |
Field ASMSwimLane
ASMSwimLane mendefinisikan satu traffic lane—sekumpulan versi layanan yang diisolasi bersama. Asosiasikan lane dengan grup lane dengan menambahkan label swimlane-group: <group-name> ke resource ASMSwimLane.
ASMSwimLaneSpec
Bagian spec merupakan konfigurasi inti.
| Field | Type | Required | Description |
|---|---|---|---|
labelSelector | map<string, string> | Ya | Label yang digunakan untuk mencocokkan pod untuk layanan dalam lane ini. Biasanya menggunakan label versi, seperti version: v1. |
services | ClusterServiceRef[] | Tidak | Layanan yang dideploy dalam lane ini. Dalam strict mode, abaikan field ini — setiap lane harus mencakup semua layanan dari grup. Dalam permissive mode, tentukan layanan dalam lane ini. Daftar ini harus merupakan subset dari field services grup. Permintaan ke layanan yang tidak ada dalam lane ini diteruskan ke baseline lane. |
ingressRules | SwimLaneIngressRule[] | Tidak | Aturan routing yang secara otomatis dikonversi oleh ASM menjadi layanan virtual untuk gerbang masuk. Jika diabaikan, buat layanan virtual secara manual. |
ingressWeight | SwimLaneIngressWeight | Tidak | Bobot routing untuk lane ini saat grup menggunakan routing berbasis bobot (ingressRoutingStrategy: weighted). |
SwimLaneIngressRule
Menentukan aturan routing untuk gerbang masuk. ASM mengonversi setiap aturan menjadi bagian dari layanan virtual.
| Field | Type | Required | Description |
|---|---|---|---|
online | bool | Ya | Apakah aturan ini aktif. Layanan virtual hanya dihasilkan saat nilai ini true. |
hosts | string[] | Ya | Host yang dicocokkan. Dipetakan ke field hosts dalam layanan virtual yang dihasilkan. |
name | string | Tidak | Nama aturan routing ini. Dipetakan ke field name di bawah http dalam layanan virtual yang dihasilkan. |
match | SwimLaneIngressRequestMatch | Tidak | Kondisi pencocokan permintaan. Dipetakan ke field match di bawah http dalam layanan virtual yang dihasilkan. |
route | SwimLaneIngressRoute | Ya | Layanan tujuan untuk permintaan yang cocok. Dipetakan ke field route di bawah http dalam layanan virtual yang dihasilkan. |
SwimLaneIngressWeight
Menentukan bobot routing untuk lane saat menggunakan routing berbasis bobot.
| Field | Type | Required | Description |
|---|---|---|---|
weight | int | Tidak | Bobot routing untuk lane ini. Nilai default 0. ASM menggunakan bobot semua lane untuk menghitung rasio distribusi permintaan. |
destination | RouteDestination | Ya | Layanan tujuan untuk routing berbasis bobot. |
SwimLaneIngressRequestMatch
Menentukan kondisi untuk mencocokkan permintaan berdasarkan URI atau header.
| Field | Type | Required | Description |
|---|---|---|---|
uri | StringMatch | Tidak | Kondisi pencocokan URI. Mendukung exact, prefix, dan regex (sintaks RE2). |
headers | map<string, StringMatch> | Tidak | Kondisi pencocokan header. Kunci adalah nama header dalam huruf kecil dengan tanda hubung (misalnya, x-request-id). Nilai menentukan jenis pencocokan. |
StringMatch
Menentukan cara mencocokkan nilai string. Tentukan tepat satu field.
| Field | Type | Required | Description |
|---|---|---|---|
exact | string | Tidak | Pencocokan string eksak. |
prefix | string | Tidak | Pencocokan awalan. |
regex | string | Tidak | Pencocokan ekspresi reguler RE2. Lihat sintaks RE2. |
SwimLaneIngressRoute
Menentukan layanan tujuan untuk permintaan yang cocok.
| Field | Type | Required | Description |
|---|---|---|---|
destination | RouteDestination | Ya | Layanan tujuan. |
RouteDestination
Mengidentifikasi layanan Kubernetes target.
| Field | Type | Required | Description |
|---|---|---|---|
host | string | Ya | Nama domain lengkap (fully qualified domain name) layanan Kubernetes. Contoh: mocka.default.svc.cluster.local. |
portNum | int | Tidak | Nomor port layanan. Contoh: 8000. Catatan Memerlukan ASM v1.21.4.104 atau lebih baru. |
Topik terkait
Ikhtisar traffic lane: Konsep, kasus penggunaan, dan perbandingan antara strict mode dan permissive mode.
Gunakan traffic lane dalam strict mode untuk mengelola traffic end-to-end
Gunakan traffic lane dalam permissive mode untuk mengelola traffic end-to-end