서비스 API 카테고리
컨테이너를 외부에 공개하는 엔드포인트를 제공하는 리소스
- 서비스
- ClusterIP
- ExternalIP (ClusterIP의 한 종류)
- NodePort
- LoadBalancer
- 그 외 서비스 기능
- Headless (None)
- ExternalName
- None-Selector
- 인그레스
Session Affinity
서비스에서 세션 어피니티(세션 선호도)를 활성화할 수 있다.
예를 들어, ClusterIP 서비스에서 활성화한 경우, 파드에서 ClusterIP로 보내진 트래픽은 서비스에 연결된 어느 하나의 파드에 전송된 후 다음 트래픽도 계속 같은 파드에 보내진다.
상태(STATE)
- 사용자가 로그인했는가? 그럼 해당 서비스를 이용할 수 있는 권한이 있다.
- 이러한 상태를 유지하려면 stateful해야한다.
Sticky Session
- 한 사용자의 모든 요청이 한 서버(동일한) 인스턴스로 보내도록 하는 기법
- Stateful한 서비스를 로드 밸런싱 할 때 사용하는 기법입니다.
ClusterIP 서비스에서 Session Affinity를 활성화한 경우
옵션 sessionAffinity, sessionAffinityConfig
apiVersion: v1
kind: Service
metadata:
name: sample-session-affinity
spec:
type: LoadBalancer
selector:
app: sample-app
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
nodePort: 30084
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10
최대 세션 고정 시간(sessionAffinityConfig.clientIP.timeoutSeconds)를 설정할 수 있다.
그리고 spec.sessionAffinity 기본값은 None이다.
마지막 요청 후 10초 이내의 요청은 같은(동일한) 파드로 전송한다.
# 첫 번째 요청 전송 (sample-pod에 curl을 설치한 후 실행)
$ kubectl exec -it sample-pod -- curl http://sample-session-affinity.default.svc.cluster.local:8080
Host=sample-session-affinity.default.svc.cluster.local Path=/ From=sample-deployment-x4x97 ClientIP=10.0.2.49 XFF=
# 마지막 요청 후 10초 이내에 요청 전송
$ kubectl exec -it sample-pod -- curl http://sample-session-affinity.default.svc.cluster.local:8080
Host=sample-session-affinity.default.svc.cluster.local Path=/ From=sample-deployment-x4x97 ClientIP=10.0.2.49 XFF=
# 마지막 요청 후 10초 이상 간격을 두고 요청 전송
$ kubectl exec -it sample-pod -- curl http://sample-session-affinity.default.svc.cluster.local:8080
Host=sample-session-affinity.default.svc.cluster.local Path=/ From=sample-deployment-87v5d ClientIP=10.0.2.49 XFF=
NodePort, LoadBalancer서비스에서 Session Affinity를 활성화한 경우
어느 쿠버네티스 노드에 전송하는지에 따라 같은 파드에 전송된다고 단정할 수 없고,
어느 외부 로드밸런서에 전송하는지에 따라 같은 파드에 전송된다고 단정할 수 없다.
'Kubernetes' 카테고리의 다른 글
서비스 API 카테고리(ExternalName) (0) | 2024.02.11 |
---|---|
서비스 API 카테고리(Headless) (0) | 2024.02.11 |
서비스 API 카테고리(LoadBalancer) (0) | 2024.02.08 |
서비스 API 카테고리(ExternalIP, NodePort) (0) | 2024.02.07 |
서비스 API 카테고리(ClusterIP) (0) | 2024.01.20 |