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:
| Algoritma | Bawaan | Kapan digunakan |
|---|---|---|
| HashRing | Ya | Afinitas sesi tujuan umum dengan perubahan backend moderat |
| Maglev | Tidak | Skenario throughput tinggi di mana kecepatan pencarian penting. Memerlukan ASM v1.16 atau lebih baru |
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster Container Service for Kubernetes (ACK) yang ditambahkan ke instans Service Mesh (ASM) Anda. Untuk informasi selengkapnya, lihat Tambahkan kluster ke instans ASM.
Gerbang masuk dengan Port 80 yang diekspos. Untuk informasi selengkapnya, lihat Buat gerbang masuk.
Aplikasi HTTPBin yang telah diterapkan. Untuk informasi selengkapnya, lihat Terapkan aplikasi HTTPBin.
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 3Langkah 2: Verifikasi distribusi permintaan tanpa afinitas sesi
Buka
http://<ingress-gateway-ip>/status/418di 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.
Periksa log gerbang untuk memastikan bahwa permintaan didistribusikan ke ketiga Pod:
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih ASM Gateways > Ingress Gateway.
Di halaman Ingress Gateway, temukan gerbang masuk target dan klik Log Center. Di tab Gateway Logs, tambahkan
and 418ke 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.

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| Bidang | Nilai | Deskripsi |
|---|---|---|
host | httpbin.default.svc.cluster.local | Hostname layanan fully qualified yang menjadi cakupan aturan ini |
consistentHash.httpCookie.name | sticky-session-key | Nama cookie yang digunakan sebagai kunci hash |
consistentHash.httpCookie.ttl | 0s | Masa berlaku cookie |
Setelah Anda menerapkan aturan ini:
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-keydalam tanggapan.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
Buka
http://<ingress-gateway-ip>/status/333di 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.
Periksa log gerbang untuk memastikan bahwa semua permintaan mencapai Pod yang sama:
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih ASM Gateways > Ingress Gateway.
Di halaman Ingress Gateway, temukan gerbang masuk target dan klik Log Center. Di tab Gateway Logs, tambahkan
and 333ke 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.

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