Afinitas sesi (juga dikenal sebagai sesi lengket) adalah fitur yang tersedia pada load balancer untuk mengarahkan semua permintaan dari pengguna atau sesi yang sama ke server backend yang sama. Fitur ini berguna dalam skenario seperti keranjang belanja online, sesi logon, dan pengaturan personalisasi, di mana status pengguna harus dipertahankan.
Prasyarat
Kluster Container Service for Kubernetes (ACK) telah ditambahkan ke instance Service Mesh (ASM). Untuk informasi lebih lanjut, lihat Tambahkan kluster ke instance ASM.
Gateway ingress telah dibuat dan port 80 diekspos. Untuk informasi lebih lanjut, lihat Buat gateway ingress.
Aplikasi HTTPBin telah diterapkan. Untuk informasi lebih lanjut, lihat Terapkan aplikasi HTTPBin.
Pengenalan fitur
Topik ini menjelaskan implementasi afinitas sesi menggunakan hashing konsisten. Envoy mendukung HashRing dan Maglev hashing konsisten. Penyeimbangan beban berbasis hashing konsisten digunakan untuk menyediakan afinitas sesi lunak. Afinitas ke host tujuan tertentu mungkin hilang jika satu atau lebih host ditambahkan atau dihapus dari layanan tujuan. Afinitas sesi berbasis hashing konsisten meningkatkan penyeimbangan beban dan berperforma baik dalam sistem terdistribusi.
Langkah 1: Tingkatkan jumlah pod aplikasi HTTPBin
Gunakan kubectl untuk terhubung ke bidang data berdasarkan file kubeconfig, lalu jalankan perintah berikut untuk menaikkan jumlah pod aplikasi HTTPBin menjadi tiga. Pod-pod ini digunakan untuk menguji afinitas sesi.
kubectl scale deployment/httpbin --replicas 3Langkah 2: Lihat distribusi permintaan ketika afinitas sesi dinonaktifkan
Masukkan
http://${Alamat IP gateway ingress}/status/418di bilah alamat browser Anda. Setelah akses berhasil, segarkan halaman beberapa kali.Untuk informasi lebih lanjut tentang cara mendapatkan alamat IP gateway ingress, lihat sublangkah 1 Dapatkan alamat IP gateway ingress dari Langkah 3 dalam topik "Gunakan sumber daya Istio untuk merutekan lalu lintas ke versi layanan yang berbeda".
Lihat log gateway ingress.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
Di halaman Ingress Gateway, temukan gateway ingress yang diinginkan dan klik Log Center. Di tab Gateway Logs, tambahkan kondisi pencarian
dan 418ke kotak pencarian dan klik Search & Analyze. Di tab Raw Logs di pojok kiri bawah, perluas indeks upstream_addr.Anda dapat melihat bahwa permintaan hampir merata didistribusikan ke tiga pod aplikasi HTTPBin.

Langkah 3: Buat aturan tujuan
Gunakan konten berikut untuk membuat aturan tujuan. Untuk informasi lebih lanjut, 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: 0sSetelah aturan tujuan diterapkan, jika Anda menginisiasi permintaan tanpa cookie yang ditentukan dalam aturan tujuan untuk mengakses aplikasi HTTPBin melalui gateway ingress, gateway ingress akan menghasilkan nilai hash berdasarkan alamat IP dan port sumber serta tujuan dari permintaan, dan menambahkan cookie dalam respons permintaan. Jika permintaan berikutnya membawa cookie ini, gateway ingress tidak akan meregenerasi nilai ini. Cookie ini digunakan dalam hashing konsisten sebagai input utama fungsi hash, yang kemudian menghitung backend yang akan diakses.
Validitas afinitas sesi dijamin oleh hashing konsisten tertentu. Dalam contoh ini, tidak ada hashing konsisten yang ditentukan. Secara default, HashRing digunakan. Instance ASM versi 1.16 atau lebih baru mendukung hashing konsisten Maglev. Anda dapat menggunakan hashing konsisten Maglev berdasarkan kebutuhan bisnis Anda.
Langkah 4: Lihat distribusi permintaan ketika afinitas sesi diaktifkan
Masukkan
http://${Alamat IP gateway ingress}/status/333di bilah alamat browser Anda. Setelah akses berhasil, segarkan halaman beberapa kali.Untuk informasi lebih lanjut tentang cara mendapatkan alamat IP gateway ingress, lihat sublangkah 1 Dapatkan alamat IP gateway ingress dari Langkah 3 dalam topik "Gunakan sumber daya Istio untuk merutekan lalu lintas ke versi layanan yang berbeda".
Lihat log gateway ingress.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
Di halaman Ingress Gateway, temukan gateway ingress yang diinginkan dan klik Log Center. Di tab Gateway Logs, tambahkan kondisi pencarian
dan 333ke kotak pencarian dan klik Search & Analyze. Di tab Raw Logs di pojok kiri bawah, perluas indeks upstream_addr.Anda dapat melihat bahwa semua permintaan diteruskan ke pod backend yang sama dari aplikasi HTTPBin.

Buka alat pengembang browser Anda, klik Network, segarkan halaman, dan klik permintaan untuk melihat detailnya.
Halaman web menunjukkan bahwa situs web memiliki cookie dengan nama yang sama seperti yang ditentukan dalam aturan tujuan. Gateway ingress mengimplementasikan afinitas sesi berdasarkan cookie ini.