CNI

Yu Sang Min·2025년 6월 26일

CKA

목록 보기
75/110

🔗 CNI (Container Networking Interface) 완벽 가이드


🚩 CNI가 등장한 이유

  • 컨테이너 네트워킹은 모두 비슷한 방식으로 동작한다.

    • 네임스페이스 생성
    • 가상 인터페이스(veth) 생성
    • 브릿지 연결
    • IP 할당 및 라우팅 설정
    • NAT 적용
  • Docker, Rocket, Mesos, Kubernetes 등 각 플랫폼이 제각기 네트워킹 로직을 따로 구현

👉 "같은 걸 왜 다 따로 만들어?"

표준화 필요 → CNI 탄생


🏗️ CNI란 무엇인가?

  • 컨테이너 네트워킹을 위한 표준 인터페이스
  • 컨테이너 런타임이 플러그인 방식으로 네트워크 설정을 외주화
  • 런타임과 네트워크 플러그인이 명확한 역할 분담

🔥 CNI 구조와 작동 방식

🎯 런타임의 역할 (예: Kubernetes, Rocket)

  • 컨테이너당 Network Namespace 생성

  • 어떤 네트워크에 붙일지 결정

  • CNI 플러그인을 호출

    • Add → 컨테이너 생성 시
    • Del → 컨테이너 삭제 시
  • 네트워크 설정 JSON 파일 로드

🛠️ 플러그인의 역할 (예: bridge, flannel, calico)

  • 가상 인터페이스(veth) 생성
  • 브릿지 연결 및 IP 할당
  • 라우팅 설정
  • 결과를 표준 JSON 포맷으로 반환

📜 CNI 명령어 형식

  • 플러그인은 다음 명령어를 지원해야 한다.
명령어역할
ADD컨테이너 네임스페이스에 네트워크 추가
DEL네트워크 제거
CHECK상태 확인 및 검증 (선택적)

⚙️ CNI 구성 파일 (JSON 예시)

{
  "cniVersion": "0.4.0",
  "name": "mynet",
  "type": "bridge",
  "bridge": "cni0",
  "ipam": {
    "type": "host-local",
    "subnet": "10.22.0.0/16"
  }
}

🌉 CNI 플러그인 종류

기본 제공

  • bridge — 브릿지 네트워크
  • host-local — 로컬 IPAM
  • dhcp — DHCP 기반 IPAM
  • macvlan, ipvlan, vlan — L2 네트워크 플러그인
  • loopback — 루프백 설정

서드파티

  • Calico — L3 기반, 고성능, 네트워크 정책 지원
  • Flannel — 단순한 오버레이 네트워크
  • Weave — 오버레이 + DNS
  • Cilium — eBPF 기반 고성능 네트워킹 및 보안
  • VMware NSX, Infoblox

🐳 Docker와 CNI의 관계

항목설명
DockerCNI 사용 ❌ → 자체 표준 CNM 사용
KubernetesCNI 사용 ⭕

→ Kubernetes는 Docker 컨테이너 생성 시 "none" 네트워크로 만들고, 이후 CNI 플러그인을 호출해서 네트워크 설정을 진행.


🔥 CNI 동작 전체 흐름

  1. 런타임이 컨테이너 생성

  2. 컨테이너용 Network Namespace 생성

  3. 런타임이 CNI 플러그인 호출 (Add)

  4. 플러그인은

    • veth 생성
    • 브릿지 연결
    • IP 할당
    • 라우팅 설정
  5. 런타임은 컨테이너 실행

  6. 컨테이너 종료 시 런타임은 CNI 플러그인 호출 (Del) → 네트워크 정리


🚀 요약

런타임 역할플러그인 역할
Network Namespace 생성인터페이스 생성 및 연결
어떤 네트워크에 붙일지 결정IP 할당, 라우팅, NAT 설정
Add/Del 명령으로 플러그인 호출네트워크 설정 및 결과 반환
JSON 파일로 네트워크 정의

런타임과 네트워크를 완벽히 분리하는 모듈화 구조

profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글