Kubernetes에서 Kube-vip를 활용한 LoadBalancer 설정 가이드

2–3분

1. 서론

Kubernetes에서 클러스터 외부로 서비스를 노출하려면 LoadBalancer 타입의 서비스를 활용해야 합니다. 클라우드 환경에서는 AWS, GCP, Azure와 같은 네이티브 로드 밸런서를 사용할 수 있지만, 온프레미스 환경에서는 별도의 로드 밸런싱 솔루션이 필요합니다.

이 글에서는 Kube-vip를 활용하여 Kubernetes에서 안정적으로 LoadBalancer 서비스를 운영하는 방법을 소개합니다. Kube-vip는 가상 IP(VIP)를 사용하여 로드 밸런싱을 제공하며, 고가용성(HA)과 간편한 설정이 가능한 것이 장점입니다.


2. Kube-vip란 무엇인가?

✅ Kube-vip 개요

Kube-vip는 Kubernetes 컨트롤 플레인 및 서비스 네트워크를 위한 가상 IP(VIP) 솔루션입니다.

이를 통해 LoadBalancer IP를 클러스터 내부에서 직접 관리할 수 있으며, 네트워크 트래픽을 안정적으로 라우팅할 수 있습니다.

✅ Kube-vip의 주요 특징

🔹 가상 IP(VIP) 기반의 로드 밸런싱 제공

🔹 Leader Election을 활용한 고가용성(HA) 지원

🔹 별도의 외부 네트워크 장비 없이 내부적으로 동작

🔹 Kubernetes 서비스와 쉽게 통합 가능


3. Kube-vip 설정 및 적용 방법

1️⃣ Kube-vip 설치

Kube-vip를 설치하려면 클러스터에 먼저 kube-vip 컨테이너를 배포해야 합니다.

📌 Kube-vip 매니페스트 작성

다음은 kube-vip를 DaemonSet으로 실행하는 매니페스트 예제입니다.

apiVersion: v1
kind: Pod
metadata:
  name: kube-vip
  namespace: kube-system
spec:
  containers:
  - name: kube-vip
    image: cr.makina.rocks/external-hub/kube-vip/kube-vip:v0.7.2
    args:
    - manager
    env:
    - name: vip_arp
      value: "true"
    - name: vip_interface
      value: eno1
    - name: vip_cidr
      value: "32"
    - name: address
      value: "192.168.0.100"  # 고정 VIP 설정
    - name: svc_address
      value: "192.168.0.101"  # LoadBalancer 서비스용 VIP
    - name: cp_enable
      value: "true"
    - name: cp_namespace
      value: "kube-system"
    - name: svc_enable
      value: "true"
    - name: svc_leasename
      value: "plndr-svcs-lock"
    - name: vip_leaderelection
      value: "true"
    securityContext:
      capabilities:
        add:
        - NET_ADMIN
        - NET_RAW
    volumeMounts:
    - mountPath: /etc/kubernetes/admin.conf
      name: kubeconfig
  hostNetwork: true
  volumes:
  - hostPath:
      path: /etc/kubernetes/admin.conf
    name: kubeconfig


위 설정에서 address컨트롤 플레인 노드의 VIP, svc_addressLoadBalancer용 VIP를 나타냅니다.


2️⃣ LoadBalancer 서비스 설정

Kube-vip가 정상적으로 동작하려면 Kubernetes의 LoadBalancer 타입 서비스에서 loadBalancerIP를 지정해야 합니다.

📌 Istio IngressGateway에 Kube-vip 적용 예제

다음과 같이 istio-ingressgateway의 LoadBalancer 설정을 변경할 수 있습니다.

apiVersion: v1
kind: Service
metadata:
  name: istio-ingressgateway
  namespace: istio-system
spec:
  type: LoadBalancer
  loadBalancerIP: 192.168.0.101  # Kube-vip에서 관리하는 VIP 지정


이제 10.10.10.10 IP를 통해 Istio Gateway 서비스에 접근할 수 있습니다.


4. Kube-vip의 장점 및 활용 방안

✅ Kube-vip의 장점

✔️ 클러스터 내부에서 로드 밸런싱 수행 → 외부 네트워크 장비 필요 없음

✔️ VIP를 사용한 트래픽 안정화 → 특정 노드 장애 시에도 VIP가 유지됨

✔️ HA(고가용성) 지원 → Leader Election을 통해 가용성 보장

✔️ 설치 및 설정이 간편함 → YAML 파일만으로 손쉽게 적용 가능

✅ Kube-vip를 활용할 수 있는 환경

🔹 온프레미스 Kubernetes 클러스터 → 클라우드 로드 밸런서를 사용할 수 없는 환경

🔹 Bare-metal 서버에서 Kubernetes 운영 → 외부 네트워크 장비 없이 로드 밸런싱 필요할 때

🔹 컨트롤 플레인 노드의 HA 구성 → VIP를 활용한 고가용성 아키텍처 구축


5. Kube-vip 운영 시 Best Practices

Kube-vip를 운영하면서 안정성을 높이기 위한 몇 가지 Best Practice를 정리했습니다.

고정 IP를 사용할 때 네트워크 충돌 방지

  • loadBalancerIP로 할당한 VIP가 네트워크에서 충돌하지 않도록 사전에 확인해야 합니다.

Keepalived와 함께 사용하여 HA 강화

  • Kube-vip는 Leader Election을 기반으로 HA를 제공하지만, Keepalived와 함께 사용하면 장애 대응을 더욱 강화할 수 있습니다.

Prometheus 및 Grafana를 활용한 모니터링

  • Kube-vip의 상태를 지속적으로 모니터링하면 장애 발생 시 빠르게 대응할 수 있습니다.

클러스터 규모에 따라 적절한 VIP 정책 구성

  • 대규모 클러스터에서는 여러 개의 VIP를 운영하는 것이 효과적일 수 있습니다.

6. 결론

Kube-vip는 온프레미스 환경에서 Kubernetes의 LoadBalancer 서비스를 안정적으로 운영할 수 있는 솔루션입니다.

🔹 가상 IP(VIP) 기반의 로드 밸런싱을 제공하여, 특정 노드 장애 시에도 지속적인 서비스를 보장할 수 있습니다.

🔹 외부 네트워크 장비 없이 Kubernetes 내부에서 LoadBalancer를 직접 관리할 수 있어 운영이 간편합니다.

🔹 YAML 설정만으로 손쉽게 적용할 수 있으며, HA(고가용성) 및 안정적인 네트워크 운영이 가능합니다.

📌 Kubernetes 클러스터에서 안정적인 LoadBalancer 운영이 필요하다면 Kube-vip를 적극 고려해보세요! 🚀