Jalur lalu lintas mengarahkan lalu lintas end-to-end melalui versi layanan tertentu berdasarkan header permintaan. Saat beberapa tim mengembangkan fitur berbeda secara bersamaan, jalur lalu lintas mengisolasi alur permintaan masing-masing tim di seluruh rantai panggilan, sehingga mencegah kontaminasi silang antarversi. Dalam mode longgar, permintaan yang tidak cocok secara otomatis dialihkan ke layanan garis dasar.
Topik ini mencakup langkah-langkah persiapan umum dan spesifik skenario. Selesaikan langkah-langkah yang berlaku untuk skenario Anda, lalu lanjutkan ke panduan skenario yang sesuai.
| Langkah | Tugas | Berlaku untuk |
|---|---|---|
| 1 | Buat gateway Istio | Semua skenario |
| 2 | Deploy layanan contoh | Skenario 1 dan Skenario 2 |
| 3 | Siapkan propagasi header baggage | Skenario 3 |
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Instans Service Mesh (ASM) Edisi Perusahaan atau Edisi Ultimate, versi 1.18.2.111 atau lebih baru. Untuk membuat atau melakukan upgrade instans, lihat Create an ASM instance atau Update an ASM instance.
Kluster yang telah ditambahkan ke instans ASM. Lihat Add a cluster to an ASM instance.
Gerbang masuk ASM bernama
ingressgateway. Lihat Create an ingress gateway.
Langkah 1: Buat gateway Istio
Buat gateway Istio bernama ingressgateway di namespace istio-system. Gateway ini mendengarkan pada Port 80 untuk traffic HTTP dan menerima permintaan untuk semua host. Untuk informasi lebih lanjut, lihat Manage Istio gateways.
Simpan YAML berikut ke file bernama
gateway.yaml:apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: ingressgateway namespace: istio-system spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - '*'Terapkan konfigurasi:
kubectl apply -f gateway.yamlVerifikasi bahwa gateway telah dibuat:
kubectl get gateway ingressgateway -n istio-systemOutput yang diharapkan:
NAME AGE ingressgateway 10s
Langkah 2: Deploy layanan contoh
Langkah ini hanya berlaku untuk Scenario 1 dan Scenario 2. Jika Anda berencana menggunakan Skenario 3, lewati ke Langkah 3.
Aktifkan injeksi proxy sidecar otomatis
Aktifkan injeksi proxy sidecar otomatis untuk namespace default. Lihat Enable automatic sidecar proxy injection.
Untuk detail kebijakan injeksi, lihat Configure sidecar proxy injection policies.
Deploy layanan-layanan tersebut
Deploy tiga versi layanan contoh di kluster Container Service for Kubernetes (ACK) Anda:
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v1/mock-tracing-v1.yaml
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v2/mock-tracing-v2.yaml
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v3/mock-tracing-v3.yamlVerifikasi bahwa semua Pod sedang berjalan:
kubectl get pods -n defaultSemua Pod harus menunjukkan status Running dengan 2/2 kontainer siap (kontainer aplikasi dan proxy sidecar).
Layanan contoh untuk Skenario 1 dan Skenario 2 ditulis dalam Golang. Skenario 3 menggunakan layanan berbasis Java karena mekanisme propagasi header baggage memiliki persyaratan khusus berdasarkan bahasa pemrograman. Untuk detailnya, lihat Injecting Auto-instrumentation.
Langkah 3: Siapkan propagasi header baggage
Langkah ini hanya berlaku untuk Scenario 3.
Langkah ini menggunakan kemampuan auto-instrumentasi OpenTelemetry Operator untuk mengaktifkan propagasi header baggage secara transparan di seluruh Pod layanan, tanpa mengubah kode aplikasi.
3a. Deploy OpenTelemetry Operator
Sambungkan ke kluster Kubernetes yang telah ditambahkan ke instans ASM Anda dan buat namespace
opentelemetry-operator-system:kubectl create namespace opentelemetry-operator-systemInstal OpenTelemetry Operator dengan Helm. Jika Helm belum terinstal, lihat Install Helm.
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts helm install \ --namespace=opentelemetry-operator-system \ --version=0.46.0 \ --set admissionWebhooks.certManager.enabled=false \ --set admissionWebhooks.certManager.autoGenerateCert=true \ --set manager.image.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/opentelemetry-operator" \ --set manager.image.tag="0.92.1" \ --set kubeRBACProxy.image.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/kube-rbac-proxy" \ --set kubeRBACProxy.image.tag="v0.13.1" \ --set manager.collectorImage.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/opentelemetry-collector" \ --set manager.collectorImage.tag="0.97.0" \ --set manager.opampBridgeImage.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/operator-opamp-bridge" \ --set manager.opampBridgeImage.tag="0.97.0" \ --set manager.targetAllocatorImage.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/target-allocator" \ --set manager.targetAllocatorImage.tag="0.97.0" \ --set manager.autoInstrumentationImage.java.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-java" \ --set manager.autoInstrumentationImage.java.tag="1.32.1" \ --set manager.autoInstrumentationImage.nodejs.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-nodejs" \ --set manager.autoInstrumentationImage.nodejs.tag="0.49.1" \ --set manager.autoInstrumentationImage.python.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-python" \ --set manager.autoInstrumentationImage.python.tag="0.44b0" \ --set manager.autoInstrumentationImage.dotnet.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-dotnet" \ --set manager.autoInstrumentationImage.dotnet.tag="1.2.0" \ --set manager.autoInstrumentationImage.go.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/opentelemetry-go-instrumentation" \ --set manager.autoInstrumentationImage.go.tag="v0.10.1.alpha-2-aliyun" \ opentelemetry-operator open-telemetry/opentelemetry-operatorVerifikasi bahwa Operator sedang berjalan:
kubectl get pod -n opentelemetry-operator-systemOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE opentelemetry-operator-854fb558b5-pvllj 2/2 Running 0 1mKedua kontainer (
2/2) harus berada dalam statusRunning.
3b. Konfigurasikan auto-instrumentasi
Resource Instrumentation memberi tahu OpenTelemetry Operator cara menyuntikkan instrumentasi ke dalam Pod layanan. Pengaturan propagators: [baggage] mengaktifkan propagasi header W3C Baggage, yang digunakan oleh jalur lalu lintas untuk meneruskan konteks perutean antarlayanan.
Pilih konfigurasi yang sesuai dengan lingkungan Anda:
Opsi A: OpenTelemetry Collector belum dideploy
Gunakan konfigurasi ini ketika Anda hanya memerlukan propagasi header baggage untuk jalur lalu lintas tanpa mengumpulkan metrik atau jejak. Sampler always_off menonaktifkan pengumpulan jejak, dan OTEL_METRICS_EXPORTER: none menonaktifkan ekspor metrik, sehingga tidak ada data telemetri yang dihasilkan.
Simpan YAML berikut ke file bernama instrumentation.yaml:
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: demo-instrumentation
spec:
env:
- name: OTEL_METRICS_EXPORTER
value: none
propagators:
- baggage
sampler:
argument: "1"
type: always_offOpsi B: OpenTelemetry Collector telah dideploy
Gunakan konfigurasi ini ketika Anda memiliki OpenTelemetry Collector di kluster Anda dan ingin mengumpulkan baik jejak maupun header baggage. Sampler parentbased_traceidratio dengan argumen "1" melakukan sampling 100% dari jejak.
Simpan YAML berikut ke file bernama instrumentation.yaml:
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: demo-instrumentation
spec:
propagators:
- baggage
sampler:
type: parentbased_traceidratio
argument: "1"Jika OpenTelemetry Collector belum dideploy, Metric Collection dan Tracing Analysis tidak dapat diaktifkan. Untuk mengumpulkan data tracing ASM ke Managed Service for OpenTelemetry, lihat Collect ASM tracing data to Managed Service for OpenTelemetry.
Terapkan resource Instrumentation ke namespace default:
kubectl apply -f instrumentation.yaml -n defaultVerifikasi resource Instrumentation:
kubectl describe instrumentation demo-instrumentation -n defaultOutput harus menampilkan propagator dan pengaturan sampler yang telah dikonfigurasi.
Langkah anotasi yang diperlukan untuk mengaktifkan auto-instrumentasi pada Pod individual dibahas dalam Scenario 3. Deployment OpenTelemetry Collector berada di luar cakupan topik ini. Untuk mengumpulkan data tracing ASM, lihat Collect ASM tracing data to Managed Service for OpenTelemetry.
Langkah selanjutnya
Lanjutkan ke skenario yang sesuai dengan kasus penggunaan Anda:
| Skenario | Kapan digunakan | Langkah yang diperlukan |
|---|---|---|
| Skenario 1: Header baggage tidak dipropagasikan oleh aplikasi | Layanan tidak meneruskan header baggage | Langkah 1, Langkah 2 |
| Skenario 2: Header baggage dipropagasikan oleh aplikasi | Layanan sudah mempropagasikan header baggage dalam kode aplikasi | Langkah 1, Langkah 2 |
| Skenario 3: Propagasi header baggage transparan | Propagasi baggage otomatis tanpa mengubah kode aplikasi | Langkah 1, Langkah 3 |