Networking for linux containers
Home: https://www.cni.dev/
Doc: https://www.cni.dev/docs/
Source: https://github.com/containernetworking/cni
plugins: https://github.com/containernetworking/plugins
Ref: https://github.com/containernetworking/cni
CNI(Container Network Interface)는 Linux 컨테이너에서 네트워크 인터페이스를 구성하는데 사용되는 플러그인을 작성하기 위한 사양 및 라이브러리로 구성된다.
CNI는 컨테이너의 '네트워크 연결'과 컨테이너가 삭제될 때 '할당된 리소스를 제거'하는 데에만 관여한다.
이러한 이유로, CNI는 광범위한 지원을 제공하며 사양을 구현하기가 간단하다.
쉽게 말해, 어떤 컨테이너 런타임인지 상관없이 리눅스 컨테이너에서 사용할 네트워크의 인터페이스를 정의한 것.
Linux의 애플리케이션 컨테이너는 빠르게 발전하는 영역이며, 이 영역 내에서 네트워킹은 환경에 따라 크게 달라지기 때문에 정착되기가 어렵다.
CNI를 만듦으로써 많은 컨테이너 런타임과 오케스트레이터가 네트워크 계층을 플러그 가능하게 만드는 방식으로 문제를 해결한다.
중복을 피하기 위해 네트워크 플러그인과 컨테이너 실행 간의 공통 인터페이스를 정의하는 것이 현명하다고 판단.
Go용 라이브러리 및 플러그인 세트와 함께 CNI 사양을 제시한다.
쿠버네티스 1.26 버전부터 클러스터 네트워킹을 위해 컨테이너 네트워크 인터페이스(CNI) 플러그인을 지원한다.
쿠버네티스 네트워크 플러그인은 클러스터와 호환되어야 하며, 사용자의 요구 사항을 충족해야 한다.
쿠버네티스 생태계에 다양한 플러그인이 존재한다 (오픈소스 및 클로즈드 소스).
CNI 플러그인은 쿠버네티스 네트워크 모델을 구현해야 한다.
참고: A Guide to the Kubernetes Networking Model
Ref: https://www.cni.dev/docs/spec/
Linux, 컨테이너 네트워킹 인터페이스 또는 CNI의 애플리케이션 컨테이너를 위한 일반 플러그인 기반 네트워킹 솔루션을 제안한다.
이 제안의 목적을 위해 용어를 구체적으로 정의한다.
- A format for administrators to define network configuration.
- A protocol for container runtimes to make requests to network plugins.
- A procedure for executing plugins based on a supplied configuration.
- A procedure for plugins to delegate functionality to other plugins.
- Data types for plugins to return their results to the runtime.