Choose a default theme

You can change your theme from the menu

MetalLB

Earlier revision · 1View current content

MetalLB는 외부 클라우드 로드밸런서가 없는 Kubernetes에서 LoadBalancer 타입 Service를 사용할 수 있도록 돕는 구현이다. 사용할 주소를 풀에서 할당하고, 그 주소로 오는 트래픽이 클러스터에 도달하도록 네트워크에 광고한다. 공식 개념 설명은 주소 할당과 외부 광고를 두 가지 핵심 역할로 나눈다.

주소 할당과 광고

MetalLB가 새로운 공인 IP를 만들어 주는 것은 아니다. 관리자는 실제 네트워크에서 사용할 수 있으며 DHCP와 다른 장비에 충돌하지 않는 주소를 확보해야 한다. 풀에서 주소를 받은 Service가 있더라도 네트워크 쪽에서 해당 주소에 도달할 수 없으면 외부 연결은 실패한다.

L2 모드는 IPv4 ARP 또는 IPv6 NDP를 이용해 한 노드가 서비스 주소를 광고한다. BGP 모드는 지원하는 라우터와 경로를 교환하는 방식이다. L2는 일반적인 이더넷에서 쓰기 쉽지만, 한 서비스 주소의 진입 트래픽이 하나의 노드로 모이는 특성이 있다. L2 동작 설명은 이를 장애 전환과 대역폭 관점에서 설명한다.

장점과 한계

자체 장비에서도 Kubernetes의 Service API를 유지하며 외부 진입 주소를 운영할 수 있다. 클라우드 전용 API에 묶이지 않는 점과 L2 모드의 비교적 단순한 도입이 장점이다. 반면 실제 주소 관리와 스위치·라우터의 동작 조건은 운영자가 책임져야 한다.

L2에서 노드를 여러 개 둔다고 한 주소의 유입 대역폭이 자동으로 모두 합쳐지지는 않는다. 장애 전환 시 이웃 장비의 주소 정보 갱신에 영향을 받을 수 있다. MetalLB 자체가 HTTP 경로나 TLS 인증서를 관리하는 리버스 프록시도 아니므로, 필요한 경우 Gateway나 Ingress 구현과 함께 사용한다.

도서관 실습 주소 풀 예시

다음 YAML은 격리된 연습망에서 주소 풀과 L2 광고가 어떻게 연결되는지를 보여 준다. 192.0.2.240은 문서용 주소이며 실제 장비에 그대로 적용할 주소가 아니다. 실제 적용에는 설치된 MetalLB와 검증된 미사용 주소가 필요하다.

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: library-lab-addresses
namespace: metallb-system
spec:
addresses:
- 192.0.2.240/32
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: library-lab-l2
namespace: metallb-system
spec:
ipAddressPools:
- library-lab-addresses

풀은 주소의 출처이고 L2Advertisement는 그 풀을 L2로 알리려는 설정이다. 이 둘만으로 웹 애플리케이션이 생성되지는 않는다. 별도의 LoadBalancer Service와 정상적인 엔드포인트가 있어야 하며, Service의 외부 주소 할당과 실제 접속 성공을 각각 확인한다.

자주 생기는 오해

이미 다른 장비가 쓰는 IP를 풀에 넣으면 간헐적인 접속 장애가 생길 수 있다. EXTERNAL-IP가 표시되었다는 사실만으로 방화벽·경로·백엔드가 정상이라고 판단하지 않는다. 먼저 주소 충돌과 광고, 노드 도달성, Service 선택자와 Pod 준비 상태를 차례로 구분해 본다.

참고 자료