본문 바로가기

Container/Kubernetes

[K8S] kube-proxy

kube-proxy는 쿠버네티스의 네트워킹 컴포넌트로, 클러스터 내에서 파드(pod)와 서비스(service) 간의 네트워크 통신을 관리한다.

각 노드에서 실행되며, 쿠버네티스 서비스가 정의한 네트워크 규칙(iptables)을 적용하여 트래픽 라우팅과 로드 밸런싱을 처리합니다

 

주요 역할

  1. 서비스 구현: kube-proxy는 쿠버네티스의 서비스(Service) 리소스를 구현하여, 외부 및 내부 트래픽이 적절한 파드로 전달되도록 설정한다.
  2. 트래픽 라우팅: 서비스의 클러스터 IP를 통해 들어오는 트래픽을 관련 파드로 전달한다.
  3. 로드 밸런싱: 여러 파드가 서비스에 연결된 경우, 트래픽을 해당 파드로 라운드 로빈 방식으로 분산하여 처리한다.
  4. 네트워크 규칙 관리: 클러스터 내에서 트래픽 흐름을 제어하기 위해 iptables 또는 IPVS(Linux Virtual Server) 규칙을 생성한다.

동작 원리

  1. 서비스와 엔드포인트 감시:
    • kube-proxy는 쿠버네티스 API 서버로부터 서비스와 엔드포인트 정보를 지속적으로 감시(watch)한다.
    • 서비스에 연결된 파드(엔드포인트)가 변경되면 이를 즉시 반영한다.
  2. 네트워크 규칙 생성:
    • 서비스에 대한 네트워크 규칙을 생성하고 업데이트하여, 트래픽이 올바른 파드로 전달되도록 한다.
    • 규칙은 iptables, IPVS, 또는 사용자 정의 프록시 메커니즘을 통해 적용된다.
  3. 트래픽 전달:
    • 외부 또는 내부 클라이언트로부터 서비스 IP로 들어오는 요청을 적절한 파드로 전달한다.

주요 기능

  1. 클러스터 IP 지원: 서비스가 클러스터 내부에서 사용되는 클러스터 IP를 통해 접근 가능하도록 설정
  2. NodePort 지원: 외부 트래픽을 노드의 특정 포트(NodePort)로 전달하여 파드로 접근 가능하게 함.
  3. External IP 지원: 클러스터 외부에서 서비스에 접근할 수 있는 IP를 제공.
  4. LoadBalancer 지원: 클라우드 제공자의 로드 밸런서를 설정하여 외부 트래픽을 자동으로 처리.
  5. Ingress 지원: HTTP/HTTPS 트래픽 라우팅을 위한 Ingress 컨트롤러와 함께 작동.

kube-proxy와 CNI의 차이

  • kube-proxy:
    • 서비스와 파드 간의 트래픽을 라우팅하고 로드 밸런싱을 수행
    • 주로 서비스에 관련된 네트워크 트래픽을 관리
  • CNI (Container Network Interface):
    • 쿠버네티스 클러스터 내의 전체 네트워크를 구성 및 관리
    • 파드의 IP 할당, 네트워크 정책 적용, 네트워크 플러그인 제공

 

+ kube-proxy는 daemonset 기반으로 돌아간다.

$ kubectl get daemonset -n kube-system
반응형

'Container > Kubernetes' 카테고리의 다른 글

[K8S] Endpoints  (0) 2025.01.02
[K8S] Deployment  (0) 2024.12.31
[K8S] Kube-controller-manager  (0) 2024.12.24
[K8S] Kube-API Server  (0) 2024.12.24
[K8S] ETCD  (1) 2024.12.24