Alışveriş sepetleri, oturum açma işlemleri ve kişiselleştirilmiş panolar gibi durum bilgisi tutan uygulamalar, aynı istemciden gelen tüm isteklerin arka uçtaki aynı pod'a ulaşmasını gerektirir. ASM'deki oturum benzeşimi (yapışkan oturumlar), bir Istio hedef kuralında tutarlı karma uygulama yoluyla istekleri tutarlı bir arka uca yönlendirir.
Tutarlı karma, her isteği çerez, HTTP üstbilgisi, kaynak IP veya sorgu parametresi gibi bir karma anahtarına göre bir arka uca eşler. Bu yöntem yumuşak oturum benzeşimi sağlar: Aynı istemciden gelen istekler genellikle aynı pod'a ulaşır ancak arka uçlar eklendiğinde veya kaldırıldığında benzeşim bozulabilir.
Nasıl çalışır
Karma algoritmaları
Envoy iki tutarlı karma algoritmasını destekler:
| Algoritma | Varsayılan | Ne zaman kullanılır |
|---|---|---|
| HashRing | Evet | Orta düzeyde arka uç değişimi olan genel amaçlı oturum benzeşimi senaryoları |
| Maglev | Hayır | Arama hızının önemli olduğu yüksek aktarım hızı senaryoları. ASM v1.16 veya sonraki sürümler gerektirir |
Önkoşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
Service Mesh (ASM) örneğinize eklenmiş bir Container Service for Kubernetes (ACK) kümesi. Daha fazla bilgi için bkz. Bir kümeyi ASM örneğine ekleme
80 numaralı bağlantı noktası açık olan bir giriş ağ geçidi. Daha fazla bilgi için bkz. Giriş ağ geçidi oluşturma
Dağıtılmış HTTPBin uygulaması. Daha fazla bilgi için bkz. HTTPBin uygulamasını dağıtma
Çerez tabanlı oturum benzeşimini yapılandırın
Bu öğretici çerez tabanlı oturum benzeşimini gösterir. Aynı DestinationRule yapısı diğer karma anahtarı türleri için de geçerlidir; ilgili alanla değiştirmek için httpCookie bloğunu kullanın.
Adım 1: HTTPBin dağıtımını üç çoğaltmaya ölçeklendirin
İsteklerin pod'lar arasında nasıl dağıldığını gözlemlemek için üç çoğaltma gerekir. kubectl ile ACK kümesi veri düzlemine bağlanın ve aşağıdaki komutu çalıştırın:
kubectl scale deployment/httpbin --replicas 3
Adım 2: Oturum benzeşimi olmadan istek dağıtımını doğrulayın
-
Bir tarayıcıda
http://<ingress-gateway-ip>/status/418adresini açın ve sayfayı birkaç kez yenileyin.Giriş ağ geçidi IP'sini alma talimatları için bkz. Istio kaynaklarını kullanarak trafiği bir hizmetin farklı sürümlerine yönlendirme konusundaki Adım 3'ün alt adımı 1.
-
İsteklerin üç pod'un tamamına dağıtıldığını onaylamak için ağ geçidi günlüklerini kontrol edin:
ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini belirleyin.
Mesh Management sayfasında ASM örneğinin adına tıklayın. Sol gezinme bölmesinde ASM Gateways > Ingress Gateway seçeneğini belirleyin.
Ingress Gateway sayfasında hedef giriş ağ geçidini bulun ve Log Center seçeneğine tıklayın. Gateway Logs sekmesinde arama kutusuna
and 418ifadesini ekleyin ve Search & Analyze seçeneğine tıklayın. Sol alt köşedeki Raw Logs sekmesinde upstream_addr dizinini genişletin.
Günlükler, isteklerin üç HTTPBin pod'u arasında yaklaşık olarak eşit dağıldığını gösterir.

Adım 3: Çerez tabanlı oturum benzeşimi için bir hedef kuralı oluşturun
Aşağıdaki DestinationRule öğesini uygulayın. Hedef kurallarını yönetme hakkında ayrıntılı bilgi için bkz. Hedef kurallarını yönetme.
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
| Alan | Değer | Açıklama |
|---|---|---|
host |
httpbin.default.svc.cluster.local |
Bu kuralın uygulanacağı tam nitelikli hizmet ana bilgisayar adı |
consistentHash.httpCookie.name |
sticky-session-key |
Karma anahtarı olarak kullanılan çerez adı |
consistentHash.httpCookie.ttl |
0s |
Çerez ömrü |
Bu kuralı uyguladıktan sonra:
İlk istekte (çerez yokken) ağ geçidi, kaynak ve hedef IP adreslerinden ve bağlantı noktalarından bir karma oluşturur, isteği bir arka uca yönlendirir ve yanıtta
sticky-session-keyçerezini ayarlar.Sonraki isteklerde istemci bu çerezi geri gönderir. Ağ geçidi arka ucu belirlemek için çerez değerini karmalar ve isteği aynı pod'a yönlendirir.
Bu örnekte varsayılan HashRing algoritması kullanılır. Maglev'i kullanmak için (ASM v1.16 veya sonraki sürümler gereklidir) gereksinimlerinize bağlı olarak trafik ilkenize hashAlgorithm alanını ekleyin.
Adım 4: Oturum benzeşiminin çalıştığını doğrulayın
-
Bir tarayıcıda
http://<ingress-gateway-ip>/status/333adresini açın ve sayfayı birkaç kez yenileyin.Giriş ağ geçidi IP'sini alma talimatları için bkz. Istio kaynaklarını kullanarak trafiği bir hizmetin farklı sürümlerine yönlendirme konusundaki Adım 3'ün alt adımı 1.
-
Tüm isteklerin aynı poda ulaştığını onaylamak için ağ geçidi günlüklerini kontrol edin:
ASM konsolu üzerinde oturum açın. Sol gezinme bölmesinde Service Mesh > Mesh Management seçeneğini belirleyin.
Mesh Management sayfasında ASM örneğinin adına tıklayın. Sol gezinme bölmesinde ASM Gateways > Ingress Gateway seçeneğini belirleyin.
Ingress Gateway sayfasında hedef giriş ağ geçidini bulun ve Log Center seçeneğine tıklayın. Gateway Logs sekmesinde arama kutusuna
and 333ifadesini ekleyin ve Search & Analyze seçeneğine tıklayın. Sol alt köşedeki Raw Logs sekmesinde upstream_addr dizinini genişletin.
Günlükler, tüm isteklerin aynı arka uç pod'una yönlendirildiğini gösterir.

-
Tarayıcıdaki çerezi onaylayın: Geliştirici araçlarını açın, Network sekmesine tıklayın, sayfayı yenileyin ve bir isteği inceleyin. Yanıt, DestinationRule içindeki adla eşleşen bir
sticky-session-keyçerezi içerir. Ağ geçidi oturum benzeşimini korumak için bu çerezi kullanır.