MetalLB
개요
bareMetal LoadBalancer.[1]
쿠버네티스의 서비스 로드밸런서는 보통 클라우드 공급자가 제공해주는 외부의 로드밸런서를 활용해야만 한다.
그러다보니 온프레미스 환경에서도 활용할 수 있는 로드밸런서의 필요성이 대두됐고, 이에 메탈lb가 개발됐다.
이게 없었다면 온프레미스에서는 그저 노드포트를 노출시켜서 서비스하거나, 앞단에 추가 장비를 두어 포트포워딩을 해야만 원하는 포트로 트래픽을 노출할 수 있었을 것이다.
기능
- 주소 할당(Address Allocation)
- 가상의 ip 대역을 로드밸런서에 부여하는 작업.
- 외부 전파(External Announcement)
- 부여하고 난 후 클러스터에 해당 ip를 이용해 트래픽을 전송할 수 있는 방법을 마련해야 한다.
- 이 ip를 쓸 수 있는 상태라고 전파하는 과정이라고도 할 수 있다.
- 이때 표준 프로토콜인 arp, ndp(ipv6의 arp)나 bgp를 사용한다.
원래의 로드 밸런서는 클러스터 외부에 있으므로 외부 ip를 가지고 있다.
그리고 이 ip를 클러스터에 알려주기에, 이러한 동작을 메탈lb도 수행한다.
그 후에는 실제로 이 ip로 트래픽이 흘러갈 수 있도록, 이 ip로 가려면 어떻게 해야 하는지 알리는 작업을 해야 하는데 이것이 외부 전파이다.
참고로 같은 클러스터 속에서는 어차피 모든 노드에 iptables가 잘 써져 있어서 외부 전파로 도움 받을 구석이 없다.
가령 외부 ip가 10.100.12.12
이런 식으로 됐다고 쳐보자.
클러스터 노드, 클러스터 내부 파드에서는 아래에서 볼 [[#동작 원리]]에 따라 트래픽을 보내는 게 아니라 그냥 iptables에 따라 트래픽이 날아가게 된다.
그러니 실제 실험을 해보고 싶다면 클러스터와 관련없는 호스트에서 네트워크 인터페이스를 연결하든 브릿지를 같이 두든 해서 실험하라.
로드밸런서의 본질을 생각해보면 사실 당연한 것이기는 하다.
T-LoxiLB vs MetalLB 참조
구조
메탈 lb는 그게 두 가지 컴포넌트를 가지고 있으며, 각각 위에 기능에 해당하는 역할을 수행한다.
디플로이먼트로 배포된 컨트롤러가 ip 주소를 할당하는 일을 해준다.
데몬셋으로 배포된 스피커는 외부 전파를 하는 역할을 담당한다.
동작 원리
ip 주소를 할당하는 작업은 꽤나 간단하게 일어난다.
그냥 서비스가 만들어지면 해당 서비스에 특정 ip를 주기만 하면 된다.
반면 외부 전파라는 것은 두 가지 방식을 가지고 있다.
Layer2 모드
가시다님 스터디에서 공유된 자료.
이건 layer 2의 arp를 활용하는 모드이다.
로드밸런서를 만들면 스피커 파드 중 한 노드에 위치한 녀석이 리더가 된다.
리더 스피커는 자신의 노드가 해당 트래픽을 감당할 수 있는 곳이라고 garp(arp의 일종으로, 자신을 드러내는 방식)를 같은 네트워크에 뿌린다.
그 덕분에 이 전파를 들은 호스트에서 서비스의 외부 ip로 트래픽을 날리면 리더 스피커가 있는 노드로 트래픽이 가게 된다.
그러면 이 노드의 iptables로 트래픽을 엔드포인트로 나누는 구조이다.
그래서 이건 사실 로드밸런서라기 보다는.. 리더 노드가 죽었을 때 다른 노드를 선출하는 그냥 장애 회복 매커니즘의 로직이 핵심이라고 문서에 나온다.
한계
트래픽이 몰리니 한 노드에 병목이 심할 가능성이 높다.
또한 실패로부터 잠재적으로 느리게 회복될 수도 있다.
리더의 실패에 대해서는 하시코프의 memberList라는 것을 사용한다고 하는데, 구체적으로 공부해보진 않아서 깊게 다루지 않는다.
bgp 모드
BGP를 사용하는 방식.
외부의 L3 스위치를 사용하여 진정한 의미의 로드밸런싱을 수행한다.
우리 as와 라우터 as, ip를 입력하면 bgp로 외부 라우터에 해당 ip에 대해 클러스터의 노드들을 광고한다.
그럼 외부 라우터가 ECMP(Equal Cost Multi Path, 같은 비용에 대해 다중 경로 채택)를 통해 트래픽을 분산해준다.
bgp가 뭔지 명확하게 아직 잘 모르겠어서 이것도 그냥 문서 해석한 내용만 담는다.
패킷 해시를 기반으로한 커넥션 별 밸런싱을 한다.
커넥션 별 이라 함은 한 세션의 패킷은 한 노드로 간다는 것.
해시를 통해 보장하는데, (프로토콜, 소스 ip, 목적 ip)를 키로 삼는다.
한계
주소 변경에 대해 안전하게 동작하지 않는다.
그 말은 주소 변경에 대해 모든 커넥션을 끊는 케이스가 생긴다는 것.
해시를 이용하는데에서 발생하는 문제이다.
또한 클러스터 외부 라우터를 활용해야 한다.
온프레미스 환경에서 활용할 수 있기는 하지만, 클러스터 외부의 네트워크 설정이 요구된다는 것.
설치
T-LoxiLB vs MetalLB#MetalLB 실습에서 보도록 한다.
관련 문서
이름 | noteType | created |
---|---|---|
MetalLB | knowledge | 2025-01-07 |
T-LoxiLB vs MetalLB | topic/temp | 2025-01-06 |