인프런 커뮤니티 질문&답변

dygks3240님의 프로필 이미지

작성한 질문수

데브옵스(DevOps)를 위한 쿠버네티스 마스터

ClusterIP와 SessionAffinity 실습

sessionAffinity 작동관련 질문

작성

·

336

·

수정됨

0

강사님 강의 잘 듣고 있습니다.

강사님 강의중 궁금한점이 생겨 질문 드립니다.

우선 강의중 sessionAffinity 필드를 ClientIp 로 고쳐도 로드밸런싱 되는 현상을

kubectl edit configmap -n kube-system cilium-config

kube-proxy-replacement: strict

해당 방법으로 해결하였습니다, 여기서 궁금증이 생겼는데

 

쿠버네티스 문서를 확인해보면 clusterip 의 작동원리가 그림으로 설명 되어 있습니다. 해당 그림에선 api서버가 kube-proxy 를 통해 clusterip 로 들어와 로드밸런싱이 작동되는데

kube-proxy-replacement 해당 필드는 실리움이 kube-proxy 를 대체하거나 혹은 kube-proxy 가 정상 작동하는 것으로 알고있습니다. 그렇다면 해당 필드가 false 라면 kube-proxy 는 sessionAffinity 필드가 ClientIP 더라도 외부에서 들어오는 트래픽을 로드밸런싱 하는것인가요? 근본적인 동작 원리가 궁금하여 질문드립니다.

답변 2

0

Service 에서 직접 Session Affinity 를 설정할 수는 있지만 이 방식은 좀 위험해 보입니다. 예를 들어 Service 가 트래픽을 직접 받지 않고 Ingress 를 경유할 때는 서비스가 받는 ClientIP는 클라이언트의 IP가 아닌 Ingress LB 로드 밸런서나 인그레스 컨트롤러 포드의 IP가 되어서 로드가 분산되지 않고 모든 트래픽이 계속 1개의 Pod 에만 입력이 지속적으로 되지 않을까 싶은데요? 제 생각이 맞는지 틀리다면 어떤 부분이 틀렸는지 그리고 맞다면 사용에 주의점이 있는지 그리고 문제에 대한 대안이 있으면 작은 팁이라도 알려주시면 감사드리겠습니다.

0

안녕하세요 dygks3240님

강사 최일선입니다.

 

Cilium에 관련된 질문 감사합니다.

말씀하신 것처럼 Cilium을 설치하면 기본적으로 kube-proxy의 일부 기능을 Cilium이 대체한다고 보면 됩니다. 다음 내용을 참고하시면 될 것 같습니다. 다만 Cilium이 NodePort의 기능을 수행하지 않는다고 합니다.

https://github.com/cilium/cilium/issues/6534

 

위 글은 2019년 글인데 아래 Cilium 문서 내용을 보면 이런 내용이 있습니다. 참고하시면 좋을 것 같습니다. (한글 번역한 내용입니다.)

"이렇게 하면 Cilium이 CNI 플러그인으로 설치되고 eBPF kube-proxy가 다음과 같이 대체됩니다. ClusterIP, NodePort, LoadBalancer 유형의 Kubernetes 서비스 처리 구현 및 externalIP가 있는 서비스. 또한 eBPF kube-proxy 교체도 portmap을 더 이상 사용할 필요가 없도록 컨테이너에 대해 hostPort를 지원합니다."

https://docs.cilium.io/en/stable/network/kubernetes/kubeproxy-free/

마지막으로 다음 링크를 보시면 Cilium이 쿠버네티스에 제공하는 서비스 부하 분산에 대한 내용을 설명합니다. (한글 번역한 내용입니다.)

"쿠버네티스는 사용자에게 네트워크 트래픽을 다른 Pod로 로드 밸런싱할 수 있습니다. 이 추상화 Pod가 단일 IP 주소(가상 IP)로 다른 Pod에 연결할 수 있도록 합니다. 특정 서비스를 실행하는 모든 Pod를 모른 채 주소를 지정합니다.
...
ClusterIP를 구현할 때 Cilium은 kube-proxy와 동일한 원칙에 따라 작동하며, 서비스 추가 또는 제거를 감시하지만 대신 iptables에 적용하면 각 노드에서 eBPF 맵 항목이 업데이트됩니다.

..."

https://docs.cilium.io/en/latest/network/kubernetes/intro/

 

결론적으로 말씀드리면 Cilium은 kube-proxy의 일부 기능(노드포트)을 제외하고 서비스가 가능하며 kube-proxy에 등록되어 있는 iptables 규칙을 그대로 Cilium은 eBPF에 매핑하여 로드밸런싱한다는 내용으로 정리하면 될 것 같습니다!

 

좋은 질문 감사드립니다.

 

최일선 드림.