CNI 네트워크

Kubernetes Container Network Interface의 동작 원리와 주요 구현체 비교


Kubernetes Container Network Interface의 동작 원리와 주요 구현체 비교

목표: CNI 선택 기준을 이해하고, 네트워크 문제를 진단할 수 있는 수준


🌐 CNI 개요

CNI란?

Container Network Interface — 컨테이너 네트워크의 표준 인터페이스.

graph TB
    subgraph "Kubernetes Node"
        KUBELET["🔧 kubelet"]
        CNI["🌐 CNI Plugin"]
        
        subgraph "Pod Network"
            POD1["📦 Pod 1<br/>10.244.1.2"]
            POD2["📦 Pod 2<br/>10.244.1.3"]
        end
        
        BRIDGE["🌉 cni0 bridge"]
        VETH1["🔗 veth"]
        VETH2["🔗 veth"]
    end
    
    KUBELET -->|"CNI 호출"| CNI
    CNI -->|"네트워크 설정"| BRIDGE
    BRIDGE --- VETH1 --- POD1
    BRIDGE --- VETH2 --- POD2

CNI 동작 과정

# Pod 생성 시:
# 1. kubelet이 CNI 호출
# 2. CNI가 네트워크 네임스페이스 생성
# 3. veth pair 생성 (Pod ↔ Node)
# 4. IP 할당
# 5. 라우팅 설정

🔧 주요 CNI 비교

CNI모델특징사용처
FlannelOverlay (VXLAN)단순, 가벼움소규모, 개발
CalicoBGP + Overlay정책, 모니터링일반적, 프로덕션
CiliumeBPF고성능, 보안, 관측성대규모, 보안
WeaveMesh자동 발견, 암호화간편한 설정

Flannel

# 설치
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

# 확인
kubectl get pods -n kube-flannel

특징:

  • VXLAN 기반 Overlay
  • 간단한 설정
  • NetworkPolicy 미지원

Calico

# 설치
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml

# 확인
kubectl get pods -n calico-system

특징:

  • BGP 기반 (Overlay 없이도 가능)
  • NetworkPolicy 지원
  • Felix (에이전트), BIRD (BGP), Typha (확장)

Cilium

# Helm 설치
helm repo add cilium https://helm.cilium.io/
helm install cilium cilium/cilium --namespace kube-system

# 확인
kubectl get pods -n kube-system -l k8s-app=cilium

특징:

  • eBPF 기반 (커널 레벨)
  • Hubble (관측성)
  • L7 정책, mTLS

📡 네트워크 모델

Overlay vs Underlay

graph TB
    subgraph "Overlay (VXLAN)"
        O1["Pod Network<br/>10.244.0.0/16"]
        O2["VXLAN Tunnel"]
        O3["Node Network<br/>192.168.0.0/24"]
        
        O1 --> O2 --> O3
    end
    
    subgraph "Underlay (BGP)"
        U1["Pod Network<br/>10.244.0.0/16"]
        U2["물리 네트워크"]
        
        U1 --> U2
    end
모델장점단점
Overlay어떤 네트워크에서도 동작성능 오버헤드
Underlay최적의 성능네트워크 팀 협업 필요

🐛 문제 해결

Pod 네트워크 연결 테스트

# Pod 내부에서 테스트
kubectl run -it --rm debug --image=busybox --restart=Never -- sh

# 내부 통신
wget -O- http://my-service:80

# 외부 통신
ping 8.8.8.8
nslookup google.com

# 노드 간 통신
ping <다른 Pod IP>

CNI 로그 확인

# Flannel
kubectl logs -n kube-flannel -l app=flannel

# Calico
kubectl logs -n calico-system -l k8s-app=calico-node

# Cilium
kubectl logs -n kube-system -l k8s-app=cilium

📋 체크리스트

  • CNI 설치/확인
  • Pod IP 할당 확인
  • 노드 간 통신 테스트
  • Service 통신 테스트
  • CNI 로그 확인
  • NetworkPolicy 동작 확인

🔗 관련 노트

  • 02-04-NetworkPolicy — 네트워크 보안
  • 02-05-DNS-서비스-발견 — 내부 DNS
  • 01-06-Service-타입 — 서비스 노출

마지막 업데이트: 2026-06-01