Post

CNI(Container Network Interface)와 CNI 플러그인

CNI

컨테이너 네트워킹 설정을 위한 네트워크 플러그인 인터페이스

도커의 경우 CNI를 따르지 않고 자체 모델인 CNM(Container Network Model)을 따른다. 쿠버네티스는 도커 컨테이너 생성시 네트워크 설정 옵션에서 아무런 네트워크 설정이 이루어지지 않도록 하고, CNI 플러그인을 통해 따로 설정하도록 구현되어있다.


CNI 플러그인

CNI의 구현체로 네트워크 설정은 컨테이너 생명주기와 밀접하게 관련되어 있으므로 kubelet의 플러그인 형태로 설정되어 동작한다.

  • 주요 기능
    • 컨테이너 네트워크 설정: 쿠버네티스 환경에서 파드는 해당 노드에서 새로운 네임스페이스 영역에 할당되며 노드 내부의 파드간 통신은 리눅스 브릿지를 통해 연결된다.
    • IPAM(IP Address Management): 중복 IP의 할당을 방지하기 위한 IP 대역 관리 정책을 설정한다.
      • 유형: 플러그인마다 별도의 관리 솔루션이 존재할 수 있다.
        • 호스트 로컬: 사전에 정의된 네트워크 대역을 통해 노드별로 IP 주소를 할당하는 방식
        • DHCP(Dynamic Host Composition Protocol): 중압집중형으로 IP를 관리하는 서버가 필요하며 해당 서버에 의해 동적으로 IP를 할당하는 방식
    • 외부 노드간 라우팅 정책 설정: 쿠버네티스 클러스터 내 다른 노드와 통신하기 위한 라우팅 정책을 설정한다.

kube-proxy와의 근본적인 차이점은, CNI 플러그인은 네트워크(인터넷) 계층에서의 네트워크 설정에 관여하며 파드 생성시 네트워크 네임스페이스 생성 및 IP 할당, 브릿지 인터페이스 생성 및 연결, 노드간 라우팅 테이블 정책 수립 및 오버레이 네트워크 형성에 관여한다는 점이다.

쿠버네티스는 NAT을 사용하지 않고 파드에 고유한 IP를 할당하여 통신하는 방식을 채택했다. 이는 네트워크 구성을 간단하게 만들며 NAT resolve와 같은 추가 연산이 불필요하여 성능 향상을 도모할 수 있다. 또한, 파드의 동적 스케일링이 용이해진다. { :. prompt-tip }

This post is licensed under CC BY 4.0 by the author.