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_address는 LoadBalancer용 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를 적극 고려해보세요! 🚀