Skip to content

Container Network Interface(CNI) ​

CNI란 무엇인가? ​

CNI(Container Network Interface)는 컨테이너의 네트워킹을 관리하는 표준입니다. 이 표준은 컨테이너 런타임이 네트워크 플러그인과 상호 작용하는 방식을 정의하며, 네트워크 설정과 관리를 일관되고 효율적으로 처리할 수 있도록 도와줍니다.

CNI의 역할 ​

  • 네트워크 네임스페이스 생성: 각 컨테이너에 대해 독립적인 네트워크 환경을 구성합니다.
  • IP 할당 및 라우팅 설정: 컨테이너에 IP 주소를 할당하고 필요한 라우팅 정보를 구성합니다.
  • 네트워크 플러그인과의 상호 작용: 다양한 네트워크 플러그인을 사용하여 컨테이너 네트워킹 요구 사항을 충족시킵니다.

CNI 플러그인 예시 ​

  • Bridge: 가상 브리지를 사용하여 컨테이너를 연결합니다.
  • VLAN: 가상 LAN을 통해 컨테이너 간의 네트워킹을 지원합니다.
  • Macvlan: 물리적 네트워크 인터페이스를 기반으로 가상 인터페이스를 생성합니다.

CNI 표준에 따른 플러그인 개발 ​

CNI는 플러그인이 지원해야 하는 명령어(add, del, check)와 인터페이스를 명확히 규정합니다. 이를 통해 다양한 컨테이너 런타임 환경에서 일관된 네트워킹 경험을 제공할 수 있습니다.

플러그인 구현 예시 ​

bash
# CNI 플러그인을 사용하여 네트워크를 구성하는 명령어
bridge add <container_id> <namespace_id>

이 명령은 bridge 플러그인을 사용하여 지정된 컨테이너에 네트워크 네임스페이스를 추가하고 네트워크 설정을 구성합니다.

CNI와 Docker의 차이점 ​

CNI는 Kubernetes와 같은 오케스트레이션 도구와 잘 통합되도록 설계되었지만, Docker는 기본적으로 CNM(Container Network Model)을 사용합니다. CNM도 CNI와 유사한 목표를 가지고 있지만, 구현 세부사항에서 차이가 있습니다.

결론 ​

CNI는 컨테이너 네트워킹의 표준화를 위한 중요한 도구입니다. 이를 통해 개발자와 시스템 관리자는 다양한 네트워킹 요구사항을 효과적으로 관리하고, 컨테이너화된 애플리케이션의 배포와 운영을 간소화할 수 있습니다. 다음 강의에서는 CNI를 사용하여 실제 Kubernetes 환경에서 네트워킹을 구성하는 방법을 살펴보겠습니다.

Third Party Network Plugin Providers ​

WeaveCalicoFlannelCilium

References Docs ​

https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/
https://kubernetes.io/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-networking-model