全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Persiapan untuk jalur lalu lintas dalam mode longgar

更新时间:Mar 12, 2026

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.

LangkahTugasBerlaku untuk
1Buat gateway IstioSemua skenario
2Deploy layanan contohSkenario 1 dan Skenario 2
3Siapkan propagasi header baggageSkenario 3

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

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.

  1. 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:
            - '*'
  2. Terapkan konfigurasi:

    kubectl apply -f gateway.yaml
  3. Verifikasi bahwa gateway telah dibuat:

    kubectl get gateway ingressgateway -n istio-system

    Output yang diharapkan:

    NAME              AGE
    ingressgateway    10s

Langkah 2: Deploy layanan contoh

Catatan

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.yaml

Verifikasi bahwa semua Pod sedang berjalan:

kubectl get pods -n default

Semua Pod harus menunjukkan status Running dengan 2/2 kontainer siap (kontainer aplikasi dan proxy sidecar).

Catatan

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

Catatan

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

  1. Sambungkan ke kluster Kubernetes yang telah ditambahkan ke instans ASM Anda dan buat namespace opentelemetry-operator-system:

    kubectl create namespace opentelemetry-operator-system
  2. Instal 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-operator
  3. Verifikasi bahwa Operator sedang berjalan:

    kubectl get pod -n opentelemetry-operator-system

    Output yang diharapkan:

    NAME                                      READY   STATUS    RESTARTS   AGE
    opentelemetry-operator-854fb558b5-pvllj   2/2     Running   0          1m

    Kedua kontainer (2/2) harus berada dalam status Running.

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_off

Opsi 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"
Penting

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 default

Verifikasi resource Instrumentation:

kubectl describe instrumentation demo-instrumentation -n default

Output harus menampilkan propagator dan pengaturan sampler yang telah dikonfigurasi.

Catatan

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:

SkenarioKapan digunakanLangkah yang diperlukan
Skenario 1: Header baggage tidak dipropagasikan oleh aplikasiLayanan tidak meneruskan header baggageLangkah 1, Langkah 2
Skenario 2: Header baggage dipropagasikan oleh aplikasiLayanan sudah mempropagasikan header baggage dalam kode aplikasiLangkah 1, Langkah 2
Skenario 3: Propagasi header baggage transparanPropagasi baggage otomatis tanpa mengubah kode aplikasiLangkah 1, Langkah 3