Kubernetes에서 MetalLB 동작 모드 심층 비교: L2 vs BGP (FRR 예제 포함)

1. 서론

퍼블릭 클라우드 환경(EKS, GKE, AKS)에서는 LoadBalancer 타입 Service가 자동으로 클라우드 로드밸런서와 연결된다. 하지만 온프레미스 Kubernetes에서는 그런 기능이 기본적으로 없다.

이때 사용되는 대표 솔루션이 MetalLB다. MetalLB는 Kubernetes 클러스터에 **서비스 VIP(가상 IP)**를 할당하고, 외부 네트워크에서 접근할 수 있게 광고하는 역할을 한다.

MetalLB는 두 가지 주요 모드를 제공한다:

  • L2 모드 (Layer 2)
  • BGP 모드 (Border Gateway Protocol)

두 모드는 구조적 차이, 확장성, 운영 난이도에서 차이가 크다. 아래에서는 두 모드를 심층적으로 비교하고, 실제 설정 YAML과 라우터 연동 예시를 정리한다.


2. L2 모드 (Layer 2 Mode)

동작 원리

  • MetalLB가 VIP를 할당받은 노드에서 직접 ARP/NDP 응답을 내보낸다.
  • 같은 서브넷에 속한 장비들은 VIP가 특정 노드에 붙어 있다고 인식한다.
  • VIP로 들어온 트래픽은 해당 노드가 받고, kube-proxy(IPVS/iptables) 등을 통해 Pod로 전달된다.

장점

  • 설정이 단순하다 (라우터 설정 불필요).
  • 클러스터 안에서 바로 사용 가능.
  • PoC, 개발 환경, 소규모 클러스터에 적합.

단점

  • ARP/NDP 브로드캐스트에 의존 → 확장성 낮음.
  • 장애 전환 시 ARP 캐시가 늦게 갱신되면 연결 지연 발생.
  • 멀티 서브넷, 멀티 랙 환경에서는 동작 불가능.

3. BGP 모드 (Border Gateway Protocol Mode)

동작 원리

  • MetalLB 노드가 외부 라우터와 BGP 세션을 맺는다.
  • VIP를 BGP 라우팅으로 광고한다.
  • 네트워크 전체 라우터가 VIP를 라우팅 정보로 인식하고 트래픽을 분산 처리한다.

장점

  • 장애 전환이 빠르다 (라우팅 업데이트 기반).
  • 브로드캐스트에 의존하지 않아 대규모/멀티 서브넷에서도 안정적.
  • ECMP(Equal-cost multi-path)를 활용해 트래픽 분산 가능.

단점

  • 네트워크 라우터 설정이 필요하다.
  • 네트워크팀 협업이 필수적이다.
  • 잘못 설정하면 라우팅 루프나 블랙홀이 발생할 수 있다.

4. 성능 및 안정성 비교

항목L2 모드BGP 모드
설정 난이도낮음높음
장애 전환 속도느릴 수 있음 (ARP 캐시)빠름 (BGP update)
확장성동일 서브넷 한정멀티 서브넷/멀티 데이터센터 가능
네트워크 부하Broadcast 기반Routing 기반, 효율적
운영 적합도Dev/PoC, 소규모대규모/프로덕션 환경

5. 실제 설정 가이드

(1) L2 모드 설정 예시

metallb-config-l2.yaml

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.10.240-192.168.10.250   # 할당할 LB IP 범위

---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2adv
  namespace: metallb-system
spec:
  ipAddressPools:
  - default-pool

192.168.10.240~250 범위에서 VIP가 할당된다.


(2) BGP 모드 설정 예시

metallb-config-bgp.yaml

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: bgp-pool
  namespace: metallb-system
spec:
  addresses:
  - 10.10.20.100-10.10.20.110

---
apiVersion: metallb.io/v1beta1
kind: BGPPeer
metadata:
  name: router-peer1
  namespace: metallb-system
spec:
  myASN: 64512                # 클러스터 ASN
  peerASN: 64513              # 라우터 ASN
  peerAddress: 10.10.20.1     # 라우터 주소
  holdTime: 30s

---
apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:
  name: bgp-adv
  namespace: metallb-system
spec:
  ipAddressPools:
  - bgp-pool

(3) Cisco IOS 라우터 예시

router bgp 64513
 bgp log-neighbor-changes
 neighbor 10.10.20.101 remote-as 64512
 neighbor 10.10.20.102 remote-as 64512
 !
 address-family ipv4
  neighbor 10.10.20.101 activate
  neighbor 10.10.20.102 activate
 exit-address-family

6. FRR(Free Range Routing) 소개

FRR이란?

  • Free Range Routing의 약자.
  • 리눅스/유닉스 시스템에서 동작하는 오픈소스 라우팅 스택.
  • 원래 Quagga 프로젝트에서 포크된 후 더 활발히 개발되고 있다.
  • 리눅스 서버를 소프트웨어 라우터로 만들어주는 도구다.

지원 프로토콜

  • BGP, OSPF, OSPFv3
  • RIP, RIPng
  • IS-IS
  • PIM-SM (멀티캐스트)
  • EVPN, MPLS 등 최신 프로토콜

활용 포인트

  • 온프레미스 테스트 환경에서 Cisco/Juniper 라우터가 없어도 BGP 실습 가능.
  • MetalLB와 연결해 BGP 라우팅 테스트 가능.
  • Kubernetes 클러스터 내부/외부에서 BGP 피어 역할 수행 가능.

(1) FRR 설치

Ubuntu 기준:

apt-get update
apt-get install frr frr-pythontools -y

(2) FRR 설정 예시

/etc/frr/bgpd.conf

router bgp 64513
 bgp router-id 10.10.20.1
 neighbor 10.10.20.101 remote-as 64512
 neighbor 10.10.20.102 remote-as 64512

 address-family ipv4 unicast
  network 10.10.20.0/24
  neighbor 10.10.20.101 activate
  neighbor 10.10.20.102 activate
 exit-address-family
  • 64513: FRR 라우터 ASN
  • 10.10.20.101, 10.10.20.102: Kubernetes 노드 IP (MetalLB BGP 피어)
  • 10.10.20.0/24: 광고할 네트워크

(3) BGP 세션 확인

vtysh -c "show bgp summary"

정상적으로 세션이 올라오면 MetalLB와 FRR 간 BGP가 연결된 것.


7. 운영 고려사항

  • PoC/소규모: L2 모드로 시작하는 것이 가장 빠르다.
  • 프로덕션/대규모: BGP 모드 사용을 권장한다.
  • 네트워크팀 협업이 어려운 경우: L2 → 점진적으로 BGP 전환.
  • 랩 환경/테스트: FRR로 라우터를 대체해 BGP 연습 가능.

8. 결론

  • MetalLB L2 모드는 간단하고 빠르게 시작할 수 있는 해법이다.
  • MetalLB BGP 모드는 대규모/프로덕션 환경에서 사실상 필수적인 선택이다.
  • FRR은 실제 하드웨어 라우터 없이도 BGP를 연습하거나, 소규모 운영 환경에서 라우터 역할을 대신할 수 있다.

따라서,

  • “빠른 시작 → L2”
  • “안정적 운영 → BGP”
  • “실습/테스트 → FRR”

이 조합으로 접근하면 된다.

ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. 본문 및 이미지를 무단 복제·배포할 수 없습니다. 공유 시 반드시 원문 링크를 명시해 주세요.
ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. All rights reserved. Unauthorized copying or redistribution of the text and images is prohibited. When sharing, please include the original source link.