Calico 데이터 경로: IP 라우팅과 iptables
Calico의 핵심 특징 중 하나는 데이터 센터 안의 워크로드 사이, 또는 워크로드와 인터넷 사이에서 패킷이 추가 캡슐화 없이 흐른다는 점이에요. 이 문서에서는 Linux 라우팅 테이블과 iptables, eBPF로 구성되는 Calico 데이터 경로가 어떻게 동작하는지 설명합니다. 직접 라우팅 테이블 예제를 따라가며 개념을 익혀보세요.
출처: 문서
본문
Calico의 핵심 특징 중 하나는 데이터 센터 안의 워크로드 사이, 또는 워크로드와 인터넷 사이에서 패킷이 추가 캡슐화 없이 흐른다는 점이에요.
Calico 방식에서는 워크로드로 오가는 IP 패킷이 워크로드가 속한 호스트의 Linux 라우팅 테이블과 iptables, 또는 eBPF 인프라에 의해 라우팅되고 방화벽 처리돼요. 패킷을 보내는 워크로드 입장에서는, 워크로드가 자체적으로 어떤 라우팅을 설정했든 상관없이 Calico가 항상 호스트가 다음 홉(next hop) MAC 주소로 반환되도록 보장합니다. 워크로드로 향하는 패킷의 경우 마지막 IP 홉은 목적지 워크로드가 속한 호스트에서 워크로드 자신으로 가는 홉이에요.

워크로드의 IPv4 주소가 데이터센터 사설 서브넷 10.65/16에서 할당되고, 호스트의 IP 주소는 172.18.203/24에서 할당된다고 해봅시다. 호스트의 라우팅 테이블을 보면:
route -n
다음과 같은 내용을 볼 수 있어요:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.18.203.1 0.0.0.0 UG 0 0 0 eth0
10.65.0.0 0.0.0.0 255.255.0.0 U 0 0 0 ns-db03ab89-b4
10.65.0.21 172.18.203.126 255.255.255.255 UGH 0 0 0 eth0
10.65.0.22 172.18.203.129 255.255.255.255 UGH 0 0 0 eth0
10.65.0.23 172.18.203.129 255.255.255.255 UGH 0 0 0 eth0
10.65.0.24 0.0.0.0 255.255.255.255 UH 0 0 0 tapa429fb36-04
172.18.203.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
이 호스트에는 IP 주소 10.65.0.24를 가진 워크로드가 하나 있고, tapa429fb36-04라는 이름의 TAP(veth 등) 인터페이스를 통해 호스트에서 접근할 수 있어요. 그래서 10.65.0.24로 가는 직접 경로가 tapa429fb36-04를 통해 존재합니다. 나머지 워크로드들(.21, .22, .23 주소)은 다른 두 호스트(172.18.203.126과 .129)에 있으므로, 이 워크로드 주소들의 경로는 그 호스트들을 경유해요.
직접 경로는 특정 워크로드의 연결을 프로비저닝하라는 요청을 받을 때 Felix라는 Calico 에이전트가 설정합니다. 그다음 BGP 클라이언트(예: BIRD)가 이를 감지해, 아마도 라우트 리플렉터를 거쳐, 다른 호스트에서 실행 중인 BGP 클라이언트들에게 배포하고, 그래서 간접 경로도 나타나는 거예요. 또는 Felix가 클러스터 경로를 프로그래밍하도록 설정되어 있다면, VXLAN, IP-in-IP, 또는 캡슐화 없는 IP 풀을 위해 Felix가 그 간접(클러스터) 경로를 직접 프로그래밍할 수도 있습니다.
이게 다인가요?
정적인 데이터 경로만 놓고 보면, 그렇습니다. 호스트 MAC으로 워크로드 ARP 요청에 응답하는 것과 IP 라우팅, 그리고 iptables 또는 eBPF의 조합일 뿐이에요. 필요한 라우팅과 보안 정보를 관리하는 방법이나 워크로드 마이그레이션 같은 동적인 상황을 다루는 부분에서는 Calico가 훨씬 많은 것을 하지만, 기본 데이터 경로는 정말로 이만큼 단순합니다.
더 알아보기 (Learn more)
캡슐화 없는 라우팅은 성능과 디버깅 측면에서 큰 장점이에요. 데이터 경로가 어떻게 만들어지는지 이해하면 나중에 문제를 추적할 때 훨씬 수월합니다. Felix와 BGP 구성 문서를 함께 살펴보면 전체 그림이 보여요.