devops
MetalLB Layer 2, BGP (Border Gateway Protocol) 모드 본문
MetalLB에 대한 설명은 생략하고, MetalLB의 로드밸런싱 방식인 Layer2와 BGP 모드에 대해서 정리하려고 한다. 현재 네트워크와 서버 환경에 적합한 모드를 선택하는 것은 안정성과 레이턴시 기준에서 중요하다.
두가지 모드의 장단점을 비교해서 어떤 조건에 어떤 모드가 더 적합할지 정리해보자.
MetalLB는 두개의 컴포넌트로 구성된다. Controller와 Speaker.
Controller는 Deployment로 배포되는 반면에, Speaker는 Daemonset으로 노드마다 하나씩 배포된다.
Controller는 서비스의 변화를 모니터링하는 역할을 하는데, 만약 서비스가 Load Balancer 모드로 구성된다면 Controller는 인터넷 프로토콜 주소를 IP 풀로부터 할당되도록 하며 IP의 라이프 사이클을 관리한다.
반면, Speaker는 실제 네트워크 작업을 수행하며, 클러스터 내에서 트래픽을 라우팅하거나 브로드 캐스트하는 역할을 담당한다. 즉, ARP 요청(IPv4) 또는 NDP 요청(IPv6)에 응답하여, 서비스에 할당된 IP 주소를 네트워크에 광고한다.
- Controller는 Kubernetes API를 감시하여 IP 주소를 할당하고, 이를 MetalLB 설정에 반영 (특정 Service에 192.168.1.240을 할당)
- Speaker는 Controller의 지시에 따라 실제 네트워크에서 ARP/NDP 광고를 하거나, BGP 라우팅 정보를 업데이트. ( ARP 요청에 "192.168.1.240은 이 노드의 MAC 주소"라고 응답)
만약 노드가 TCP/UDP 프로토콜을 통해서 트래픽을 받게되면, Kube Proxy는 트래픽을 처리하고 일치하는 서비스의 파드로 분산시키게 된다.
Layer 2
Layer 2 모드는 비유를 들자면, 한 동네에서 택배 배달원들이 서로 누가 어떤 물건을 배달할지 결정하는 방식과 비슷하다. 특정 주소에 물건을 배달한다면, 동네에서 가장 가까운 배달원이 요청하여 물건을 배달한다. 여기서 배달원은 MetalLB고 배달할 주소가 LoadBalancer IP다.
레이어2 모드에서는 모든 service IP의 트래픽이 하나의 노드로 가며, kube-proxy가 트래픽을 모든 서비스의 파드로 분산시킨다.
비유에 이어서, 작동 방식을 기술적인 관점에서 설명해보자.
- Speaker Pod: MetalLB에서 실행되는 파드로 IP 주소를 소유하고 네트워크로 광고한다. 여기서 각 노드의 Host Network에서 데몬셋으로 행된다.
- Lear Speaker Pod: 특정 서비스(SVC1, SVC2)의 IP를 소유하는 책임을 가진 Speaker Pod다. 위 그림에서 Node1과 Node3의 Speaker Pod가 각각 리더로 작동한다.
- iptables: 노드의 트래픽을 분산 처리하고 DNAT로 올바른 파드로 전달하는 역할을 한다.
- GARP(Gratuitous ARP): MetalLB의 Leader Speaker가 자신이 해당 서비스의 IP의 소유자임을 네트워크에 알리기 위해 사용하는 ARP 패킷이다.
로직의 순서는 다음과 같다.
1) 서비스 IP 요청 및 할당
- 클라이언트가 특정 LB 서비스의 IP 주소에 연결을 시도한다.
- MetalLB는 Configmap에서 정의된 IP 풀에서 SVC1과 SVC2에 각각 적절한 IP를 할당한다.
2) Leader Speaker Pod가 GARP로 광고
- SVC1의 IP는 Node1 Speaker Pod가, SVC2의 IP는 Node3 Speaker Pod가 리더 역할을 담당한다.
- 각 리더 Speaker Pod는 GARP 패킷을 브로드 캐스트로 네트워크에 뿌려 자신이 해당 IP의 소유자임을 광고한다.
3) 클라이언트 트래픽 전달
- 클라이언트는 SVC1의 IP로 요청을 보낸다.
- 네트워크 장비는 GARP 정보를 기반으로 해당 IP 트래픽을 Node1으로 전달한다.
4) Node의 iptables가 트래픽을 분산 처리
- Node1의 iptables는 SVC1 서비스에 연결된 파드들로 트래픽을 분산처리한다.
- 이 과정에서 DNAT를 사용하여 클라이언트의 요청 IP를 실제 파드로 변경한다.
5) 파드 응답
- 파드는 요청을 처리하고 응답을 클라이언트로 반환해준다.
주요 특징은 BGP에 비해 간단한 설정이 가능하다. 외부 라우터나 BGP 설정없이 GARP, iptables 만으로 동작이 된다. 온프레미스 환경에서 쉽게 구현할 수 있다. 특히, 리더 Speaker Pod가 다운될 경우 다른 노드의 Speaker Pod가 GARP를 통해 IP를 인계 받아 서비스를 중단 없이 처리해준다.
Layer2의 한계는 단일 노드 병목 현상과 잠재적으로 느린 failover다. 아무래도 하나의 노드가 모든 트래픽을 받기 때문에 병목 현상이 발생할 수 있으며, 리더 노드의 MAC 주소를 광고하는 gratuitous 패킷 전달의 실패로 failover가 느려지거나 실패할 수도 있다.
그러나 구성이 간단하고 구성에 따라서 효율적으로 활용할 수 있기 때문에 소규모 네트워크에 적합하게 사용될 수 있다.
BGP (Border Gateway Protocol)
특징 | Layer 2 | BGP |
트래픽 경로 | 클라이언트 → 노드 → 파드 | 클라이언트 → 라우터 → 노드 → 파드 |
레이턴시 | 낮은 | 비교적 높음 |
스케일 | 소규모 네트워크 적합 | 대규모 네트워크 적합 |
네트워크 부하 | ARP/NDP 브로드캐스트로 약간 증가 | 라우터의 경로 설정으로 부하 감소 |
'DevOps > Kubernetes' 카테고리의 다른 글
Kubernetes Calico CNI(Container Network Interface) (1) | 2024.10.31 |
---|---|
Lava Network Provider Architecture with Kubernetes (0) | 2024.10.06 |
쿠버네티스 컨테이너, 파드의 Volume (0) | 2023.07.16 |
Istio 서비스메시에 대해서 알아보자! (0) | 2023.07.07 |
Karpenter의 Provisioner (0) | 2023.07.02 |