큰 변화는 작은 코드로부터: Cilium의 eBPF 기반 네트워크 혁신 이야기

안녕하세요 여러분, 기술의 세세한 부분까지 짚어보는 블로그에 오신 것을 환영합니다! 오늘은 작은 변화가 어떻게 큰 성과를 낼 수 있는지를 보여주는 멋진 사례를 소개해 드리려고 합니다. 네트워크 안정성 분야에서 단순한 코드 수정 하나로 대단한 성과를 이룬 Cilium의 사례입니다. "bpf:nat: Restore ORG NAT entry if it's not found"라는 PR(프로젝트 요청)이 그것인데요, 어떻게 이런 작은 변화가 시스템에 큰 안정성을 가져왔을까요?

NAT 이해하기: 작은 것은 강하다

먼저, NAT(Network Address Translation)의 기본 원리에 대해 간략히 짚고 가겠습니다. NAT는 여러 기기가 단 하나의 공용 IP 주소를 사용할 수 있도록 해줍니다. 이를 통해 내부 장치들의 사설 IP 주소가 외부 인터넷과 소통할 수 있는 환경을 만들어주죠. 아시다시피 최신 네트워크 인프라는 전 세계에서 동시에 수천, 수만 개의 기기들과 소통해야 하기에, NAT의 존재는 필수적입니다.

예를 들어, 사무실 네트워크에서 다양한 장치가 외부 인터넷으로 동시에 연결되는 상황을 생각해 보세요. 각 컴퓨터의 사설 IP가 NAT 장치에 의해 공용 IP로 변환되고, 외부에서 들어오는 데이터 또한 NAT를 통해 다시 사설 IP로 변환되어 적절한 장치로 전달됩니다. NAT 테이블이 그 매핑 정보를 저장하는 역할을 합니다.

Cilium의 혁신적인 접근 방식

이번 사례에서 Cilium은 eBPF 기술을 활용하여 전통적인 Linux 네트워크 스택을 우회하면서 NAT를 관리합니다. 일반적인 시스템에서는 conntrackiptables가 NAT 처리를 담당하지만, Cilium은 더 효율적인 eBPF 기반의 솔루션을 도입했습니다. 이로써 내부적으로 LRU(Latest Recently Used) 해시맵을 통해 SNAT 정보를 관리하는 방식을 취하고 있습니다.

문제점과 해결책: 작은 코드, 큰 변화

이 PR이 나오기 전까지는 NAT 처리 중 RevSNAT라는 기술이 걸림돌이었습니다. LRU 해시맵을 사용할 때 자원 제약으로 자주 사용되지 않는 데이터가 제거되는데, 이는 때때로 중요한 정보의 손실로 이어졌습니다. 바로 이 문제를, 단 하나의 if 문 블록 추가를 통해 해결했습니다. 한쪽 방향의 패킷을 감지하면 자동으로 반대 방향의 항목도 갱신되도록 한 것이죠.

이 간단한 변화가 가진 효과는 놀라웠습니다. 불필요한 LRU 데이터 제거를 줄였고, 멈춤 없는 네트워크 연결을 보장했습니다. 그 결과, 시스템 전반의 안정성이 크게 향상되었습니다.

교훈: 작은 변화도 위대할 수 있다

이 사례는 기술적 문제를 어떻게 간단하게 해결할 수 있는지를 잘 보여줍니다. 또, 기본적인 원리를 이해하고 그에 따라 작은 변화를 주는 것만으로도 놀라운 성과를 얻을 수 있다는 것을 일깨워 주기도 합니다.

우리의 일상 속에서도 이런 사례들이 넘쳐나지 않을까요? 작은 변화를 통해 우리의 시스템, 혹은 삶 자체를 조금씩 더 나은 방향으로 바꿔가는 겁니다. 다음에도 이런 흥미로운 이야기들로 다시 찾아뵙겠습니다. 감사합니다!

Leave a Comment