Service Mesh (ASM) memungkinkan Anda mengimplementasikan kemampuan jalur lalu lintas untuk rantai panggilan layanan menggunakan CustomResourceDefinitions (CRD) ASMSwimLaneGroup dan ASMSwimLane. ASM memungkinkan Anda mengisolasi layanan versi tertentu dari aplikasi atau aplikasi dengan karakteristik tertentu ke dalam lingkungan runtime independen (dikenal sebagai jalur). Kemudian, Anda dapat mengonfigurasi aturan jalur untuk merutekan permintaan yang memenuhi aturan tersebut ke layanan versi tertentu dari aplikasi atau aplikasi dengan karakteristik tertentu.
Contoh konfigurasi
Konfigurasi berikut menunjukkan bahwa sebuah grup jalur bernama mock dibuat untuk layanan mocka, mockb, dan mockc di namespace default dari kluster Kubernetes. Grup jalur tersebut berisi dua jalur lalu lintas, v1 dan v2. Jalur v1 dan v2 sesuai dengan versi v1 dan v2 dari layanan ini masing-masing. Versi dibedakan oleh label versi pada pod. Saat layanan mocka, mockb, dan mockc saling memanggil, hanya layanan dengan versi yang sama yang dipanggil. Ini memisahkan layanan v1 dan v2. Selain itu, layanan virtual dibuat berdasarkan gateway Istio bernama ingressgateway di namespace istio-system untuk merutekan permintaan ke dua jalur tersebut.
Deskripsi bidang ASMSwimLaneGroup
ASMSwimLaneGroup mendefinisikan grup jalur lalu lintas. Grup jalur lalu lintas mendefinisikan informasi yang dibagikan di antara beberapa jalur lalu lintas, termasuk layanan untuk mana jalur lalu lintas perlu dibuat dan gateway Istio berdasarkan layanan virtual yang digunakan untuk pengaturan routing permintaan yang perlu dibuat. Grup jalur lalu lintas dapat dikaitkan dengan beberapa jalur lalu lintas. Anda dapat mengaitkan jalur lalu lintas dengan grup jalur lalu lintas dengan menentukan swimlane-group: {Nama grup jalur lalu lintas}.
ASMSwimLaneGroupSpec
ASMSwimLaneGroupSpec, bagian spec dalam contoh sebelumnya, adalah konfigurasi inti dari ASMSwimLaneGroup.
Bidang | Tipe | Diperlukan | Deskripsi |
services | Ya | Menentukan Layanan dalam kluster Kubernetes untuk mana jalur perlu dibuat. Anda dapat mereferensikan Layanan dalam kluster Kubernetes dengan menentukan nama, namespace, ID kluster, dan nama kluster dari Layanan Kubernetes. | |
ingress | Ya | Menentukan konfigurasi gateway masuk dari grup jalur lalu lintas. Gateway masuk terutama digunakan untuk merutekan permintaan ke beberapa versi Layanan dalam grup jalur. | |
isPermissive | bool | Tidak | Menentukan mode grup jalur lalu lintas. Nilai valid:
Untuk informasi lebih lanjut tentang jalur lalu lintas dalam mode ketat dan permissive, lihat Ikhtisar jalur lalu lintas. |
permissiveModeConfiguration | Tidak | Konfigurasi grup jalur dalam mode permissive. Anda harus mengonfigurasi bidang ini saat grup jalur berada dalam mode permissive. |
ClusterServiceRef
Setiap ClusterServiceRef mereferensikan satu layanan yang diterapkan dalam kluster Kubernetes. Jalur dibuat berdasarkan referensi layanan.
Bidang | Tipe | Diperlukan | Deskripsi |
name | string | Ya | Nama Layanan Kubernetes. |
namespace | string | Ya | Namespace tempat Layanan Kubernetes berada. |
cluster | Tidak | Informasi referensi tentang kluster Kubernetes. |
ClusterRef
ClusterRef menyediakan informasi referensi tentang kluster Kubernetes yang ditambahkan ke instance ASM.
Bidang | Tipe | Diperlukan | Deskripsi |
name | string | Tidak | Nama tampilan kluster Kubernetes. |
id | string | Tidak | ID kluster Kubernetes. |
SwimLaneGroupIngressConfiguration
SwimLaneGroupIngressConfiguration mendefinisikan informasi tentang gateway masuk yang digunakan untuk merutekan permintaan untuk layanan dalam grup jalur.
Bidang | Tipe | Diperlukan | Deskripsi |
gateway | Ya | Informasi tentang gateway Istio yang terkait dengan gateway masuk. | |
ingressRouting | Tidak | Konfigurasi aturan routing permintaan yang digunakan untuk merutekan permintaan untuk Layanan dalam grup jalur. Catatan Hanya instance ASM V1.21.6.92 dan yang lebih baru yang mendukung bidang ini. |
SwimLaneGatewayConfiguration
SwimLaneGatewayConfiguration mendefinisikan informasi tentang gateway Istio yang terkait dengan gateway masuk.
Bidang | Tipe | Diperlukan | Deskripsi |
name | string | Ya | Nama gateway Istio. |
namespace | string | Ya | Namespace tempat gateway Istio berada. |
type | string | Ya | Jenis gateway Istio. Anda harus menetapkan bidang ini ke |
SwimLaneGroupIngressRouteConfiguration
SwimLaneGroupIngressRouteConfiguration menentukan konfigurasi aturan routing permintaan yang digunakan untuk merutekan permintaan untuk layanan dalam grup jalur.
Bidang | Tipe | Diperlukan | Deskripsi |
ingressRoutingStrategy | string | Tidak | Kebijakan yang digunakan untuk merutekan permintaan untuk Layanan dalam grup jalur. Nilai valid:
|
weightedRoutingRule | Tidak | Aturan routing permintaan seragam yang digunakan untuk mencocokkan semua permintaan saat kebijakan routing permintaan berbasis bobot digunakan. Bidang ini hanya berlaku jika bidang ingressRoutingStrategy diatur ke weighted. |
WeightedSwimLaneIngressConfiguration
WeightedSwimLaneIngressConfiguration menentukan konfigurasi aturan pencocokan permintaan seragam yang digunakan untuk mencocokkan semua permintaan saat kebijakan routing permintaan berbasis bobot digunakan.
Bidang | Tipe | Diperlukan | Deskripsi |
hosts | []string | Ya | Host yang cocok dengan permintaan. Host harus dideklarasikan di gateway Istio yang terkait dengan grup jalur. |
requestMatches | Tidak | Aturan pencocokan permintaan yang digunakan untuk mencocokkan URI dan header permintaan. |
PermissiveSwimLaneGroupConfiguration
PermissiveSwimLaneGroupConfiguration mendefinisikan parameter yang perlu ditentukan untuk grup jalur lalu lintas dalam mode permissive.
Bidang | Tipe | Diperlukan | Deskripsi |
routeHeader | string | Ya | Nama header routing permintaan dari jalur lalu lintas dalam mode permissive. Header routing permintaan digunakan untuk menentukan jalur permintaan saat permintaan dilewatkan dalam rantai panggilan. Dalam mode permissive, saat permintaan diteruskan ke Layanan upstream melalui gateway masuk, permintaan tersebut harus membawa header routing permintaan yang digunakan untuk menentukan jalur tempat permintaan berada. |
traceHeader | string | Ya | Nama header permintaan end-to-end (E2E) pass-through dari jalur lalu lintas dalam mode permissive. Header permintaan E2E pass-through harus memiliki karakteristik berikut:
|
fallbackTarget | string | Tidak | Nama jalur dasar dalam mode permissive. Jika permintaan gagal dirutekan ke Layanan versi yang sesuai dalam jalur yang diinginkan, permintaan dikembalikan ke versi yang sesuai dari Layanan dalam jalur dasar. |
Deskripsi bidang ASMSwimLane
ASMSwimLane mendefinisikan jalur lalu lintas. Jalur lalu lintas mendefinisikan informasi terkait versi tertentu atau karakteristik tertentu dari sebuah layanan. Anda dapat menambahkan label swimlane-group: {Nama grup jalur lalu lintas} ke jalur lalu lintas untuk mengaitkannya dengan grup jalur lalu lintas yang sesuai.
ASMSwimLaneSpec
ASMSwimLaneSpec, yaitu bagian spec, adalah konfigurasi inti dari ASMSwimLane.
Bidang | Tipe | Diperlukan | Deskripsi |
labelSelector | map<string, string> | Ya | Satu atau lebih label yang digunakan untuk mencocokkan pod untuk Layanan dalam jalur. Secara umum, Anda dapat menggunakan label dengan informasi versi untuk mencocokkan pod dalam jalur tertentu. Misalnya, Anda dapat menggunakan label |
services | Tidak | Menentukan Layanan yang diterapkan dalam jalur. Bidang ini mirip dengan bidang services dalam ASMSwimLaneGroupSpec. Anda dapat mereferensikan Layanan dalam kluster Kubernetes dengan menentukan nama, namespace, ID kluster, dan nama kluster dari Layanan Kubernetes.
| |
ingressRules | Tidak | Definisi aturan routing permintaan untuk jalur. Definisi ini secara otomatis dikonversi menjadi layanan virtual untuk gateway masuk yang terkait dengan grup jalur. Layanan virtual merutekan permintaan dari gateway masuk ke Layanan dalam jalur. Jika Anda tidak menentukan bidang ingressRules, Anda dapat membuat layanan virtual secara manual untuk gateway masuk untuk merutekan permintaan ke Layanan dalam jalur. | |
ingressWeight | Tidak | Jika grup jalur menggunakan kebijakan routing permintaan berbasis bobot, bidang ini menentukan bobot routing permintaan dari jalur. Grup jalur meneruskan sebagian permintaan ke layanan masuk jalur berdasarkan bobot routing permintaan yang dideklarasikan untuk jalur berbeda. Bidang ini hanya berlaku jika bidang ingressRoutingStrategy diatur ke weighted. |
SwimLaneIngressRule
SwimLaneIngressRule menentukan aturan routing untuk gateway masuk untuk merutekan permintaan ke layanan dalam jalur. Aturan tersebut secara otomatis dikonversi menjadi layanan virtual untuk gateway masuk.
Bidang | Tipe | Diperlukan | Deskripsi |
online | bool | Ya | Menentukan apakah aturan routing permintaan berlaku. Layanan virtual yang sesuai untuk gateway masuk hanya dibuat jika bidang online diatur ke true. |
hosts | string[] | Ya | Host yang cocok dengan aturan routing permintaan. Bidang ini sesuai dengan bidang hosts dalam layanan virtual. |
name | string | Tidak | Nama aturan routing permintaan. Ini sesuai dengan bidang name di bawah bagian http dalam layanan virtual. |
match | Tidak | Kondisi yang harus dipenuhi oleh permintaan agar aturan routing permintaan cocok. Bidang ini secara otomatis dikonversi menjadi bidang match di bawah bagian http dalam layanan virtual. | |
route | Ya | Layanan tujuan ke mana permintaan dirutekan. Bidang ini secara otomatis dikonversi menjadi bidang route di bawah bagian http dalam layanan virtual. |
SwimLaneIngressWeight
Bidang | Tipe | Diperlukan | Deskripsi |
weight | int | Tidak | Bobot routing permintaan dari jalur. Jika bidang ini tidak ditentukan, bobot routing permintaan adalah 0. Nilai bobot digunakan bersama dengan bobot routing permintaan dari jalur lain untuk menentukan rasio routing permintaan. |
destination | Ya | Bidang ini menentukan Layanan tujuan ke mana permintaan diteruskan saat kebijakan routing permintaan berbasis bobot digunakan. |
SwimLaneIngressRequestMatch
SwimLaneIngressRequestMatch menentukan kondisi yang harus dipenuhi oleh permintaan agar aturan routing permintaan cocok.
Bidang | Tipe | Diperlukan | Deskripsi |
uri | Tidak | Kondisi yang harus dipenuhi oleh URI permintaan agar permintaan yang sesuai cocok. Nilai valid:
| |
headers | map<string, StringMatch> | Tidak | Kondisi yang harus dipenuhi oleh header permintaan agar permintaan yang sesuai cocok. Kunci dalam koleksi Map harus huruf kecil dan berisi tanda hubung (-). Kunci, misalnya x-request-id, mewakili nama header. Nilai dalam koleksi Map adalah tipe StringMatch. Nilai valid:
|
StringMatch
StringMatch menentukan kondisi pencocokan string, yang mendefinisikan metode untuk mencocokkan URI dan header permintaan.
Bidang | Tipe | Diperlukan | Deskripsi | |
Tentukan salah satu bidang berdasarkan mode pencocokan | exact | string | Tidak | Pencocokan string eksak. |
prefix | string | Tidak | Pencocokan awalan. | |
regex | string | Tidak | Pencocokan ekspresi reguler RE2. Untuk informasi lebih lanjut, lihat wiki. | |
SwimLaneIngressRoute
SwimLaneIngressRoute menentukan layanan tujuan ke mana permintaan dirutekan.
Bidang | Tipe | Diperlukan | Deskripsi |
destination | Ya | Menentukan Layanan tujuan ke mana permintaan diteruskan. |
RouteDestination
Bidang | Tipe | Diperlukan | Deskripsi |
host | string | Ya | Nama domain Layanan Kubernetes. Contoh: |
portNum | int | Tidak | Port layanan dari kluster Kubernetes. Contoh: Catatan Instance ASM versi V1.21.4.104 dan yang lebih baru mendukung bidang ini. |
Referensi
Untuk informasi lebih lanjut tentang konsep dan skenario penggunaan jalur lalu lintas, serta perbandingan antara jalur lalu lintas dalam mode ketat dan permissive, lihat Ikhtisar Jalur Lalu Lintas.
Untuk informasi lebih lanjut tentang cara menggunakan jalur lalu lintas dalam mode ketat untuk mengelola lalu lintas ujung ke ujung, lihat Gunakan Jalur Lalu Lintas dalam Mode Ketat untuk Mengelola Lalu Lintas Ujung ke Ujung.
Untuk informasi lebih lanjut tentang cara menggunakan jalur lalu lintas dalam mode permissive untuk mengelola lalu lintas ujung ke ujung, lihat Gunakan Jalur Lalu Lintas dalam Mode Permissive untuk Mengelola Lalu Lintas Ujung ke Ujung.