All Products
Search
Document Center

Alibaba Cloud Service Mesh:Terapkan afinitas sesi di gerbang masuk ASM

Last Updated:Mar 12, 2026

Aplikasi stateful seperti keranjang belanja, sesi login, dan dasbor yang dipersonalisasi memerlukan agar semua permintaan dari klien yang sama diarahkan ke Pod backend yang sama. Afinitas sesi (sticky sessions) di ASM mengarahkan permintaan ke backend yang konsisten dengan menerapkan consistent hashing dalam aturan tujuan Istio.

Consistent hashing memetakan setiap permintaan ke backend berdasarkan kunci hash—berupa cookie, Header HTTP, IP sumber, atau parameter kueri. Pendekatan ini memberikan afinitas sesi lunak: permintaan dari klien yang sama biasanya mencapai Pod yang sama, tetapi afinitas dapat terputus ketika backend ditambahkan atau dihapus.

Cara kerja

Algoritma penghashan

Envoy mendukung dua algoritma consistent hashing:

AlgoritmaBawaanKapan digunakan
HashRingYaAfinitas sesi tujuan umum dengan perubahan backend moderat
MaglevTidakSkenario throughput tinggi di mana kecepatan pencarian penting. Memerlukan ASM v1.16 atau lebih baru

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Konfigurasikan afinitas sesi berbasis cookie

Tutorial ini menunjukkan afinitas sesi berbasis cookie. Struktur DestinationRule yang sama berlaku untuk jenis kunci hash lainnya—ganti blok httpCookie dengan bidang yang sesuai.

Langkah 1: Skalakan penerapan HTTPBin menjadi tiga replika

Tiga replika diperlukan untuk mengamati bagaimana permintaan didistribusikan ke berbagai Pod. Sambungkan ke bidang data kluster ACK menggunakan kubectl dan jalankan:

kubectl scale deployment/httpbin --replicas 3

Langkah 2: Verifikasi distribusi permintaan tanpa afinitas sesi

  1. Buka http://<ingress-gateway-ip>/status/418 di browser dan refresh halaman beberapa kali.

    Untuk petunjuk cara mendapatkan IP gerbang masuk, lihat langkah anak 1 pada Langkah 3 di Gunakan sumber daya Istio untuk mengarahkan traffic ke versi layanan yang berbeda.

  2. Periksa log gerbang untuk memastikan bahwa permintaan didistribusikan ke ketiga Pod:

    1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

    2. Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih ASM Gateways > Ingress Gateway.

    3. Di halaman Ingress Gateway, temukan gerbang masuk target dan klik Log Center. Di tab Gateway Logs, tambahkan and 418 ke kotak pencarian lalu klik Search & Analyze. Di tab Raw Logs di pojok kiri bawah, perluas indeks upstream_addr.

    Log menunjukkan bahwa permintaan didistribusikan secara merata ke ketiga Pod HTTPBin.

    Request distribution without session affinity

Langkah 3: Buat aturan tujuan untuk afinitas sesi berbasis cookie

Terapkan DestinationRule berikut. Untuk detail tentang pengelolaan aturan tujuan, lihat Kelola aturan tujuan.

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: httpbin
  namespace: default
spec:
  host: httpbin.default.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      consistentHash:
        httpCookie:
          name: sticky-session-key
          ttl: 0s
BidangNilaiDeskripsi
hosthttpbin.default.svc.cluster.localHostname layanan fully qualified yang menjadi cakupan aturan ini
consistentHash.httpCookie.namesticky-session-keyNama cookie yang digunakan sebagai kunci hash
consistentHash.httpCookie.ttl0sMasa berlaku cookie

Setelah Anda menerapkan aturan ini:

  1. Pada permintaan pertama (tanpa cookie), gerbang menghasilkan hash dari alamat IP dan port sumber serta tujuan, mengarahkan permintaan ke backend, dan menyetel cookie sticky-session-key dalam tanggapan.

  2. Pada permintaan berikutnya, klien mengirim kembali cookie tersebut. Gerbang melakukan hash terhadap nilai cookie untuk menentukan backend, sehingga mengarahkan permintaan ke Pod yang sama.

Contoh ini menggunakan algoritma HashRing bawaan. Untuk menggunakan Maglev (memerlukan ASM v1.16 atau lebih baru), tambahkan bidang hashAlgorithm ke kebijakan traffic Anda sesuai kebutuhan.

Langkah 4: Verifikasi bahwa afinitas sesi berfungsi

  1. Buka http://<ingress-gateway-ip>/status/333 di browser dan refresh halaman beberapa kali.

    Untuk petunjuk cara mendapatkan IP gerbang masuk, lihat langkah anak 1 pada Langkah 3 di Gunakan sumber daya Istio untuk mengarahkan traffic ke versi layanan yang berbeda.

  2. Periksa log gerbang untuk memastikan bahwa semua permintaan mencapai Pod yang sama:

    1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

    2. Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih ASM Gateways > Ingress Gateway.

    3. Di halaman Ingress Gateway, temukan gerbang masuk target dan klik Log Center. Di tab Gateway Logs, tambahkan and 333 ke kotak pencarian lalu klik Search & Analyze. Di tab Raw Logs di pojok kiri bawah, perluas indeks upstream_addr.

    Log menunjukkan bahwa semua permintaan diarahkan ke Pod backend yang sama.

    Request distribution with session affinity

  3. Konfirmasi keberadaan cookie di browser: buka developer tools, klik tab Network, refresh halaman, lalu periksa salah satu permintaan. Tanggapan mencakup cookie sticky-session-key yang sesuai dengan nama dalam DestinationRule. Gerbang menggunakan cookie ini untuk mempertahankan afinitas sesi.