CNI(Container Network Interface) 는 컨테이너간의 네트워킹을 제어하는 표준 인터페이스 입니다. 쿠버네티스는 CNI 를 사용하여 파드 내 컨테이너간의 통신, 파드 간의 통신, 파드와 노드의 통신, 노드간의 통신을 지원합니다. CNI 는 파드를 생성할 때 IP 를 자동으로 할당하고 로드 밸런싱 및 라우팅을 지원 합니다.
CNI 에서 사용하는 네트워크 모델은 VXLAN, IP-in-IP, BGP 등이 있습니다.
VLAN(Virtual LAN)은 L2 스위치에 연결된 호스트를 그룹지어 가상의 LAN 환경을 구축하는 것을 의미합니다. 최대 4096개의 세그먼트를 만들 수 있습니다.
VxLAN (Virtual eXtensible LAN)은 L3 위에서 VLAN 과 같은 가상의 LAN 환경을 구축하는 것을 의미합니다.
최대 16,777,216개의 세그먼트를 만들수 있고 각 세그먼트는 UDP 캡슐화되어 터널링으로 통신합니다.
통신시 사용되는 포트는 4789/UDP 입니다.
IP-in-IP는 원본 패킷을 감싸는 외부 패킷을 만든 후 외부 패킷을 캡슐화 하여 터널링으로 통신하는 기술 입니다.
외부 패킷에는 출발지/도착지 및 프로토콜 정보만 있으므로 중간 네트워크 장비가 원본 패킷을 볼 수 없기 때문에 보안이 뛰어나다는 장점이 있습니다. VPN(Virtual Private Network) 에서 이 기술을 사용됩니다.
BGP(Border Gateway Protocol) 는 179/TCP 포트를 사용하여 AS (Autonomous System_인터넷 상에서 독립적으로 라우팅을 관리하는 네트워크 집합체) 간 연결을 통해 대규모 네트워크에서 경로를 관리하고 최적화하는 프로토콜 입니다.
터널링 방식보다 성능이 뛰어나며 복잡한 보안 정책을 구현할 수 있습니다.
쿠버네티스에서 자주 사용되는 CNI 플러그인으로 Flannel과 Calico가 있습니다.
Flannel은 VxLAN 및 IPIP 등의 터널링 방식을 사용하는 가벼운 네트워크 솔루션이며,
Calico는 BGP 기반의 직접 라우팅 방식을 지원하여 강력한 네트워크 보안을 제공합니다.
일반적으로 BGP 방식이 터널링 방식보다 성능이 뛰어나므로,
대규모 클러스터 운영 및 복잡한 네트워크 정책이 필요한 경우 Calico를 선택하는 것이 좋습니다.
반면, 소규모 클러스터에서 보안 정책이 크게 필요하지 않은 경우 Flannel이 적합한 선택이 될 수 있습니다.