100. CNI (Container Network Interface) - K8s 네트워크 플러그인 표준
⚠️ 이 문서는 노드(서버) 100대가 묶여있는 거대한 쿠버네티스 클러스터 안에서, 1번 노드에 떠 있는 파드(Pod A)와 100번 노드에 떠 있는 파드(Pod B)가 서로 물리적 벽(라우터)을 뚫고 한방에 있는 것처럼 대화하기 위해, **쿠버네티스 본체 코드 밖에서 벤더들이 마음대로 가상의 오버레이 네트워크(Overlay Network) 터널을 뚫어 IP를 할당하고 통신망을 구축할 수 있게 만든 '플러그인 규격 표준인 CNI(컨테이너 네트워크 인터페이스)'**를 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 쿠버네티스는 멍청하게도 파드에게 IP 주소를 쥐여주고 통신할 길을 뚫어주는 기능(Network)을 자기 뱃속에 가지고 있지 않다. 대신 "누구든 이 CNI 규격 버튼(ADD, DEL)만 지켜서 내 배꼽에 꽂히면, 내가 걔한테 네트워크 공사 하청을 줄게!"라고 선언한 API 뼈대다.
- 가치: 이 개방성 덕분에, 단순히 핑(Ping)만 통하는 아주 가벼운 망(Flannel)부터, L7 방화벽과 eBPF라는 외계인 기술을 때려 박아 초고속 보안 망을 구성하는 괴물(Cilium, Calico)까지 사용자가 자기 클러스터 입맛에 맞춰 네트워크 엔진을 골라 꽂을 수 있는 생태계가 폭발했다.
- 기술 체계: 노드가 부팅되고 파드가 생성될 때 K8s 뇌(kubelet)가 CNI 플러그인을 호출하여 파드의 가상 랜카드(veth)를 만들고 IP를 쏴주며, 바닥에서는 수만 개의 패킷이 캡슐(VXLAN, IPIP)로 싸여 물리 라우터를 속이고 노드 간 허공을 날아다니는 오버레이(Overlay) 통신이 발생한다.
Ⅰ. K8s의 무능함(?)과 네트워크의 3대 대원칙
쿠버네티스는 통신망을 깔아주지 않는다. 법(원칙)만 던져놓고 하청을 준다.
- 쿠버네티스 네트워크의 3대 요구조건:
- K8s는 네트워크 플러그인(CNI) 업체들에게 아주 깐깐한 3가지 조건을 지키라고 강제한다.
- ① 모든 파드는 고유한 IP를 가져야 한다 (NAT/포트 포워딩 없이).
- ② 모든 파드는 서로 다른 노드에 있어도 NAT 없이 서로 통신할 수 있어야 한다. (파드 1과 파드 2가 1만 킬로미터 떨어져 있어도 서로의 IP를 치면 바로 다이렉트 통신이 되어야 함.)
- ③ 노드의 에이전트(Kubelet)는 그 노드의 모든 파드와 통신할 수 있어야 한다.
- CNI (Container Network Interface)의 탄생:
- 이 말도 안 되는 3가지 조건을 맨땅의 리눅스에서 구현하려면 미친듯한 라우팅 룰과 가상 스위치(Bridge) 공사가 필요하다.
- 구글(K8s)은 이 귀찮은 코드를 K8s 본체에 넣기 싫었다. 그래서 어제 배운 스토리지 확장 표준(CSI)처럼, 네트워크도 **
CNI**라는 표준 잭(USB 구멍) 규격으로 뜯어내어 CNCF(클라우드 재단) 표준으로 만들었다. - K8s의
kubelet은 파드가 뜰 때 단순히 CNI 잭에 대고 "파드 IP 하나 발급해(ADD)!"라고 전기 신호만 한 번 딱 보낼 뿐이다.
📢 섹션 요약 비유: K8s(건물주)는 세입자(파드)들에게 상가를 내주면서 "상가마다 무조건 독립된 직통 전화기(IP) 1대씩 깔아줘라"는 깐깐한 요구 조건만 툭 던집니다. 건물주는 자기가 직접 전화선 공사를 하지 않고, 'CNI 표준 규격'이라는 벽면 콘센트만 만들어 둡니다. SKT, KT(네트워크 벤더)가 이 콘센트에 자기네 회사 모뎀(CNI 플러그인)을 꽂고 건물의 보이지 않는 천장 뒤로 거미줄 같은 전화선(가상 네트워크)을 깔아주는 하청 공사 시스템입니다.
Ⅱ. 오버레이 네트워크 (Overlay Network): 물리적 한계의 돌파
서울 노드와 부산 노드 사이의 콘크리트 벽(라우터)을 투명하게 관통한다.
- Underlay (언더레이 / 물리적 네트워크)의 한계:
- 강남 센터의 1번 노드(물리 서버) IP는
192.168.1.10이고, 판교 센터의 2번 노드 IP는10.0.0.5다. 이 둘 사이에는 수십 대의 깐깐한 물리적 라우터와 방화벽이 가로막고 있다. - 1번 노드 위에 뜬 파드 A(가상 IP
10.244.1.2)가 2번 노드의 파드 B(가상 IP10.244.2.3)로 패킷을 쏘면? - 강남 라우터는
10.244.x.x라는 가상 파드 IP를 본 적이 없으므로 "이딴 주소는 내 지도에 없다"며 패킷을 쓰레기통에 폐기(Drop)해 버린다. 파드 간 통신이 붕괴한다.
- 강남 센터의 1번 노드(물리 서버) IP는
- 가상 터널 캡슐화 (VXLAN / IPIP):
- CNI 플러그인(Flannel, Calico 등)이 이 문제를 '오버레이(Overlay) 캡슐화' 마법으로 해결한다.
- 파드 A가 뱉은 원래 편지(
목적지: 파드 B 가상 IP)를 가로챈 뒤, 겉면에 두꺼운 가짜 봉투를 하나 더 씌운다(Encapsulation). - 가짜 봉투 겉면에는
[출발지: 강남 1번 노드 물리 IP / 목적지: 판교 2번 노드 물리 IP]라고 진짜 물리 세계의 주소를 큼지막하게 적는다. - 강남 라우터는 겉봉투에 적힌 합법적인 진짜 물리 IP만 보고 기분 좋게 통과시킨다. 판교 2번 노드에 편지가 도착하면, 2번 노드 바닥에 깔린 CNI가 겉봉투를 확 찢어버리고(Decapsulation) 안에 들어있던 진짜 목적지인 파드 B의 입에 내용물 패킷을 쏙 넣어준다. 완벽한 스텔스(VPN) 터널이 완성되었다.
📢 섹션 요약 비유: 파드 A가 파드 B에게 몰래 '비밀 편지(가상 IP)'를 썼습니다. 하지만 중간 우체국(라우터)은 비밀 편지 주소를 해석하지 못해 불태워버립니다. CNI는 007 요원입니다. 비밀 편지를 '일반 회사 우편 봉투(물리 노드 IP)'에 집어넣어 우체국을 감쪽같이 속이고 통과시킵니다(오버레이 캡슐화). 반대쪽 요원이 봉투를 받아 뜯은 뒤 진짜 수신자인 파드 B의 책상에 편지를 올려놓는, 물리망의 눈을 완벽히 속이는 첩보망 기술입니다.
Ⅲ. CNI 생태계 삼국지: Flannel, Calico, Cilium
가벼운 놈부터 외계인 기술을 쓴 괴물까지, 입맛대로 골라 꽂는다.
- Flannel (플란넬):
- "네트워크 그런 거 복잡해서 싫다! 그냥 파드끼리 통신만 뚫리게 해줘!"
- 구축이 가장 멍청할 정도로 쉽고 가볍다. 하지만 보안 규칙(네트워크 정책)을 세밀하게 제어하거나 막는 기능(NetworkPolicy)이 아예 없어서 엔터프라이즈 실무에서는 잘 안 쓴다.
- Calico (칼리코) - 영원한 교과서 국룰:
- 전 세계 쿠버네티스의 80%가 쓰는 압도적 스탠다드 1위다.
- 무거운 오버레이 캡슐(VXLAN) 없이도, 각 노드를 진짜 라우터(BGP 프로토콜)처럼 말하게 만들어서 캡슐을 안 씌우고도 빛의 속도로 날아가게 하는 다이렉트 라우팅을 찰떡같이 지원한다.
- 게다가 "A 파드는 B 파드랑 통신 불가"라는 칼날 같은 방화벽(Network Policy)을 완벽하게 지원해 보안팀이 눈물을 흘리며 사랑하는 플러그인이다.
- Cilium (실리움) - eBPF를 장착한 차세대 외계인:
- 최근 클라우드 네이티브 세상을 씹어 먹고 있는 최강의 괴물이다.
kube-proxy나iptables같은 낡은 리눅스 네트워크 기능을 다 뜯어내고, 리눅스 커널(심장) 깊숙한 곳에 C 코드 프로그램(eBPF)을 몰래 주입시켜 트래픽을 빛의 속도로 낚아챈다.- 속도도 Calico보다 빠르고, 보안 룰도 미친 듯이 정밀해서 향후 K8s CNI의 차세대 왕좌를 완전히 예약한 상태다.
📢 섹션 요약 비유: Flannel은 시골 마을에 깔아둔 뻥 뚫린 1차선 흙길입니다. 차는 굴러가지만 신호등(보안)이 없어 들이박기 좋습니다. Calico는 8차선 아스팔트 고속도로 톨게이트에 CCTV와 경찰(Network Policy)을 완벽히 배치하여 차량 통행과 방범을 동시에 잡은 국가 표준 인프라입니다. Cilium은 아예 차를 띄워 하늘로 날려버리는 플라잉카(eBPF) 전용 튜브 도로를 뚫어서, 기존 고속도로의 한계를 완전히 박살 내버린 외계인의 미래 교통망 기술입니다.