본문 바로가기
K8S

[kubernetes] IPVS에 대해 알아보자!

by Rainbound-IT 2024. 12. 21.
반응형

Kubernetes의 IPVS 모드는 네트워크 트래픽 라우팅을 위해 **Linux 커널의 IP 가상 서버(IPVS, IP Virtual Server)**를 사용하는 kube-proxy의 실행 모드 중 하나입니다. IPVS는 iptables보다 더 효율적이고 고성능의 트래픽 처리와 부하 분산 기능을 제공합니다.


IPVS란?

  • **IP Virtual Server (IPVS)**는 Linux 커널에서 제공하는 L4(Transport Layer) 부하 분산 기술입니다.
  • 네트워크 트래픽을 가상 IP 주소(Virtual IP)로 받아 백엔드 서버(Pod 등)로 분산합니다.
  • Connection Tracking 기능을 통해 상태 기반(stateful) 연결 관리가 가능합니다.
  • 주요 특징:
    • 부하 분산 알고리즘 지원.
    • 고속 패킷 처리.
    • 많은 수의 연결을 처리 가능.

kube-proxy의 IPVS 모드 작동 방식

  1. Kubernetes API 서버와 동기화:
    • kube-proxy는 Kubernetes API 서버에서 ServiceEndpoints 정보를 가져옵니다.
  2. IPVS 룰 생성:
    • Service 객체와 연결된 Endpoints를 기반으로 IPVS 테이블에 트래픽 분산 규칙을 생성합니다.
    • ClusterIP, NodePort, ExternalIP와 관련된 규칙이 포함됩니다.
  3. 트래픽 처리:
    • IPVS는 가상 IP(VIP)에 들어오는 요청을 적절한 백엔드 서버(Pod)로 분산합니다.
    • Endpoints가 변경되면 kube-proxy가 자동으로 IPVS 규칙을 업데이트합니다.

IPVS와 iptables의 차이점

특징 IPVS iptables
작동 방식 커널 기반 L4 로드 밸런싱. Virtual Server 룰을 통해 트래픽 분산. 패킷을 체인에 따라 평가하고 규칙에 맞는 액션 수행.
성능 고속 처리 가능. 대규모 연결 지원. 대규모 서비스에 대한 규칙이 많아지면 성능 저하 발생 가능.
알고리즘 지원 여러 부하 분산 알고리즘 지원 (라운드 로빈, 최소 연결 등). 부하 분산 알고리즘 미지원.
스케일링 많은 Endpoints에서도 효율적. 많은 Endpoints에서 성능 저하 가능.
유지 관리 동적 업데이트 효율적. Endpoints 변경 시 규칙 갱신에 시간 소요.

IPVS 모드의 부하 분산 알고리즘

IPVS는 다양한 부하 분산 알고리즘을 제공합니다:

  1. rr (Round Robin): 요청을 순차적으로 백엔드로 분배.
  2. lc (Least Connection): 연결이 가장 적은 백엔드로 분배.
  3. dh (Destination Hashing): 요청의 목적지 IP를 해싱하여 백엔드 선택.
  4. sh (Source Hashing): 요청의 소스 IP를 해싱하여 백엔드 선택.
  5. wrr (Weighted Round Robin): 백엔드의 가중치에 따라 요청을 분배.
  6. wlc (Weighted Least Connection): 가중치를 고려하여 연결이 가장 적은 백엔드로 분배.

IPVS 모드 활성화

IPVS 모드를 활성화하려면 kube-proxy 설정에서 --proxy-mode=ipvs 옵션을 사용해야 합니다.
또한, IPVS 관련 커널 모듈이 로드되어 있어야 합니다.

1. 필요한 커널 모듈 확인:

lsmod | grep ip_vs

2. IPVS 모드 활성화:

  • kube-proxy 실행 시 다음 플래그를 추가: 
  • kube-proxy --proxy-mode=ipvs
     
  • 또는 kube-proxy 설정 파일(configmap) 수정: 
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-proxy
  namespace: kube-system
data:
  config.conf: |
    mode: ipvs
    ipvs:
      scheduler: "rr"

3. IPVS 상태 확인:

IPVS 테이블 확인:

ipvsadm -Ln

장점

  1. 고성능: 대규모 트래픽과 많은 Endpoints 처리에 적합.
  2. 다양한 알고리즘: 부하 분산 알고리즘을 선택적으로 활용 가능.
  3. 빠른 업데이트: Endpoints 변경 시 실시간으로 규칙 적용.
  4. 효율적 확장성: 대규모 클러스터에서도 효율적으로 동작.

제약

  1. 커널 의존성: IPVS 관련 커널 모듈이 필요.
  2. 복잡성: iptables에 비해 설정 및 디버깅이 더 복잡할 수 있음.
  3. 기본 모드가 아님: Kubernetes에서 기본적으로 iptables 모드가 사용되며, IPVS 모드를 수동으로 설정해야 함.

결론

IPVS 모드는 Kubernetes 클러스터에서 고성능과 확장성을 제공하는 kube-proxy의 실행 모드입니다. iptables보다 더 빠르고 효율적으로 Endpoints를 처리하며, 다양한 부하 분산 알고리즘을 지원하여 대규모 트래픽이 필요한 환경에 적합합니다. IPVS 모드를 선택하면 Kubernetes의 서비스 네트워킹 성능을 크게 향상시킬 수 있습니다.

 

 

그렇다면 언제 IPvs를 사용하는게 좋을까?

 

굳이 IPVS 모드를 사용할 필요성이 있을 때

IPVS 모드를 사용하는 이유는 특정 환경에서 iptables 기반 kube-proxy의 한계를 해결하고 성능을 향상시키기 위해서입니다.


1. 성능 문제 해결

  • iptables의 비효율성:
    • iptables는 서비스 Endpoints가 많아질수록 성능 저하를 겪습니다. 이유는 규칙이 체인으로 구성되므로, 각 패킷이 규칙을 순차적으로 평가해야 하기 때문입니다.
    • Endpoints 수가 많아질 경우, iptables 규칙 업데이트와 네트워크 트래픽 처리 속도가 느려질 수 있습니다.
  • IPVS의 성능:
    • IPVS는 Linux 커널 모듈로 작동하여 훨씬 빠르고 효율적으로 트래픽을 처리합니다.
    • 특히, 수백 개 이상의 서비스와 Endpoints를 가진 대규모 클러스터에서 iptables보다 훨씬 높은 성능을 제공합니다.

적합한 환경

  • 대규모 서비스와 Pod을 운영하는 클러스터.
  • 고성능 네트워킹이 필요한 환경 (예: 실시간 응용 프로그램).

2. 부하 분산 알고리즘 제공

  • iptables는 단순한 라운드 로빈 방식으로 트래픽을 분산합니다.
  • IPVS는 다양한 부하 분산 알고리즘(라운드 로빈, 최소 연결, 해싱 기반 등)을 제공하여 서비스 요구사항에 맞는 부하 분산 설정이 가능합니다.
    • 예: 최소 연결 기반 알고리즘은 상태 기반(stateful) 애플리케이션에 적합.

적합한 환경

  • 정교한 부하 분산이 필요한 경우.
  • 트래픽 패턴이 복잡하거나 특정 Pod에 대한 트래픽 균형 조정이 중요한 경우.

3. 빠른 업데이트와 효율성

  • iptables의 규칙 업데이트:
    • iptables는 Endpoints가 변경될 때 전체 체인을 재생성해야 합니다. 이 과정은 시간이 오래 걸릴 수 있습니다.
  • IPVS의 동적 업데이트:
    • IPVS는 Endpoints 변경 시 가상 서버 룰을 동적으로 업데이트하므로, 지연 시간이 훨씬 짧습니다.

적합한 환경

  • 빈번한 Pod 생성/삭제로 Endpoints 변경이 많은 클러스터.

4. 대규모 클러스터 지원

  • iptables 한계:
    • 수백 개 이상의 서비스와 수천 개의 Endpoints가 존재할 때 iptables는 네트워크 규칙 관리에서 병목이 생길 수 있습니다.
  • IPVS의 확장성:
    • IPVS는 더 많은 네트워크 규칙을 효율적으로 처리하며, 대규모 클러스터에서 안정적으로 동작합니다.

적합한 환경

  • 수천 개의 Pod와 수백 개의 서비스를 운영하는 환경.

5. 기존 서비스와의 통합

  • CNI 플러그인 역할:
    • CNI 플러그인은 Pod 간의 통신에 중점을 둡니다. 서비스 간 트래픽 관리와 부하 분산은 kube-proxy가 수행합니다.
  • IPVS와의 조합:
    • IPVS는 CNI와 독립적으로 동작하며, CNI 플러그인과 결합하여 더 효율적인 서비스 네트워킹을 제공합니다.

IPVS 모드가 굳이 필요하지 않은 경우

  1. 소규모 클러스터:
    • 작은 규모의 클러스터에서는 iptables도 충분히 성능을 발휘합니다.
  2. 트래픽이 적은 환경:
    • 서비스 트래픽이 많지 않고, Endpoints 변경이 드문 환경에서는 iptables로도 충분히 관리 가능합니다.
  3. 복잡성을 피하고 싶은 경우:
    • IPVS는 추가 설정 및 디버깅이 필요하며, iptables 모드보다 관리가 복잡할 수 있습니다.

결론

IPVS 모드를 사용할 필요성은 클러스터의 규모, 네트워크 트래픽 요구사항, 부하 분산 알고리즘 필요성에 따라 결정됩니다.
소규모 클러스터에서는 iptables로 충분하지만, 대규모 서비스, 고성능 네트워크, 정교한 부하 분산이 필요한 경우 IPVS 모드는 더 나은 선택입니다. CNI는 Pod 간 네트워크를 담당하고, kube-proxy(IPVS 포함)는 서비스 트래픽을 라우팅하는 역할로 상호 보완적인 관계를 가집니다.

반응형

'K8S' 카테고리의 다른 글

CNI, Kube-proxy, Service 의 특징 및 통신과정  (0) 2024.12.21
kube-proxy와 cni의 비교  (0) 2024.12.21
[kubenetes] Probe 에 대해 알아보자  (0) 2024.12.20
Kubernetes의 Node Scheduling  (0) 2024.12.19
Kubernetes의 플랫 네트워크  (0) 2024.12.16

댓글