kube-proxy 역할
kube-proxy는 쿠버네티스 클러스터의 각 노드에서 실행되는 네트워크 프록시 컴포넌트로 Service가 제공하는 가상 IP(Cluster IP)를 실제 Pod들로 라우팅되도록 네트워크 규칙을 관리하는 역할을 한다.
즉, Service와 Pod를 연결해주는 네트워크 관리자.
1. Service -> Pod Routing #
Service가 가진 ClusterIP로 들어온 요청을 실제 Pod IP로 전달하는 필수 네트워크 규칙을 만듦
- iptables mode
- ipvs mode
위 두 방식중에 하나로 라우팅 규칙을 생성함.
Pod Endpoint 변화 감지 및 규칙 자동 업데이트 #
새로운 파드가 생기면 라우팅 대상에 추가하고 죽으면 바로 라우팅 대상에서 제거한다.
Ready상태가 아니면 트래픽 전달 대상에서 제외한다.
즉, kube-proxy는 Service 뒤에 있는 Pod List를 최신 상태로 유지하는 역할도 진행한다.
NodePort 구현 #
NodePort Service는 모든 노드의 특정 포트를 개방한다.
kube-proxy가 이포트를 열고 그 포트로 들어온 요청을 적절한 pod로 보내주는 역할도 한다.
Load Balancing #
여러 파드가 뒤에 있을때 트래픽을 골고루 분산한다.
- 라운드 로빈 ipvs
- 랜덤 iptables
- session 기반 옵션 ipvs
즉 kube-proxy가 존재하지 않는다면 Service는 ip만 잇는 껍데기가 되고 트래픽을 파드에 전달할 수 없게 된다.
kube-proxy = Service를 실제 Pod에 연결해주는 네트워크 라우팅 담당자
정의: 노드 단위 네트워크 프록시
핵심 역할:
- Service 가상 IP → Pod 실제 IP 라우팅
- 엔드포인트(Pod) 변화에 따라 규칙 갱신
- NodePort 처리
- 트래픽 로드밸런싱