Search

개념

Calico는 컨테이너와 가상 머신을 위한 네트워킹 솔루션이다. 쉽게 말해, 여러 컴퓨터나 서버에서 실행되는 애플리케이션들이 서로 안전하고 효율적으로 통신할 수 있도록 도와주는 도구라고 생각하면 된다.

주요 특징

1.
다양한 환경 지원: Kubernetes, OpenShift 등 여러 플랫폼에서 사용할 수 있다.
2.
빠른 성능: 최신 기술(eBPF)이나 기존 리눅스 네트워킹을 사용해 빠른 속도를 제공한다.
3.
일관된 사용 경험: 클라우드에서든 회사 내부 서버에서든, 작은 규모에서든 큰 규모에서든 동일한 방식으로 사용할 수 있다.

Calico 주요 구성 요소

1. Felix

Felix는 Calico 네트워크의 핵심 구성 요소로, 각 노드에서 실행된다.
주요 기능
네트워크 인터페이스 관리: 컨테이너와 호스트 간의 연결을 설정하고 관리한다.
라우팅 테이블 관리: 노드 내부 및 노드 간 트래픽을 위한 라우팅 규칙을 설정한다.
ACL(Access Control List) 관리: 네트워크 정책에 따라 트래픽을 필터링한다.
상태 보고: 노드의 네트워크 상태를 주기적으로 데이터스토어에 보고한다
동작 원리
1.
Felix는 데이터스토어를 모니터링하여 변경 사항을 감지합니다.
2.
변경 사항이 감지되면, 해당 노드의 네트워크 구성을 업데이트합니다.
3.
리눅스 커널의 iptables 또는 eBPF를 사용하여 네트워크 정책을 적용합니다.

2. BIRD (BGP Client)

BIRD는 BGP(Border Gateway Protocol)를 사용하여 노드 간 라우팅 정보를 교환합니다.
주요 기능
라우팅 정보 전파: 로컬 노드의 컨테이너 IP 주소를 다른 노드에 알립니다.
라우팅 정보 수신: 다른 노드의 컨테이너 IP 주소 정보를 수신합니다.
BGP 피어링 관리: 다른 노드와의 BGP 세션을 설정하고 유지합니다.
동작 원리
1.
Felix가 생성한 로컬 라우팅 정보를 읽습니다.
2.
BGP 프로토콜을 사용하여 이 정보를 다른 노드의 BIRD 프로세스와 교환합니다.
3.
수신한 라우팅 정보를 노드의 라우팅 테이블에 반영합니다.

3. Datastore

Calico의 설정 정보와 네트워크 상태를 저장하는 중앙 저장소입니다.
지원 옵션
etcd: 분산 키-값 저장소
Kubernetes API 서버: Kubernetes 자체 데이터스토어 활용
주요 기능
네트워크 정책 저장
IP 주소 할당 정보 관리
노드 정보 및 상태 저장
동작 원리
1.
Calico 구성 요소들이 데이터스토어에 정보를 쓰거나 읽습니다.
2.
변경 사항이 발생하면 관련 구성 요소에 알림을 보냅니다.
3.
구성 요소들은 이 정보를 바탕으로 네트워크 구성을 업데이트합니다.

4. IPAM (IP Address Management) Plugin

컨테이너와 가상 머신에 IP 주소를 동적으로 할당하고 관리합니다.
주요 기능
IP 주소 풀 관리
IP 주소 할당 및 해제
IP 주소 충돌 방지
동작 원리
1.
컨테이너나 가상 머신이 생성될 때 IPAM 플러그인이 호출됩니다.
2.
설정된 IP 풀에서 사용 가능한 IP 주소를 선택합니다.
3.
선택된 IP 주소를 데이터스토어에 기록하고 컨테이너에 할당합니다.
4.
컨테이너가 종료되면 할당된 IP 주소를 회수하여 재사용 가능하도록 합니다.

5. calicoctl

Calico 네트워크를 관리하기 위한 명령줄 도구입니다.
주요 기능
Calico 리소스 생성, 수정, 삭제, 조회
네트워크 정책 관리
문제 진단 및 디버깅
동작 원리
1.
사용자의 명령을 해석합니다.
2.
데이터스토어에 접근하여 요청된 작업을 수행합니다.
3.
작업 결과를 사용자에게 보고합니다.
이 도구를 통해 관리자는 Calico 네트워크의 모든 측면을 제어하고 모니터링할 수 있습니다.
Felix와 BIRD의 주요 차이점
1.
범위
Felix: 주로 노드 내부의 네트워크를 관리한다.
BIRD: 노드 간(클러스터 전체)의 네트워크 통신을 담당한다.
2.
기능
Felix: 로컬 네트워크 인터페이스, 라우팅 테이블, 방화벽 규칙을 관리한다.
BIRD: BGP 프로토콜을 사용하여 다른 노드와 라우팅 정보를 교환한다.
3.
라우팅 관리 방식
Felix: 노드 내부의 컨테이너와 호스트 사이의 라우팅을 설정한다.
BIRD: 노드 간 라우팅 정보를 교환하여 클러스터 전체의 라우팅을 관리한다.
4.
통신 대상
Felix: 주로 로컬 리눅스 커널과 상호작용한다.
BIRD: 다른 노드의 BIRD 프로세스와 통신한다.
간단한 예시로 설명하자면
1.
새 컨테이너가 생성되는 경우
Felix는 이 컨테이너를 위한 네트워크 인터페이스를 설정하고, 노드 내부에서 이 컨테이너로 가는 경로를 로컬 라우팅 테이블에 추가한다.
Felix는 이 새로운 라우팅 정보를 로컬 BIRD 프로세스에 전달한다.
BIRD는 이 정보를 받아 다른 노드의 BIRD 프로세스들과 공유한다.
2.
다른 노드의 컨테이너로 통신하는 경우
BIRD는 다른 노드들로부터 받은 라우팅 정보를 사용하여 목적지 컨테이너가 어느 노드에 있는지 알아낸다.
BIRD는 이 정보를 노드의 라우팅 테이블에 추가한다.
Felix는 이 라우팅 테이블을 사용하여 패킷을 올바른 방향으로 보낸다.
요약하자면
Felix는 "로컬 교통 관리자"로, 노드 내부의 트래픽 흐름을 제어한다.
BIRD는 "도시 간 내비게이션 시스템"으로, 다른 노드로 가는 최적의 경로를 찾아 알려준다.
Calico는 BGP(Border Gateway Protocol)라는 기술을 사용한다. BGP는 대규모 네트워크에서 효율적으로 통신 경로를 찾는 방법을 제공한다. 이를 통해 Calico는 많은 수의 컨테이너나 가상 머신이 있어도 효율적으로 네트워크를 관리할 수 있다.
간단히 말해, Calico는 컨테이너화된 애플리케이션이 큰 규모에서도 빠르고 안전하게 통신할 수 있도록 도와주는 네트워크 솔루션이다.