Kubernetes

서비스 API 카테고리(세션 어피니티)

jih0ssang 2024. 2. 11. 17:44

서비스 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를 활성화한 경우 

 

 

어느 쿠버네티스 노드에 전송하는지에 따라 같은 파드에 전송된다고 단정할 수 없고,

어느 외부 로드밸런서에 전송하는지에 따라 같은 파드에 전송된다고 단정할 수 없다.