823. Flannel - 오버레이 단순 구현체 CNI 플러그인 (VXLAN 터널링)
핵심 인사이트: 1번 서버에 있는 컨테이너 IP가
10.0.1.5고, 2번 서버에 있는 컨테이너 IP가10.0.2.5다. 이 둘이 통신하려면 중간에 있는 진짜 스위치 장비(언더레이)에게 10.x 대역이 어딨는지 라우팅을 다 가르쳐줘야 한다. 네트워크 관리자는 귀찮아서 쓰러진다. "아우 귀찮아!! 중간 라우터 쇳덩어리들 설정 건드리지 마! 그냥 1번 서버랑 2번 서버 사이에 커다란 소프트웨어 가상 터널(VXLAN) 하나 뚫고, 그 안으로 컨테이너 패킷 쑥 밀어 넣어버려!" 이것이 가장 무식하지만 가장 쉽고 위대한 꼼수, Flannel의 오버레이 마법이다.
Ⅰ. Flannel의 개념
- 개념: 쿠버네티스 생태계에서 가장 널리 알려지고 역사 깊은 초창기 CNI(Container Network Interface) 플러그인 중 하나입니다. 코어OS(CoreOS)에서 개발했습니다.
- 철학: "라우팅, BGP 그딴 거 몰라도 됨! 그냥 물리 네트워크 구조가 어떻든 간에 신경 끄고, 모든 쿠버네티스 노드(서버)들을 거대한 가상 네트워크(Overlay) 하나로 묶어줄게!"
Ⅱ. Flannel의 작동 원리 (VXLAN 오버레이 터널링) 🌟
Flannel은 백엔드 방식으로 여러 가지를 지원하지만, 99% 실무에서는 VXLAN (817번 문서 참조) 방식을 씁니다.
- IP 대역 쪼개주기: 쿠버네티스 클러스터 전체에
10.244.0.0/16이라는 거대한 가상 IP 덩어리를 줍니다. Flannel은 1번 서버(노드)에는10.244.1.0/24를, 2번 서버에는10.244.2.0/24를 사이좋게 떼어서 나눠줍니다. - 포장지 씌우기 (Encapsulation):
- 1번 서버의 A 컨테이너가 2번 서버의 B 컨테이너로 데이터를 쏩니다.
- 데이터가 서버 밖으로 나가기 직전, 1번 서버 바닥에 깔린 **flanneld (데몬 에이전트)**가 이 패킷을 낚아챕니다.
- 그리고 이 패킷을 커다란 '일반 UDP 택배 박스(VXLAN 껍데기)' 안에 쏙 넣고, 겉면 주소에 **"2번 서버의 진짜 물리적 IP 주소"**를 적어서 던집니다.
- 물리망의 속임수 통과:
- 데이터센터의 진짜 스위치(언더레이) 장비들은 "어? 그냥 1번 서버가 2번 서버로 평범한 UDP 패킷 보내는 거네?" 하고 묻지도 따지지도 않고 배달해 줍니다. 중간 라우터들은 박스 안에 컨테이너 IP가 들어있는지 꿈에도 모릅니다.
- 목적지 해체 (Decapsulation):
- 2번 서버의
flanneld가 박스를 받아 칼로 북북 찢습니다(디캡슐레이션). 그 안에서 원래 A가 보냈던 순수한 컨테이너 패킷을 꺼내 B 컨테이너에게 살포시 건네줍니다.
- 2번 서버의
Ⅲ. Flannel의 명확한 장점과 한계 🌟
1. 장점: 미친 듯이 쉬운 설치와 호환성
- 네트워크 엔지니어가 물리 스위치 장비를 단 1도 만질 필요가 없습니다. (언더레이 네트워크 구조 완전 무시)
- AWS, 사내 전산실, 노트북 등 환경을 가리지 않고
kubectl apply한 줄이면 완벽하게 포드 간 통신이 뚫리는 기적의 호환성을 보여줍니다. 테스트 및 소규모 클러스터에 절대 권력자입니다.
2. 한계: 속도 저하와 보안의 부재
- 캡슐화 오버헤드 폭발: 패킷을 계속 박스로 싸고(Encap), 뜯고(Decap) 하는 작업을 리눅스 커널이 CPU를 갈아 넣어 해야 하므로 패킷 하나 보낼 때마다 미세한 지연(Latency)이 생기고 전송 속도가 떨어집니다. (다음 824번 Calico가 이 문제를 박살 냅니다.)
- Network Policy 지원 불가 🌟: 쿠버네티스의 생명은 "웹 포드만 DB 포드에 접속할 수 있어!"라는 깐깐한 미니 방화벽(Network Policy)을 거는 것인데, Flannel은 길만 뚫을 줄 알지 이 보안 통제 기능이 아예 없어서 실무(운영망)에서 쓸 수가 없습니다.
📢 섹션 요약 비유: Flannel은 국가(물리 라우터)의 감시를 피해 물건을 주고받는 완벽한 '우체국 이중 포장 꼼수'입니다. 쿠버네티스 마을(컨테이너) 주민들은 국가에 등록되지 않은 불법 거주자들입니다. 1번 동네 주민 A가 2번 동네 주민 B에게 편지를 직접 보내면 우체국(물리 라우터)에서 주소를 몰라 편지를 찢어버립니다. Flannel 요원은 A의 편지를 뺏어서, 겉면에 '합법적인 1번 동네 이장 ➜ 2번 동네 이장(진짜 서버 IP)'이라고 적힌 대형 합법 봉투(VXLAN)에 넣어 이중 포장을 합니다. 우체국은 겉봉투만 보고 무사통과시켜 줍니다. 2번 동네에 도착하면 요원이 겉봉투를 뜯고 진짜 편지를 B에게 몰래 전해줍니다. 도로 공사(라우팅 설정)가 전혀 필요 없는 기적의 밀수망이지만, 매번 편지를 이중 포장하고 뜯느라 우체국 직원이 땀을 뻘뻘 흘려(CPU 과부하) 속도가 좀 느린 것이 흠입니다.