Session Affinity
Session Affinity(또는 Sticky Session)는 같은 해시 키의 요청에 대해 느슨한 친화성을 제공하는 기법이며 영구적인 파드 고정을 보장하지 않습니다.
목차
Session Affinity 개요
Consistent Hash 기반
HTTP Header 기반
yaml
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: reviews-session-affinity
spec:
host: reviews
trafficPolicy:
loadBalancer:
consistentHash:
httpHeaderName: "x-user-id"Cookie 기반
yaml
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: reviews-cookie-affinity
spec:
host: reviews
trafficPolicy:
loadBalancer:
consistentHash:
httpCookie:
name: "session-id"
ttl: 0s # 쿠키 만료 시간 (0s = 세션 쿠키)Source IP 기반
yaml
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: reviews-ip-affinity
spec:
host: reviews
trafficPolicy:
loadBalancer:
consistentHash:
useSourceIp: true운영 고려사항
그림은 엔드포인트 집합과 각 프록시의 엔드포인트 정보가 같고 변하지 않는 상황을 가정합니다. 파드 추가·삭제나 locality별 엔드포인트 차이로 요청 대상이 바뀔 수 있으므로 재매핑과 파드 장애에 견디도록 세션 상태를 저장하세요.
동일한 호스트에는 위 DestinationRule 중 하나를 선택합니다. HTTP 헤더/쿠키 해시는 HTTP 처리가 필요하며 헤더가 없으면 사용자를 식별할 수 없습니다. ttl: 0s는 쿠키가 없을 때 세션 쿠키를 만들지만 브라우저가 후속 요청에 다시 보내야 합니다. 쿠키 속성과 수명은 앱 요구에 맞게 정하세요.
Source IP 해시는 프록시에 보이는 출발 주소를 사용합니다. NAT와 중간 로드 밸런서로 여러 클라이언트가 같은 주소로 보일 수 있으므로 신뢰 프록시와 클라이언트 IP 처리를 확인하세요. 위는 Sidecar DestinationRule 예제이며 waypoint의 기능 지원은 별도 확인해야 합니다.
