본문 바로가기

엔지니어/Kubernetes

Calico CNI

728x90
반응형

CNI 란 무엇인가?
CNI 공식 GitHub(https://github.com/containernetworking/cni )에 따르면, CNCF 프로젝트 중 하나인 CNI(Container Network Interface)는 컨테이너 간의 네트워킹을 제어할 수 있는 플러그인을 만들기 위한 표준이다. 컨테이너의 발전이 가속화 됨에 따라 다양한 형태로 컨테이너 런타임과 오케스트레이터 사이의 네트워크 계층을 구현하는 방식이 다양하게 분리되어 각자만의 방식으로 발전하게 되는 것을 피하기 위해 공통된 인터페이스를 제공하기 위해 만들어 졌다고 한다. 네트워크 인터페이스의 사실상 표준으로 사용되는 듯 하다.

즉 “리눅스 컨테이너를 위한 네트워킹“ 이다.

쿠버네티스는 기본적으로 매우 제한적인 네트워크 기능만을 제공하는 kubenet 이라는 자체 CNI 플러그인을 기본제공한다. 그 이외에도 Calico, Weave, Cilium 등과 같은 다양한 서드파티 CNI 플러그인들이 존재한다.

 

서드파티 CNI 를 사용하는 이유
서드파티 CNI들이 제공하는 다양한 기능들(Network Policy, Public 클라우드와의 통합, 대규모 트래픽에 대한 안정성 등)이 이유일 수도 있지만, 무엇보다 기본제공되는 kubenet의 기능이 너무 부족하기 때문이다. kubenet은 그 자체로는 컨테이너간의 노드간 교차 네트워킹조자 지원하지 않는다.

 

CNI 플러그인의 네트워크 모델
CNI 플러그인들은 매우 다양한 지표를 통해 비교하고 분류할 수 있지만, 본질적 기능인 컨테이너 및 노드간의 통신을 중개할 때 사용하는 네트워크 모델을 어떤 것을 사용하는지에 따라 가장 크게 분류해 볼 수 있다. CNI 플러그인들은 크게 두 가지 형식의 네트워크 모델을 사용하는데

VXLAN(Virtual Extensible LAN)나 IP-in-IP 프로토콜을 사용하는 오버레이 네트워크 모델
BGP(Border Gateway Protocal)을 사용하는 비-오버레이 네트워크 모델
먼저 오버레이 네트워크에 대해서 살펴보자면, 기본 개념은 실제로는 복잡할 수 있는 엔드포인트 간의 네트워크 구조를 추상화하여 네트워크 통신 경로를 단순화 하는 것 이다.

 

 

오버레이 네트워크는 3계층을 넘어서 구축된 네트워크 간에 있는 엔드포인트의 노드간의 통신이 일어날때 패킷을 한겹 캡슐화 하여 통신시켜서, 2계층에서(같은 LAN에서) 통신이 일어나는 것처럼 통신할 수 있도록 하는 기술이다.

 

 

Overlay Network는 기본적으로 ①패킷을 encapsulation 해서 통신 노드간에 가상 Tunnel을 생성하고, 각 노드에 위치한 가상의 터널의 Endpoint(Virtual Tunnel EndPoint : aka… VTEP)를 통해 ②캡슐화 된 패킷을 전달하는 방식을 활용하여 복잡한 네트워크 환경에서의 통신을 추상화 한다.

 


BGP 기반의 오버레이는 통신이 발생하는 노드간에 bgp 프로토콜을 사용하는 소프트웨어 라우터의 구현을 통해서 최적의 경로 정보를 현재 엔드포인트들의 상태를 따라서 동적으로 감지하여 적용할 수 있다는 전제를 통해 구현되는 네트워크 모델이다.

 

 


BGP 프로토콜을 사용하여 CNI를 구성하면, HA를 위해 클러스터 구성 노드들간의 서브넷이 다르게 구성되어 있는 경우 상위의 물리 라우터에도 별도의 설정을 해주어야 하고, 통신이 가능한 대역에서 여러 클러스터를 활용하거나 별도의 외부 서비스들을 운영하는 경우 네트워크 대역이 겹치지 않도록 관리를 해주어야 하고, 그렇기 때문에 퍼블릭 클라우드 등에서의 구성이 자유롭지 않은 등의 단점이 있다.(상단 라우터의 설정을 임의로 수정하는 것이 어렵기 때문)

하지만 별도의 패킷 가상화 없이 기존에 네트워크에서 사용하던 직관적인 라우팅 방식을 이용함으로써 클러스터 외부에서도 Ingress나 Service의 도움 없이 POD에 접근 할 수 있게 되고, 통일화 된 보안 설정 관리 및 디버깅/로깅의 용이성과 더불어 오버레이 네트워크에 비해 성능이 좋다는 구분되는 장점도 분명하게 존재한다.

 

CNI 플러그인들 비교
대표적으로 많이 사용하는 몇 가지 플러그들의 기능 지원 표를 통해 비교해 본다.

 





 

 

 

 Calico CNI플러그인이 가장 보편적이고 다양한 기능을 제공하면서 성능적으로도 매우 준수하고, 다른 CNI플러그인과의 결합을 통한 확장성 또한 잘 구현이 되어 있다고 말할 수 있다.

반응형

'엔지니어 > Kubernetes' 카테고리의 다른 글

CI / CD 구성  (0) 2023.11.06
Harbor  (0) 2023.11.06
Helm  (0) 2023.11.06
Istio  (0) 2023.11.06
Kubernetes 란 무엇인가?  (0) 2023.11.06