CNI(Container Network Interface)
CNI는 컨테이너 런타임이 pod에 네트워크 인터페이스를 붙이고 ip를 부여하는 표준 규약이다.
k8s는 네트워크 자체를 직접 구현하지 않는다.
pod created -> cni plugin call -> pod network settings 이 구조로 동작한다.
즉, 아래 두 가지를 정의하게 된다.
- 컨테이너 네트워크 인터페이스 생성/삭제 표준
- ip 관려 IPAM 표준
k8s는 다음 네 가지의 네트워크 규칙을 만족해야 한다.
- 모든 pod는 서로 직접 ip 통신이 가능해야함
- 모든 node는 모든 pod와 통신할 수 있어야함
- NAT 없이 직접 통신 (Pod IP는 가상 IP가 아님)
- Pod가 외부로 나갈 때 정상 라우팅 되어야함.
이를 위해 파드마다 각각 고유의 ip가 필요하고 각 pod가 다른 노드에 있어도 통신이 가능해야한다.
이 작업들을 k8s에서 모두 구현하면 너무 복잡하므로 이걸 cni만 제공하고 네트워크 구현은 플러그인에게 맡긴것
CNI 전체 아키텍처 #
구성은 크게 세가지다
- container runtime (ex. containerd, CRI-O): pod 생성시 cni를 호출
- CNI Plugin(Calico, Flannelm Clium, Weave Net): 실제 네트워크 인터페이스 생성, 라우팅, 오버레이, ecmp등 수행
- IPAM Plugin: IP 주소 할당 정책 담당
ECMP(Equal-Cost Multi Path)는 네트워크에서 동일한 비용(=동일한metric)의 여러 경로가 존재할 때 트래픽을 여러 경로로 분산해서 보내는 라우팅 방식
kubelet이 runtime(container)에게 pod를 생성하라 요청하면 containerd가 CNI에게 ADD요청(json payload) 실행 후 cni가 veth 생성, 한쪽은 파드 네임스페이스 연결, 다른쪽은 host, overlay 엔드포인트 연결작업을 진행한다. 이후에 IPAM이 파드에 ip를 부여하고 라우팅 테이블, iptables, BPF 등 설정한다.
pod가 삭제되면 DEL 요청이 들어가고 삭제됨
CNI Plugin #
- Flannel
- 가장 단순하고 VXLAN 기반 오버레이
- 보안기능은 없고 작은 클러스터에 적합함
- Calico
- 가장 많이 씀 기업에서
- BGP 기반 라우팅에 NetworkPolicy도 강력하다
- 오버레이 없이도 동작 가능하다.
- Cilium
- eBPF 기반 고성능
- L3/L4/L7 정책까지 가능
- sidecar 없이 서비스 메시 지원
- 차세대 표준이다.
- Weave Net
- 작은 환경에서 쉬운 설치
- 성능은 Calico, Clium 보다 낮음
CNI Directory Structure #
k8s의 기본 위치는 다음과 같다.
# 설정 파일 위치(예: 10-calico.conflist)
/etc/cni/net.d/
# cni 플러그인 바이너리 위치(calico, flannel 등)
/opt/cni/bin/
# kubelet config
--cni-conf-dir=/etc/cni/net.d
--cni-bin-dir=/opt/cni/bin
Pod Node간 통신 과정 #
Calico 기준으로 설명하겠다.
- pod는 veth로 host 네임스페이스와 연결한다
- host에 해당 Pod IP에 대한 라우팅을 등록한다
- 다른 Node에 있는 Pod와 통신시 BGP로 서로 라우팅 정보 교환후 바로 L3 level 커넥션을 전달한다.
즉 overlay 없이 실제 L3 네트워크 수준에서 통신됨.
CNI가 잘못되면 pod가 running인데 ready가 되지 않거나 핑이 먹통이거나 CoreDNS CrashLoop, Node NotReady, cni0 vxlan,calico 인터페이스 장애, ip -d link로 veth가 dangling 상태가 될수 있다.
이런 원인들중 보편적인건
- IPAM 풀 부족
- CNI Config 충돌
- 호스티 라우팅 테이블 꼬임
- aws/vpc, cni 라우팅 충돌
- MTU Mismatch(Overlay(VXLAN) 사용 시 실제 MTU가 1500보다 작아져 IP fragmentation 발생 가능)
등이 있음.