인프라/쿠버네티스

[cilium] cilium 네트워크 패킷 흐름 (with ebpf)

G-egg 2025. 7. 15. 13:38
반응형

📋 개요

Cilium 의 eBPF 데이터패스에서 패킷이 어떻게 처리되는지 자세히 설명합니다. 쿠버네티스 환경에서 널리 사용되는 Cilium CNI(Container Network Interface) 가 eBPF 기술을 활용하여 네트워크 정책을 적용하고, 패킷을 라우팅하는 과정을 3가지 주요 시나리오로 나누어 살펴보겠습니다.

 

주요 내용:

  • 엔드포인트 간 통신 흐름 (Endpoint to Endpoint)
  • 엔드포인트에서 외부로 나가는 트래픽 (Egress from Endpoint)
  • 외부에서 엔드포인트로 들어오는 트래픽 (Ingress to Endpoint)
  • veth 기반 vs ipvlan 기반 데이터패스 차이점

🚀 패킷 흐름 시나리오 분석

1️⃣ 엔드포인트 간 통신 흐름 (Endpoint to Endpoint)

로컬 엔드포인트에서 다른 로컬 엔드포인트로 패킷이 전송되는 과정 전체 흐름은 다음과 같습니다.

주요 단계:

  1. 송신 엔드포인트에서 패킷 생성
    • 애플리케이션이 패킷을 생성하여 네트워크 스택으로 전달
  2. L7 Egress / Ingress 정책 적용
    • TC@Endpoint -> PREROUTING -> INPUT / FORWARD -> OUTPUT -> POSTROUTING -> TC@cilium_host 순으로 전달하면서 L7 정책 검사 수행
  3. 수신 엔드포인트로 패킷 전달
    • 패킷을 대상 엔드포인트의 네트워크 네임스페이스로 전달

socket layer enforcement  모드를 적용한다면,

TCP 트래픽에 대해 소켓 계층 강화가 활성화된 경우

  • 일반 모드: [L3/L4 eBPF] + [L7 eBPF] + [기타 처리]
  • 소켓 강화: [L7 eBPF만] + [기타 처리]

TCP 핸드쉐이크 과정 이후(TCP 상태가 ESTABLISHED) L7 정책만 확인합니다.

TCP 의 연결 지향적 특성을 활용한 최적화입니다. 한 번 연결이 설정되면 L3 / L4 정책은 변하지 않을 가능성이 높으므로, 매 패킷마다 다시 검사할 필요가 없기 때문입니다.

 

2️⃣ 엔드포인트에서 외부로 통신 흐름 (Egress from Endpoint)

오버레이 네트워크 사용 시, 외부 네트워크로 전달하기 전 트래픽 흐름은 다음과 같습니다.

 

 

L7 Policy 정책 적용 시 PREROUTING / INPUT 정책 적용을 하지 않습니다.

패킷이 NIC 를 지나서 Overlay 네트워크를 위한 encapsulation 및 route 기능을 수행합니다. cilium_vxlan 인터페이스를 통해 패킷 전송합니다.

socket layer enforcement  모드를 적용한다면,

TCP 트래픽에 대해 소켓 계층 강화가 활성화된 경우 L7 정책 적용을 하지 않고, L3 Encryption 만 수행합니다.

 

3️⃣ 외부에서 엔드포인트로 (Ingress to Endpoint)

오버레이 네트워크 사용 시, 외부 네트워크에서 POD 까지 전달하는 트래픽 흐름은 다음과 같습니다.

 

 

NIC 를 통해 패킷을 받으면 바로 복호화를 진행합니다.

Prefilter 가 존재하는 경우, standalone load balancer 와 L7 policy 적용하여 pod 에게 전달하고, 없는 경우 바로 전달합니다.

 


⚖️ 데이터패스 모드 비교

veth 기반 데이터패스 (기본값)

패킷 흐름 구조:

[Container] → [veth pair] → [Host Network Stack] → [eBPF Programs] → [Destination]

 

장점:

  • (보안성) 모든 eBPF 프로그램이 호스트 네트워크 네임스페이스에서 관리되므로 컨테이너가 접근 불가
  • (격리성) 컨테이너에 CAP_NET_ADMIN 권한을 부여해도 eBPF 프로그램 조작 불가능
  • (완전한 기능) 모든 Cilium 기능 지원 (NAT64, L7 프록시, 서비스 로드밸런싱 등)
  • (유연성) 호스트에서 모든 네트워크 디바이스에 접근 가능

단점:

  • (성능 오버헤드) 모든 패킷이 호스트 네트워크 스택을 거쳐야 함
  • (이중 순회) 로컬 엔드포인트 간 통신 시 네트워크 스택을 두 번 순회
  • (지연 시간) veth pair를 통한 네임스페이스 간 전환 비용

ipvlan 기반 데이터패스

패킷 흐름 구조:

[Container] → [ipvlan slave device + eBPF] → [Direct forwarding] → [Destination]

 

핵심 차이점:

  • eBPF 프로그램이 컨테이너 네임스페이스 내부의 ipvlan slave 디바이스에 직접 연결
  • 호스트 네트워크 스택을 거치지 않고 tc egress 계층에서 직접 처리
  • ipvlan의 내부 포워딩 로직을 활용한 효율적인 패킷 전달

장점:

  • 성능 최적화: 호스트 네트워크 스택 우회로 지연 시간 감소
  • 효율적인 전환: L3 계층에서 직접 네임스페이스 스위칭
  • 단일 순회: 로컬 엔드포인트 간 통신 시 한 번만 egress-to-ingress 스위치

단점 및 제한사항:

  • (보안 위험) CAP_NET_ADMIN, CAP_NET_RAW 권한을 가진 컨테이너가 자신의 네임스페이스 내 eBPF 프로그램을 조작 위험
  • (기능 제한) NAT64, L7 정책 프록시, 서비스 로드밸런싱 등 미지원
  • (통신 제한) 컨테이너에서 호스트 로컬 통신 불가
  • (안정성) 아직 기술 미리보기 단계

ipvlan 모드 활성화 방법

# Cilium 데몬 실행 시 옵션 추가
--datapath-mode=ipvlan --ipvlan-master-device=bond0

🎯 출처

https://docs.cilium.io/en/stable/network/ebpf/lifeofapacket/

Cilium 가시다 스터디 후 공부한 내용을 정리하였습니다. 스터디를 진행해주신 가시다님에게 감사의 말씀 드립니다.

반응형