[Kubernetes] CNI, Flannel, 그리고 Service의 차이 완벽 정리
쿠버네티스를 공부하다 보면 네트워크 부분에서 머리가 아파옵니다. CNI, Flannel, Service… 다 통신을 하게 해주는 것 같은데, 도대체 무슨 차이가 있을까요?
이번 글에서는 쿠버네티스 네트워크의 핵심 개념들을 **“도로”와 “내비게이션”**에 비유하여 아주 쉽게 정리해 보겠습니다.
1. CNI (Container Network Interface)란?
한 줄 요약: 쿠버네티스 네트워크의 “표준 규격(인터페이스)”
쿠버네티스는 직접 네트워크 기능을 만들지 않았습니다. 대신 **“IP는 이렇게 주고, 연결은 이렇게 하라”**는 규칙(Interface)만 정해두었습니다. 이 규칙이 바로 CNI입니다.
- CNI의 역할: 파드(Pod)에게 IP 주소를 할당하고, 네트워크 인터페이스를 관리합니다.
- 플러그인: 이 규칙을 지켜서 만든 실제 제품들이 Flannel, Calico, AWS VPC CNI 등입니다.
? 비유: USB 포트
- CNI = USB 포트: 삼성 마우스를 꽂든, 로지텍 키보드를 꽂든 작동하게 해주는 표준.
- Flannel = 특정 마우스 제품: 그 포트에 꽂아서 실제로 동작하는 도구.
2. Flannel과 Cross-Node 통신
핵심 질문: 서로 다른 컴퓨터(Node)에 있는 파드끼리는 어떻게 통신할까?
쿠버네티스 클러스터는 여러 대의 컴퓨터(Node)로 이루어져 있습니다. 문제는 Node A에 있는 파드가 Node B에 있는 파드에게 데이터를 보낼 때 발생합니다.
1) CNI(Flannel)가 없을 때
각 노드는 **“고립된 섬”**입니다.
- 내 컴퓨터(Node A) 안에 있는 파드끼리는 통신이 됩니다.
- 하지만 **다른 컴퓨터(Node B)**로 데이터를 보내려고 하면 길을 잃습니다. 물리적인 라우터나 공유기는 파드의 가상 IP(예: 10.244.1.5)를 모르기 때문입니다.
2) CNI(Flannel)가 있을 때
Flannel은 노드들 사이에 **“가상의 터널(Overlay Network)”**을 뚫습니다.
- 포장(Encapsulation): 파드의 데이터가 노드 밖으로 나갈 때, Flannel이 겉포장을 한 번 더 쌉니다. (“이거 사실 Node B로 가는 거야”라고 표시)
- 전송: 물리 네트워크를 타고 Node B로 이동합니다.
- 개봉(Decapsulation): Node B의 Flannel이 포장을 뜯고, 안에 있는 파드에게 데이터를 전달합니다.
참고 (Flannel ID / VNI): 이때 Flannel은 패킷을 구분하기 위해 VNI(VXLAN Network Identifier)라는 식별자(보통 1번)를 붙여서 전송합니다.
3. Service와 CNI의 차이점
가장 헷갈리는 부분입니다. 둘 다 통신을 돕는데 무엇이 다를까요?
| 구분 | CNI (Flannel 등) | Service (ClusterIP 등) |
| 비유 | 도로 & 터널 | 내비게이션 & 목적지 |
| 역할 | 물리적으로 **“갈 수 있는 길”**을 만듦 | 논리적으로 “누구에게 갈지” 안내함 |
| 문제 해결 | “다른 컴퓨터까지 어떻게 가지?” | “파드 IP가 자꾸 바뀌는데 누굴 찾지?” |
| 작동 계층 | L2/L3 (네트워크 연결) | L4 (부하분산 및 포워딩) |
? 상황극으로 이해하기
- Service: “고객님, 목적지는 백엔드 파드입니다. 주소는 10.244.1.5로 찍고 가세요.” (안내)
- CNI: “네, 그 주소(10.244.1.5)로 가시려면 제가 뚫어놓은 이 터널을 통과해서 옆 동네 컴퓨터로 건너가시면 됩니다.” (이동)
4. (심화) AWS EKS는 다르다?
일반적인 쿠버네티스는 Flannel 같은 오버레이(Overlay) 방식을 쓰지만, AWS EKS는 기본적으로 AWS VPC CNI를 사용합니다.
- Flannel: 파드에게 가짜(가상) IP를 주고 포장해서 보냄. (조금 느림)
- AWS VPC CNI: 파드에게 **진짜 AWS IP(VPC IP)**를 줌.
- 포장할 필요 없이 EC2 통신하듯이 바로 쏠 수 있음. (빠르고 성능이 좋음)
5. 요약
- CNI는 쿠버네티스 네트워크의 도로 공사 담당이다. 파드 간의 물리적인 연결 길을 뚫어준다.
- Flannel은 CNI의 구현체 중 하나로, **패킷을 포장(캡슐화)**해서 다른 노드로 배달해 주는 역할을 한다.
- Service는 내비게이션이다. IP가 자주 바뀌는 파드들을 대신해 고정된 주소를 제공하고 올바른 파드로 안내한다.
- CNI가 없으면? 도로가 끊긴 것과 같다. 같은 노드 내에서만 통신되고, 다른 노드로 나가는 순간 통신이 두절된다.
1. CNI (Container Network Interface)
- 역할: “IP 할당 및 네트워크 연결 담당”
- 동작: 쿠버네티스(Kubelet)가 파드를 만들 때 CNI를 호출합니다. CNI는 사용 가능한 IPv4 주소를 할당하고, 파드 내부에 **네트워크 인터페이스(eth0)**를 생성하여 통신이 가능한 상태로 만들어줍니다.
2. Service (서비스)
- 역할: “부하 분산 및 트래픽 포워딩 담당”
- 동작: 파드는 생성과 삭제가 반복되면서 IP가 계속 바뀝니다. 서비스는 이 변동되는 파드 IP 목록(Endpoints)을 실시간으로 관리합니다. 외부나 내부에서 요청(Request)이 오면, 서비스는 관리 중인 IP 목록 중 하나로 트래픽을 안전하게 **연결(Forwarding)**해 줍니다.