본문 바로가기

컨테이터/가상화

쿠버네티스 서비스(kubernetes services) (2)

OSS 2018-09-27 14:30:16 2132
2018

Posted in Kubernetes by arisu1000

 

kube-proxy 소개 및 종류

쿠버네티스에서 서비스를 만들었을 때 나오는 ClusterIP나 NodePort로 접근하게 해주는건 큐브프록시(kube-proxy)입니다. 큐브프록시는 쿠버네티스 클러스터의 각 노드마다 실행되고 있으면서 클러스터 내부 IP로 연결되기 바라는 요청을 적절한 곳으로 전달해 주는 역할을 합니다. 큐브프록시가 네트워크를 관리하는 방법은 userspace, iptables, ipvs 3가지가 있습니다. 초기에는 userspace가 기본 모드였고 현재(2018년 6월)에는 iptables가 기본모드입니다. 그리고 iptables에서 ipvs 모드로 넘어가려고 하고 있습니다.

 

userspace 모드

userspace모드로 설정하면 다음 그림같은 구조를 가지게 됩니다. 클라이언트에서 서비스IP를 통해서 요청을 하게 되면 iptables을 거쳐서 큐브프록시가 요청을 받은 다음에 그 서비스IP가 연결되야하는 적절한 포드로 연결을 해 줍니다. 이때 요청을 포드들에 나눠주는 방식은 라운드로빈(round robin)입니다.

 

iptables 모드

iptables 모드는 다음 그림같은 구조를 가집니다. userspace모드와 다른점은 큐브프록시는 iptable을 관리하는 역할만 하고 직접 클라이언트로 부터 트래픽을 받지는 않습니다. 클라이언트로부터 오는 모든 요청은 iptables을 거쳐서 직접 포드로 전달됩니다. 그래서 userspace모드보다 빠른 성능을 가지게 됩니다. userspace모드에서는 포드 하나로의 요청이 실패하면 자동으로 다른 포드로 연결을 재시도 하지만 iptables모드에서는 포드하나로 가는 요청이 실패하면 재시도를 하지 않고 그냥 요청이 실패합니다. 그래서 이런걸 방지하기 위해서 readiness probe 설정이 잘 되어 있어야 합니다.

 

ipvs 모드

ipvs(IP Virtual Server) 모드는 리눅스 커널에 있는 L4 로드밸런싱 기술로 Netfilter에 포함되어 있습니다. 그래서 IPVS 커널모듈이 설치되어 있어야 합니다. ipvs는 커널스페이스에서 작동하고 데이터 구조를 해시테이블로 저장해서 가지고 있기 때문에 iptables보다 빠르고 좋은 성능을 냅니다. 그리고 ipvs는 더 많은 로드밸런싱 알고리즘을 가지고 있어서 이걸 이용할 수 있습니다. rr(round-robin), lc(least connection), dh(destination hashing), sh(source hashing), sed(shortest expected delay), nq(never queue)등의 다양한 로드밸런싱 알고리즘을 제공해 줍니다. 


[원본출처: http://arisu1000.tistory.com/27839?category=787056 [아리수]]

 

 

맨 위로
맨 위로