[Container] Container Network Interface (CNI) 간단 정리

leehs·2023년 1월 3일
0

Container Network Interface (CNI)

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

Container Network Interface (CNI)란?

Ref: https://github.com/containernetworking/cni

CNI(Container Network Interface)는 Linux 컨테이너에서 네트워크 인터페이스를 구성하는데 사용되는 플러그인을 작성하기 위한 사양 및 라이브러리로 구성된다.

CNI는 컨테이너의 '네트워크 연결'과 컨테이너가 삭제될 때 '할당된 리소스를 제거'하는 데에만 관여한다.
이러한 이유로, CNI는 광범위한 지원을 제공하며 사양을 구현하기가 간단하다.

쉽게 말해, 어떤 컨테이너 런타임인지 상관없이 리눅스 컨테이너에서 사용할 네트워크의 인터페이스를 정의한 것.

CNI를 만든 이유

Linux의 애플리케이션 컨테이너는 빠르게 발전하는 영역이며, 이 영역 내에서 네트워킹은 환경에 따라 크게 달라지기 때문에 정착되기가 어렵다.
CNI를 만듦으로써 많은 컨테이너 런타임과 오케스트레이터가 네트워크 계층을 플러그 가능하게 만드는 방식으로 문제를 해결한다.

중복을 피하기 위해 네트워크 플러그인과 컨테이너 실행 간의 공통 인터페이스를 정의하는 것이 현명하다고 판단.
Go용 라이브러리 및 플러그인 세트와 함께 CNI 사양을 제시한다.

사용 현황 (who is using CNI?)

Container Runtimes

3rd party plugins

쿠버네티스 네트워크 플러그인

쿠버네티스 1.26 버전부터 클러스터 네트워킹을 위해 컨테이너 네트워크 인터페이스(CNI) 플러그인을 지원한다.
쿠버네티스 네트워크 플러그인은 클러스터와 호환되어야 하며, 사용자의 요구 사항을 충족해야 한다.
쿠버네티스 생태계에 다양한 플러그인이 존재한다 (오픈소스 및 클로즈드 소스).
CNI 플러그인은 쿠버네티스 네트워크 모델을 구현해야 한다.

참고: A Guide to the Kubernetes Networking Model

Spec

Ref: https://www.cni.dev/docs/spec/

Overview

Linux, 컨테이너 네트워킹 인터페이스 또는 CNI의 애플리케이션 컨테이너를 위한 일반 플러그인 기반 네트워킹 솔루션을 제안한다.

이 제안의 목적을 위해 용어를 구체적으로 정의한다.

  • 컨테이너(container)는 네트워크 격리 도메인이지만 실제 격리 기술은 사양에 의해 정의되지 않음. 예를 들어 네트워크 네임스페이스 또는 가상 머신
  • 네트워크(network)는 서로 간에 통신할 수 있는 고유하게 주소 지정이 가능한 끝점 그룹. 이것은 개별 컨테이너(위에서 지정한 대로), 머신 또는 다른 네트워크 장치(예: 라우터)일 수 있음. 컨테이너는 개념적으로 하나 이상의 네트워크에 추가하거나 제거할 수 있음
  • 런타임(runtime)은 CNI 플러그인 실행을 담당하는 프로그램
  • 플러그인(plugin)은 지정된 네트워크 구성을 적용하는 프로그램

Defines

  • 관리자가 네트워크 구성을 정의하는 형식
  • 네트워크 플러그인에 대한 요청을 만들기 위한 컨테이너 런타임용 프로토콜
  • 제공된 구성을 기반으로 플러그인을 실행하는 절차
  • 플러그인이 기능을 다른 플러그인에 위임하는 절차
  • 결과를 런타임에 반환하기 위한 플러그인의 데이터 유형
  1. A format for administrators to define network configuration.
  2. A protocol for container runtimes to make requests to network plugins.
  3. A procedure for executing plugins based on a supplied configuration.
  4. A procedure for plugins to delegate functionality to other plugins.
  5. Data types for plugins to return their results to the runtime.

0개의 댓글