본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

IPVS kube-proxy 사용하기

원문 보기 위키 갱신

kube-proxy를 IPVS 모드로 운영하면 서비스가 수천 개로 늘어나는 클러스터에서도 일정한 시간 복잡도로 서비스 로드 밸런싱을 할 수 있어요. 이 문서는 IPVS 모드의 개념과 Calico와의 연동 방식, NodePort 범위 동기화 방법을 다뤄요.

출처: 문서

본문

큰 그림

파드 사이에서 트래픽을 로드 밸런싱하기 위해 IPVS kube-proxy 모드를 사용해요.

이런 점이 좋아요

컨테이너 네트워킹 여정의 어느 지점에 계시든, iptables는 잘 serve할 거예요. 하지만 1,000개 이상의 서비스로 확장한다면 kube-proxy IPVS 모드로 얻을 수 있는 성능 개선을 살펴볼 가치가 있어요.

개념

Kubernetes kube-proxy

kube-proxy 프로세스는 각 노드에서 서비스와 관련된 모든 일을 처리해요. 서비스 클러스터 IP와 포트로 들어오는 연결이 그 서비스를 뒷받침하는 파드로 가도록 보장해요. 파드가 여러 개면 kube-proxy가 파드들 사이에서 트래픽을 로드 밸런싱해요.

kube-proxy는 세 가지 모드로 실행돼요: userspace, iptables, ipvs. (userspace는 오래되고 느려서 권장하지 않아요.) iptables와 ipvs 모드의 요약이에요.

kube-proxy mode Designed to be... Linux kernel hooks Connection processing overhead...
iptables An efficient firewall NAT pre-routing using sequential rules Grows proportional to cluster size
ipvs A load balancer with scheduling options like round-robin, shortest-expected delay, least connections, etc. Optimized lookup routine Stays constant, independent of cluster size

iptables와 ipvs의 성능 차이가 궁금하다면, 답은 결코 단순하지 않아요. iptables(Calico 자체의 iptables 사용 포함)와 ipvs 모드의 비교는 kube-proxy 모드 비교: iptables or IPVS?를 참고하세요.

IPVS 모드와 NodePort 범위

kube-proxy IPVS 모드는 NodePort 서비스와 클러스터 IP를 지원해요. Calico도 클러스터로 트래픽을 라우팅할 때 NodePort를 사용하며, 기본 Kubernetes NodePort 범위(30000:32767)도 같아요. Kubernetes에서 기본 NodePort 범위를 바꾼다면, ipvs 커버리지를 유지하려면 Calico에서도 바꿔야 해요.

iptables: mark 비트를 언제 바꾸나

IPVS 모드에서 트래픽을 감시하기 위해, Calico는 각 로컬 Calico 엔드포인트의 ID를 저장하려고 추가 iptables mark 비트를 사용해요. IPVS를 켠 상태에서 호스트당 1,022개 이상의 파드를 실행할 계획이라면, Calico FelixConfiguration의 IptablesMarkMask 파라미터로 mark 비트 크기를 조정해야 할 수 있어요.

Calico는 ipvs 모드를 자동 감지해요

Calico가 kube-proxy가 IPVS 모드로 실행되는 걸 감지하면(설치 중이든 이후든), IPVS 지원이 자동으로 활성화돼요. 감지는 calico-node가 시작될 때 일어나요. 그래서 실행 중인 클러스터에서 kube-proxy의 모드를 바꾸면 calico-node 인스턴스를 재시작해야 해요.

시작하기 전에...

필수

  • kube-proxy가 IPVS 모드로 설정되어 있어요
  • ipvs 모드의 서비스는 type이 NodePort예요

방법

앞서 말했듯이, IPVS 모드를 사용하기 위해 Calico 쪽에서 할 일은 없어요; 켜져 있으면 모드가 자동 감지돼요. 하지만 기본 Kubernetes NodePort 범위가 바뀌었다면, 다음 안내에 따라 Calico nodeport 범위를 업데이트해서 동기화를 유지하세요. 감지는 calico-node가 시작될 때 일어나요. 그래서 실행 중인 클러스터에서 kube-proxy의 모드를 바꾸면 calico-node 인스턴스를 재시작해야 해요.

Calico 기본 nodeport 범위 바꾸기

FelixConfiguration 리소스에서, Calico의 기본 node port 범위 설정 파라미터(KubeNodePortRange)를 Kubernetes의 새 기본 범위에 맞게 바꾸세요. 도움이 필요하면 FelixConfiguration을 참고하세요.

더 알아보기 (Learn more)

IPVS 모드에서는 Calico가 자동으로 감지·연동되니 기본 설정으로도 대부분 잘 동작해요. NodePort 범위를 바꿀 때만 Kubernetes와 Calico 양쪽을 같이 업데이트하면 돼요. 호스트당 파드 수가 1,022를 넘는다면 IptablesMarkMask를 점검하세요.