Service Mesh (ASM) memungkinkan Anda mengonfigurasi label trafik untuk mengelola trafik berdasarkan label tersebut. Anda dapat merutekan trafik aplikasi dengan label tertentu ke layanan atau versi yang berbeda serta melakukan kontrol trafik seperti pemutusan sirkuit dan pembatasan berdasarkan label. ASM menambahkan CustomResourceDefinition (CRD) TrafficLabel, yang dapat digunakan untuk mendefinisikan logika label trafik dan mengonfigurasikannya untuk namespace dan workload. Topik ini menjelaskan cara mengonfigurasi label trafik, memberikan deskripsi bidang dalam CRD, serta menyertakan contoh konfigurasi.
Catatan Penggunaan
Instance ASM versi 1.17 atau lebih baru mendukung
apiVersion: istio.alibabacloud.com/v1dalam CRD TrafficLabel. Jika Anda telah mengonfigurasi TrafficLabel di kluster Container Service for Kubernetes (ACK), ubahapiVersion: istio.alibabacloud.com/v1beta1menjadiapiVersion: istio.alibabacloud.com/v1, lalu konfigurasikan ulang TrafficLabel.Jika versi instance ASM Anda lebih lama dari 1.17, disarankan untuk memperbarui instance ASM ke versi 1.17 atau lebih baru, atau submit a ticket untuk mendapatkan dukungan teknis.
Deskripsi Bidang
Berikut adalah deskripsi bidang CRD dalam instance ASM versi 1.17 atau lebih baru.
Spec
Bidang | Tipe | Wajib | Deskripsi |
workloadSelector | Tidak | Menunjukkan rentang workload di mana pemilih menerapkan label trafik. Jika bidang ini dibiarkan kosong, pemilih menerapkan label trafik ke semua workload dalam namespace saat ini. | |
rules | Ya | Mendefinisikan aturan untuk label trafik. |
WorkloadSelector
Bidang | Tipe | Wajib | Deskripsi |
labels | map<string, string> | Tidak | Label trafik yang diterapkan pada workload. Anda dapat mengonfigurasi satu atau lebih label. |
TrafficLabelRule
Bidang | Tipe | Wajib | Deskripsi |
labels | Label[] | Ya | Nama dan nilai label yang ingin Anda konfigurasikan. |
Label
Bidang | Tipe | Wajib | Deskripsi |
name | string | Ya | Nama label trafik. Nama harus sesuai dengan konvensi penamaan Header permintaan HTTP. |
valueFrom | string[] | Ya | Nilai label trafik. Nilai diperoleh berdasarkan urutan variabel yang Anda tetapkan. Nilai label diprioritaskan diperoleh dari variabel pertama. Jika tidak tersedia, variabel kedua diperiksa. Jika nilai tidak ditemukan di variabel pertama dan kedua, variabel ketiga diperiksa. Terakhir, jika nilai tidak ditemukan di variabel pertama, kedua, dan ketiga, nilai diperoleh dari variabel keempat. Untuk informasi lebih lanjut, lihat valueFrom. |
valueFrom
Bidang valueFrom mendukung empat variabel berikut. Klik ikon perluasan di bawah tabel untuk melihat deskripsinya.
Variabel | Workload yang didukung |
$getInboundRequestHeader(headerName) | Gateways |
$getExternalInboundRequestHeader(headerName, contextId) | Proxy sidecar |
$getLocalOutboundRequestHeader(headerName) | Proxy sidecar |
$getLabel(labelName) | Gateways atau proxy sidecar |
Contoh Konfigurasi
Dalam contoh berikut, instance ASM adalah versi 1.17 atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui instance ASM, lihat Perbarui instance ASM.
Contoh 1: Label trafik untuk workload
Anda dapat mendefinisikan workloadSelector untuk memilih workload berdasarkan label dan melabeli trafik workload dalam namespace.
Sebarkan aplikasi Bookinfo. Untuk informasi lebih lanjut, lihat Sebarkan aplikasi dalam kluster ACK yang ditambahkan ke instance ASM.
Buat file bernama productpage-trafficlabel.yaml dan salin konten berikut ke file:
apiVersion: istio.alibabacloud.com/v1 kind: TrafficLabel metadata: name: productpage namespace: default spec: workloadSelector: labels: app: productpage rules: - labels: - name: asm-labels-test-a valueFrom: - $getExternalInboundRequestHeader(header1, x-request-id) - $getLabel(header2)Jalankan perintah berikut untuk melabeli trafik workload
productpage:kubectl apply -n default -f productpage-trafficlabel.yamlJalankan perintah berikut untuk melihat konfigurasi proxy dari workload
productpage:kubectl exec -it -n default deploy/productpage-v1 -c istio-proxy -- curl localhost:15000/config_dumpOutput yang Diharapkan:
{ "name": "com.aliyun.traffic_label", "typed_config": { "@type": "type.googleapis.com/envoy.config.filter.traffic_label.v3alpha.TrafficLabel", } },Anda dapat melihat konfigurasi
filterdi atas dalamtype.googleapis.com/envoy.config.listener.v3.Listener/envoy.filters.network.http_connection_manager/http_filtersdi bawah Listener Config (type.googleapis.com/envoy.admin.v3.ListenersConfigDump) ataudynamic_listeners. Ini menunjukkan bahwa label trafik telah dikonfigurasi.Jalankan perintah berikut untuk melihat konfigurasi proxy dari workload lain, seperti pod details:
kubectl exec -it -n default deploy/details-v1 -c istio-proxy -- curl localhost:15000/config_dump |grep type.googleapis.com/envoy.config.filter.traffic_label.v3alpha.TrafficLabelHasil yang dikembalikan kosong, menunjukkan bahwa tidak ada
filteryang relevan. Hasil ini sesuai dengan harapan.
Contoh 2: Label trafik di tingkat namespace
Jika Anda membiarkan bidang workloadSelector kosong, label ditambahkan ke trafik semua workload dalam namespace. Contoh berikut melabeli trafik semua workload dalam namespace default.
Buat file bernama all-workload-for-ns-trafficlabel.yaml dan salin konten berikut ke file:
apiVersion: istio.alibabacloud.com/v1 kind: TrafficLabel metadata: name: all-workload-for-ns namespace: default spec: rules: - labels: - name: asm-labels-test-b valueFrom: - $getExternalInboundRequestHeader(header1, x-request-id) - $getLabel(header2)Jalankan perintah berikut untuk melabeli trafik semua workload dalam namespace default:
kubectl apply -n default -f all-workload-for-ns-trafficlabel.yamlJalankan perintah berikut untuk melihat konfigurasi proxy dari workload, seperti pod details:
kubectl exec -it -n default deploy/details-v1 -c istio-proxy -- curl localhost:15000/config_dump |grep type.googleapis.com/envoy.config.filter.traffic_label.v3alpha.TrafficLabelOutput yang Diharapkan:
"@type": "type.googleapis.com/envoy.config.filter.traffic_label.v3alpha.TrafficLabel",Output di atas menunjukkan bahwa label trafik telah dikonfigurasi.


