개요
CNI(Container Network Interface)가 무엇인지 알아보겠습니다.
CNI 정의
Container 간의 networking을 구현을 어떻게 구현할지를 표준화한 것입니다.
CNI의 필요 이유
container들이 networking을 하기 위해서 하기 위해서 필요한 사항이 모두 개별적으로 개발이 된다면 container 들간의 network 통신은 거의 불가능할 것입니다. 그래서 이를 편하게 하기 위해서 공통사항을 표준으로 정리한 것이 CNI입니다.
아래 그림은 각종 오케스트레이션 도구에서 CNI를 어떻게 구현하는지 간단한 절차를 설명 한 것입니다.
CNI 동작 방식
CNI를 기반으로 하여 만들어진 Plugin은 container runtime에 의해 호출된 binary 파일의 실행에 기반을 두고 있습니다.
container runtime(예: Docker, containerd 등)은 특정 netowkr 작업을 수행하기 위해 필요한 CNI Plugin의 binary file을 실행하고 이 binary file은 network interface를 추가하거나 제거하거나 수정하는 등의 작업을 수행합니다.
Plugin을 실행하는 방식은 표준 입력(stdin)을 통해 JSON 형식의 네트워크 구성을 전달해 주면, 표준 출력(stdout)을 통해 결과를 반환합니다.
그리고 이러한 모든 동작 방식은 아래 문서에 모두 표준화로 정의가 되어있습니다.
CNI에서 정의한 표준 정리
CNI 표준은 아래의 핵심 요소들을 정의합니다
그리고 CNI 표준을 정의함으로써 container화 된 환경에서 효과적이고 유연한 network 관리를 가능하게 합니다.
Network 구성 형식
CNI는 관리자가 Network 구성을 정의할 수 있는 형식을 제공합니다. 이 형식은 일반적으로 JSON 형태로 제공되며, 필요한 네트워크 설정들을 정의하는 데 사용됩니다.
Plugin 실행 절차
CNI는 제공된 Network 구성에 따라 Plugin을 실행하는 절차를 정의합니다.
Plugin은 Container의 Network Interface를 추가, 삭제, 변경하는 등의 작업을 수행할 수 있습니다.
Network 구성 실행 정의
Network 구성에 따라 plugin을 어떻게 실행하지를 정의합니다.
Network 구성이 변경되었을 때 어떻게 Plugin을 실행해야 하는지도 정의합니다.
Plugin 위임 절차
CNI는 한 Plugin이 다른 Plugin에게 기능을 위임하는 절차를 정의합니다.
이를 통해 Plugin은 복잡한 작업을 분할하거나, 특정 전문 기능을 다른 Plugin에게 위임할 수 있습니다.
Plugin 결과 data type
CNI는 Plugin이 자신의 작업 결과를 runtime에 반환하는 데 사용할 수 있는 data type 정의합니다.
CNI Plugin
https://github.com/containernetworking/cni#3rd-party-plugins
정리
CNI는 container 간 network통신 구성을 어떻게 구현하면 되는지 정의한 SPEC입니다.
그리고 CNI를 기반으로 만들어진 많은 Plugin들이 존재합니다.
Next Post
'Cloud > k8s-CKA' 카테고리의 다른 글
[CKA] 28. Pod의 Networking 과 Weave CNI (0) | 2023.07.20 |
---|---|
[CKA] - 시험 틀린 문제 (0) | 2023.07.19 |
[CKA] 26. Domain과 DNS Sever기초 (0) | 2023.07.15 |
[CKA] 25. Docker Network 구조 (0) | 2023.07.10 |
[CKA] 24. k8s network를 위한 기초 (0) | 2023.06.29 |