Kubernetes Container Network Interface(CNI)
컨테이너의 Network, 즉 통신관련된 부분을 관리하기 위한 표준 인터페이스
CNCF(Cloud Native Computing Foundation)에서 프로젝트로 관리, 표준으로 관리
- CNI: 컨테이너 런타임과 네트워크 사이에서 표준 인터페이스를 제공, 구성, 관리해줌. 여러 컨테이너 런타임에서 동일한 구조로 가져갈 수 있도록 도와줌
- Plugin 구조: 표준 인터페이스를 통해 사용자의 환경과 요구에 맞춰서 원하는 플러그인을 선택하여 사용 가능
- 3rd-party plugin: Flannel, Calico, Clilum 등 다양한 종류의 네트워크 솔루션과 통합하여 사용 가능
기본으로 제공해주는 kubenet이라는 자체적인 플러그인이 있는데 제한된 기능을 제공
기능이 제한적이지만 simple한 부분에 있어서는 괜찮다는 글이 존재
(참고)kubenet vs azure-cni vs aks
CNI 3rd-party plugins
CNI를 써야하는 이유
- 기능/성능: 정교한 네트워크 정책, 보안, 로깅, 모니터링, QOS, 부하등에 있어서 다양한 기능을 통해 최적화 및 높은 퍼포먼스 제공 가능
- 환경에 맞게 사용: 각 플러그인마다 제공되는 기능들이 상이하여, 원하는 환경에 맞게 사용 가능
- 표준인터페이스 계승: CNI는 표준인터페이스로 다양한 플러그인을 지원하기 때문에, 특정 솔루션에 종속되지 않고 다양하게 사용 가능
실제로 다양한 CNI가 있고, Benchmark와 성능을 비교해주는 글도 존재
간단하게 몇가지를 비교를 해보면,
Flannel | - 가벼운 구조, 단일 호스트 및 멀티 호스트 구성 가능 - VXLAN, UDP, 호스트 네트워크 사용 가능 - 간단한 설정과 배포 |
쉬움 | ||||
Calico | - 대규모 컨테이너 환경에 용이 - BGP프로토콜(Border G/W Protocol) 사용하여 라우팅, 통신 관리 - 보안 그룹, ACL등의 기능 제공 - 다중 클라우드 및 하이브리드 환경에 좋음 |
보통 | ||||
Cilium | - 컨테이너 네트워크와 서비스 디스커버리 제공 - eBPF 필터를 통해 네트워크 패킷 필터링 처리, 성능, 보안에 모두 좋음 - L7네트워크 정책도 지원 - HTTP, gRPC등 다양한 프로토콜에 대해 지원 |
어려움 |
주관적으로 난이도 별로 뽑아서 정리를 해보며 찾아봤는데, 실제로 플러그인 별 지원기능에 차이가 존재
간단하게 쓰려면 Flannel을 쓰고, 반대로 Cilium을 사용하면 eBPF필터를 통해 커널레벨에서까지 분석/관리가 가능
네트워크 정책도 달라서 Flannel같은 경우에는 제공하는 것이 없고(보안에 취약), Calico나 Cilium은 Ingress, Egress 둘다 제공
즉, 상황에 맞게 적절한 CNI plugin을 찾아서 사용하면 될 것으로 보임
네트워크 자체에 탄탄한 기초지식을 보유하는 것이 중요해보여서.. 더 열심히 공부를 📚
'개발 > 개발공부' 카테고리의 다른 글
Ansible vs Terraform / 앤서블, 테라폼, 차이 (0) | 2023.05.30 |
---|---|
Kubernetes Storage / emptydir, persistent volume (1) | 2023.05.24 |
Kubernetes cordon, drain / pod schedule, 제거, node (1) | 2023.04.01 |
Go-git / golang, git client, 깃, github (0) | 2023.03.19 |
FQDN / Fully Qualified Domain Name, 도메인, Kubernetes cluster domain (0) | 2023.03.12 |
댓글