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 라우터 ASN10.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.
ⓒ 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.
답글 남기기
댓글을 달기 위해서는 로그인해야합니다.