826. Kube-Proxy 쿠버네티스 서비스 트래픽 부하 분산 룰 생성 (iptables/IPVS 모드) 구조

핵심 인사이트: 1번 서버(컨테이너)가 죽어서 쿠버네티스가 2번 서버를 새로 띄웠다. IP가 바뀌었다. 고객들은 바뀐 IP를 모른다. 고객이 어떻게 2번 서버를 찾아갈까? 쿠버네티스는 '서비스(Service)'라는 안 바뀌는 가짜 간판(가상 IP)을 하나 허공에 달아둔다. 그리고 전국의 모든 컴퓨터(Node)에 'Kube-Proxy'라는 안내원을 배치한다. 안내원은 1초마다 진짜 서버들의 살아있는 IP 명단을 업데이트해서 들고 있다가, 손님이 가짜 간판(서비스 IP)을 보고 찾아오면 "아, 지금은 2번 서버가 살아있으니 거기로 가세요!"라고 길을 꺾어주는 완벽한 동적 로드밸런서다.

Ⅰ. Kube-Proxy의 개념과 존재 이유

  • 개념: 쿠버네티스 클러스터의 모든 워커 노드(물리/가상 서버)마다 1개씩 무조건 설치되어 돌아가는 네트워크 데몬(에이전트) 프로그램입니다.
  • 역할: 외부나 내부에서 **'Service (가상 IP, VIP)'**로 들어온 트래픽 요청을, 그 뒤에서 실제로 살아서 돌아가고 있는 수많은 **'진짜 Pod(컨테이너)들의 IP'**들 중 하나로 공평하게 분배(로드밸런싱)해 주는 분산 프록시 라우터 역할을 전담합니다.

Ⅱ. Kube-Proxy가 길을 안내하는 3가지 모드 (진화 과정) 🌟

초창기부터 지금까지 Kube-Proxy가 손님을 안내하는 룰(방식)은 3단계로 진화했습니다.

1. User space 모드 (완전 구형, 현재 안 씀)

  • Kube-Proxy라는 일반 프로그램(유저 스페이스)이 패킷을 직접 손으로 다 받아서 뜯어본 뒤, "어디로 갈래?" 하고 목적지 Pod로 직접 던져줬습니다.
  • 문제점: 패킷이 리눅스 커널(밑바닥)로 들어왔다가 Kube-Proxy 프로그램(위쪽)으로 올라왔다가 다시 커널로 내려가야 해서 CPU 과부하(Context Switching)가 터지고 속도가 끔찍하게 느렸습니다.

2. iptables 모드 (현재 쿠버네티스 기본 디폴트 값) 🌟

  • Kube-Proxy가 패킷을 직접 만지지 않습니다! 대신 자기는 '룰(Rule) 작성자' 역할만 합니다.
  • 동작: Kube-Proxy가 중앙 통제실(API Server)을 감시하다가, "어? 새로운 DB 포드 3개가 떴네?"라는 소식을 들으면, 곧바로 자기가 깔려있는 리눅스 서버 커널의 **iptables (리눅스 기본 방화벽/라우팅 룰북)**에다가 수천 줄의 규칙을 코딩해 박아 넣습니다.
  • 효과: 패킷이 들어오면 Kube-Proxy 프로그램까지 올라올 필요도 없이, 리눅스 커널 밑바닥이 iptables 장부를 보고 0.1초 만에 "아, 이 패킷은 1번 포드로 가라네!" 하고 튕겨(DNAT) 줍니다. (훨씬 빠름)
  • 단점: 앞서 825번 문서에서 배웠듯, 포드가 1만 개로 늘어나면 iptables 규칙이 10만 줄이 되어버려 패킷이 이거 읽느라 또 렉이 걸립니다(O(N) 순차 스캔의 저주).

3. IPVS 모드 (대규모 클러스터용 끝판왕) 🌟

  • iptables의 렉을 해결하기 위해 도입된 리눅스 커널의 진짜배기 **L4 로드밸런싱 전용 모듈(IP Virtual Server)**입니다.
  • 동작: Kube-Proxy가 iptables 대신 이 IPVS 모듈에 룰을 심습니다.
  • 장점: IPVS는 무식하게 첫 줄부터 읽는 게 아니라, **해시 테이블(Hash Table)**을 써서 룰이 10만 개든 100만 개든 0.001초 만에 목적지를 한 방에 찾아냅니다(O(1)의 마법). 또한 라운드 로빈(순서대로 주기), 최소 연결(손님 적은 곳 주기) 등 훨씬 똑똑한 로드밸런싱 분배 알고리즘을 지원합니다.

Ⅲ. Kube-Proxy와 CNI(Flannel, Calico)의 차이점 혼동 주의

  • CNI 플러그인(822번): "포드 A와 포드 B가 물리적으로 대화할 수 있는 **진짜 도로(터널, 라우팅)**를 까는 역할" (도로 공사).
  • Kube-Proxy: "도로는 CNI가 이미 깔아놨으니, 나는 사거리에서 깃발을 들고 트래픽을 1번 도로로 보낼지 2번 도로로 보낼지 트래픽 비율을 나누는 역할만 할게!" (교통경찰). 둘은 완벽히 분업하여 함께 돌아갑니다. (단, 825번의 Cilium(eBPF)은 Kube-Proxy마저 자기가 먹어 치웁니다.)

📢 섹션 요약 비유: Kube-Proxy는 놀이공원의 '안내 매표소 직원'입니다. 롤러코스터(Service)를 타러 손님이 몰려오면, 안내 직원이 "지금 1번 열차(Pod A), 2번 열차(Pod B), 3번 열차(Pod C)가 운행 중입니다. 줄을 서세요!"라고 분배해 줍니다(로드밸런싱). iptables 모드는 직원이 두꺼운 '종이 장부'를 첫 장부터 끝까지 넘겨가며 어느 열차가 비었는지 수동으로 찾는 방식이라 열차가 1만 대가 되면 줄이 밀립니다. IPVS 모드는 직원이 '최첨단 전산 태블릿(해시 테이블)'을 써서 검색어 1방에 가장 텅 빈 열차를 즉각 찾아내어 승객을 0.01초 만에 꽂아 넣어주는 대규모 전용 하이패스 시스템입니다.