귀염둥이의 메모

[K8s] kube-proxy 본문

Infra & Devops/Kubernetes

[K8s] kube-proxy

겸둥이xz 2021. 10. 7. 03:06
반응형

kube-proxy

  • 서비스를 만들었을 때 ClusterIP나 NodePort로 접근할 수 있게 만들어 실제 조작을 하는 컴포넌트
  • 클러스터의 노드마다 실행되면서 클러스터 내부 IP로 연결하려는 요청을 적절한 파드로 전달
  • userspace, iptables, IPVS 모드가 있다

userspace 모드

  • 클라이언트에서 서비스의 ClusterIP를 통해 요청을 하면 iptables를 거쳐 kube-proxy가 요청을 받는다
  • 그리고 서비스의 ClusterIP는 연결되어야 하는 적절한 파드로 연결해준다
  • 요청을 파드로 연결하는 방식은 라운드 로빈(Round Robin)을 사용한다
  • 파드 하나로의 연결 요청이 실패하면 자동으로 다른 파드에 연결을 재시도한다

iptables 모드

  • userspace와 다르게 kube-proxy는 iptables를 관리하는 역할만 한다 ➡️ 클라이언트의 트래픽을 직접 받지 않음
  • 클라이언트의 모든 요청은 iptables를 거쳐서 파드로 직접 전달된다 ➡️ userspace 보다 요청 처리 성능이 좋음
  • 파드 하나로의 연결 요청이 실패하면 재시도하지 않음 ➡️ 요청이 실패 처리됨
    • 컨테이너에 readinessProbe가 설정되어있고 Health check가 정상적으로 되어야 연결 요청이 이루어짐

IPVS (IP Virtual Server) 모드

  • 모든 리눅스 커널에 있는 L4 로드밸런싱 기술이다
  • 리눅스 커널 안 네트워크 관련 프레임워크인 Netfilter에 포함되어 있다 ➡️ IPVS 커널 모듈이 노드에 설치되어야 함
  • 커널 공간에서 작동하고 데이터 구조를 해시 테이블로 저장함 ➡️ iptables보다 빠르고 좋은 성능을 낸다
  • 다양한 로드밸런싱 알고리즘
    • rr (round-robin) : 프로세스 사이에 우선순위를 갖지 않고, 순서와 시간 단위로 CPU를 할당
    • lc (least connection) : 접속 개수가 가장 적은 서버를 선택
    • dh (destination hashing) : 목적지 IP 주소로 해시값을 계산하여 분산할 실제 서버를 선택
    • sh (source hashing) : 출발지 IP 주소로 해시값을 계산하여 분산할 실제 서버를 선택
    • sed (shortest expected delay) : 응답 속도가 가장 빠른 서버를 선택
    • nq (never queue) : sed와 비슷하지만 활성 접속 개수가 0인 서버를 가장 먼저 선택

 


References

https://arisu1000.tistory.com/27839

반응형
Comments