Panoramica dell'affinità di sessione del gateway applicazione per contenitori
L'affinità di sessione, nota anche come persistenza della sessione o sessioni permanenti, è una tecnica usata nel bilanciamento del carico per garantire che le richieste di un client vengano sempre inviate allo stesso server. Questo aspetto è importante per le applicazioni che archiviano i dati utente nelle variabili di sessione o in una cache locale in un determinato server (comunemente definito applicazione con stato).
Con l'affinità di sessione, il gateway applicazione per contenitori presenta un cookie nell'intestazione Set-Cookie della prima risposta. Se il client presenta il cookie nelle richieste future, il gateway applicazione per contenitori riconosce il cookie e inoltra il traffico alla stessa destinazione back-end. Vedere lo scenario di esempio seguente:
I passaggi seguenti sono illustrati nel diagramma precedente:
- Un client avvia una richiesta a un front-end del gateway applicativo per contenitori.
- Gateway applicativo per contenitori seleziona uno dei numerosi pod disponibili per bilanciare il carico della richiesta. In questo esempio si presuppone che l'opzione Pod C sia selezionata tra i quattro pod disponibili.
- Il pod C restituisce una risposta al gateway applicativo per contenitori.
- Oltre alla risposta back-end del pod C, Gateway aggiunge un'intestazione Set-Cookie contenente un hash generato in modo univoco usato per il routing.
- Il client invia un'altra richiesta a Gateway applicativo per contenitori insieme al cookie di affinità di sessione impostato nel passaggio precedente.
- Gateway applicativo per contenitori rileva il cookie e seleziona il pod C per gestire la richiesta.
- Il pod C risponde al Gateway applicativo per contenitori.
- Gateway applicativo per contenitori restituisce una risposta al client
Usage details (Dettagli di utilizzo)
L'affinità di sessione è definita dalle proprietà e dalle caratteristiche seguenti:
Nome | Descrizione |
---|---|
affinityType | I valori validi sono cookie applicazione o cookie gestiti. |
cookieName | Obbligatorio se affinityType è un cookie applicazione. Si tratta del nome del cookie. |
cookieDuration | Obbligatorio se affinityType è un cookie applicazione. Questa è la durata (durata) del cookie in secondi. |
Nel tipo di affinità cookie gestita, il gateway applicazione usa valori predefiniti quando il cookie viene offerto al client.
- Il nome del cookie è:
AGCAffinity
. - La durata (durata) del cookie è di 86.400 secondi (un giorno).
- Le proprietà e i valori
cookieName
ecookieDuration
vengono eliminati.
Nel tipo di affinità dell'applicazione, il nome e la durata del cookie (durata) devono essere definiti in modo esplicito.
Come configurare l'affinità di sessione
L'affinità di sessione può essere definita in una risorsa RoutePolicy, destinata a un HTTPRoute definito. È necessario specificare sessionAffinity
con un affinityType
di application-cookie
o di managed-cookie
. In questo esempio si usa application-cookie
come affinityType e si definiscono in modo esplicito un nome e una durata del cookie.
Comando di esempio per creare un nuovo RoutePolicy con un cookie definito chiamato nomnom
con una durata di 3.600 secondi (1 ora).
kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: RoutePolicy
metadata:
name: session-affinity-route-policy
spec:
targetRef:
kind: HTTPRoute
name: http-route
namespace: test-infra
group: ""
default:
sessionAffinity:
affinityType: "application-cookie"
cookieName: "nomnom"
cookieDuration: 3600
EOF