Calico
- L3 기반 오버레이 네트워크를 구축하게 도와주는 CNI 플러그인
- calico CNI 설치시 calico-node라는 daemonset 생성
Calico components
calico는 etcd, felix, bird, confd로 구성된다.
etcd는 k8s control plane의 etcd로 사용되며, felix, bird, confd는 하나의 pod 형태로 통합되어서 동작한다.
- etcd
- network 정보 및 calico 설정 정보 저장
- key-value 값이 변경될 때 마다 felix나 bird에게 변경 정보를 전달
- felix
- host의 네트워크를 설정하는 데몬
- etcd에 저장되어 있는 네트워크 정보를 바탕으로 host의 network interface, route table, iptables를 설정
- 네트워크 상태 정보를 수집하여 다른 호스트의 felix나 confd에게 설정 내용이 전달되도록 한다.
- bird
- BGP 프로토콜을 이용하여 호스트의 Pod 네트워크 대역을 다른 호스트의 bird로 전파
- BGP는 라우터간 라우팅 프로토콜로 패킷을 어느 라우터로 보낼 것인지 결정
- confd
- etcd의 변경 내용을 감지하고, bird conf 파일을 생성하고, bird를 깨우는 역할을 함
calico mode
1. direct 모드
- 호스트의 물리적인 인터페이스를 이용해서 포드의 네트워크 정보를 처리
- 물리적인 네트워크 인터페이스에서 바로 처리되기 때문에 성능적으로 가장 우수
- 구조가 단순
2. overlay 모드
- 포드의 네트워크 정보를 노드에서 한번 encapsulation을 거쳐서 목적지 노드로 전송
- ip 기반의 터널링 방식으로 노드간의 터널링 구간을 통해 포드의 패킷이 전달
- 각 노드에서 패킷에 대한 암호화와 복호화 과정을 거치기 때문에 네트워크 성능 저하가 발생할 수 있음
- 헤더의 크기에 따라 IPIP 모드(20 bytes)(default 모드)와 VxLAN 모드(50bytes)가 있다.
3. crosssubnet 모드
- direct 방식과 overlay 방식이 혼합된 방식
- 노드간 같은 네트워크 대역일 경우 direct 방식
- 노드간 다른 네트워크 대역일 경우 overlay 방식의 ipip모드로 동작
Reference
https://ssup2.github.io/theory_analysis/Kubernetes_Calico_Plugin/
https://eddie.ee/186
https://projectcalico.docs.tigera.io/reference/architecture/overview