Skip to content

Cilium 딥다이브: 클라우드 네이티브 네트워킹의 미래

개요

이 섹션은 Cilium의 핵심 개념과 기술에 대한 포괄적인 이해를 제공합니다. Cilium의 아키텍처, eBPF 기술, 네트워킹 모델, 보안 기능 등을 심층적으로 탐구합니다.

지원 버전: Cilium 1.17, 1.18 Kubernetes 호환성: 1.32 이상 마지막 업데이트: 2026년 2월 23일

Cilium 1.18의 주요 개선사항

Cilium 1.18은 다음과 같은 주요 기능 개선과 새로운 기능을 제공합니다:

네트워킹 개선

  • 향상된 BGP 컨트롤 플레인: 더욱 유연하고 확장 가능한 BGP 구성
  • 개선된 멀티클러스터 라우팅: 클러스터 간 통신 성능 최적화
  • 향상된 서비스 메시 통합: Envoy 프록시와의 더 나은 통합

보안 강화

  • 향상된 네트워크 정책: 더 세밀한 정책 제어 및 성능 개선
  • 개선된 암호화 옵션: WireGuard 및 IPsec 암호화 성능 최적화

관찰성 개선

  • Hubble 개선: 더 풍부한 메트릭 및 추적 정보
  • 향상된 Prometheus 통합: 새로운 메트릭 및 대시보드
  • 개선된 플로우 로깅: 더 상세한 네트워크 플로우 정보

성능 최적화

  • eBPF 프로그램 최적화: 더 빠른 패킷 처리
  • 메모리 사용량 개선: 대규모 클러스터에서의 리소스 효율성 향상
  • CPU 사용량 최적화: 더 낮은 오버헤드

소개

Cilium은 Kubernetes, Docker, Mesos와 같은 Linux 컨테이너 관리 플랫폼을 위한 오픈 소스 네트워킹, 보안 및 관찰성 솔루션입니다. Cilium은 eBPF(extended Berkeley Packet Filter) 기술을 기반으로 하여 전통적인 Linux 네트워킹 접근 방식보다 더 강력하고 효율적인 네트워킹 및 보안 기능을 제공합니다.

eBPF란?

eBPF는 Linux 커널 내에서 샌드박스 가상 머신처럼 작동하는 기술로, 커널 코드를 수정하지 않고도 커널 내에서 프로그램을 안전하게 실행할 수 있게 해줍니다. 이를 통해 네트워크 패킷 처리, 시스템 호출 모니터링, 성능 분석 등 다양한 작업을 효율적으로 수행할 수 있습니다.

eBPF의 주요 특징:

  • 커널 공간에서 실행되어 높은 성능 제공
  • JIT(Just-In-Time) 컴파일을 통한 네이티브 성능
  • 안전한 실행 환경 (검증기를 통한 프로그램 검증)
  • 동적 로딩 및 언로딩 가능

Cilium의 주요 이점

  1. 고성능 네트워킹: eBPF를 활용한 효율적인 패킷 처리
  2. 세분화된 네트워크 정책: L3-L7 수준의 네트워크 정책 지원
  3. 투명한 암호화: 노드 간 투명한 IPsec 또는 WireGuard 암호화
  4. 부하 분산: XDP(eXpress Data Path) 기반 고성능 부하 분산
  5. 관찰성: Hubble을 통한 네트워크 흐름 가시성
  6. 서비스 메시: 기존 사이드카 없이 L7 트래픽 관리
  7. 멀티 클러스터 네트워킹: 클러스터 간 투명한 연결
  8. BGP 지원: 외부 네트워크와의 통합

기존 CNI와의 비교

기능CiliumCalicoFlannelAWS VPC CNI
네트워크 모델eBPFiptables/IPVSVXLAN/host-gwAWS ENI
네트워크 정책L3-L7L3-L4제한적AWS 보안 그룹
암호화IPsec/WireGuardIPsec없음없음
관찰성HubbleFlow Logs제한적VPC Flow Logs
서비스 메시내장Istio 필요Istio 필요Istio/AppMesh 필요
성능매우 높음높음중간높음
멀티 클러스터내장제한적없음Transit Gateway 필요

아키텍처

Cilium은 eBPF를 기반으로 한 데이터 플레인과 Kubernetes와 통합되는 컨트롤 플레인으로 구성됩니다.

주요 구성 요소

  1. Cilium Agent: 각 노드에서 실행되며 eBPF 프로그램을 로드하고 관리
  2. Cilium Operator: 클러스터 수준의 리소스 및 작업 관리
  3. eBPF 프로그램: 커널에 로드되어 패킷 처리 및 정책 시행
  4. Hubble: 네트워크 흐름 모니터링 및 관찰성 제공
  5. Cilium CLI: Cilium 및 Hubble 관리를 위한 명령줄 도구

네트워킹 모델

Cilium은 여러 네트워킹 모드를 지원합니다:

  1. 직접 라우팅: 노드 간 직접 라우팅 (BGP 또는 정적 라우팅)
  2. 터널링: VXLAN 또는 Geneve 터널을 통한 오버레이 네트워킹
  3. AWS ENI: Amazon EKS에서 ENI(Elastic Network Interface) 활용
  4. Azure IPAM: Azure AKS에서 Azure IPAM 활용

패킷 흐름

Cilium에서 패킷이 처리되는 방식:

  1. 패킷이 네트워크 인터페이스에 도착
  2. eBPF XDP 프로그램이 패킷을 초기 처리 (DDoS 방어, 부하 분산)
  3. eBPF TC(Traffic Control) 프로그램이 네트워크 정책 적용
  4. 패킷이 컨테이너 네트워크 네임스페이스로 전달
  5. 응답 패킷도 유사한 경로로 처리

Amazon EKS와의 통합

Amazon EKS에서 Cilium을 사용하는 방법은 크게 두 가지가 있습니다:

  1. Amazon EKS 추가 기능으로 설치: Amazon EKS는 Cilium을 관리형 추가 기능으로 제공합니다.
  2. 수동 설치: Helm 차트를 사용하여 직접 설치합니다.

Amazon EKS 추가 기능으로 설치

bash
# Cilium 추가 기능 설치
aws eks create-addon \
  --cluster-name my-cluster \
  --addon-name cilium \
  --addon-version v1.17.0-eksbuild.1 \
  --service-account-role-arn arn:aws:iam::123456789012:role/AmazonEKSCiliumAddonRole

# 추가 기능 상태 확인
aws eks describe-addon \
  --cluster-name my-cluster \
  --addon-name cilium

Helm을 사용한 수동 설치

bash
# Cilium Helm 리포지토리 추가
helm repo add cilium https://helm.cilium.io/

# Helm 리포지토리 업데이트
helm repo update

# Cilium 설치
helm install cilium cilium/cilium \
  --version 1.17.0 \
  --namespace kube-system \
  --set eni.enabled=true \
  --set ipam.mode=eni \
  --set egressMasqueradeInterfaces=eth0 \
  --set tunnel=disabled

EKS 특화 구성 옵션

EKS에서 Cilium을 사용할 때 고려해야 할 주요 구성 옵션:

  1. ENI 모드: AWS Elastic Network Interface를 활용하여 네이티브 AWS 네트워킹 성능 활용
  2. IPAM 모드: AWS VPC IP 주소 관리와 통합
  3. 암호화: 노드 간 트래픽 암호화 (WireGuard 또는 IPsec)
  4. NodeLocal DNSCache: DNS 성능 향상
  5. Hubble: 네트워크 관찰성 활성화

ENI 모드 구성

yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: cilium-config
  namespace: kube-system
data:
  enable-endpoint-routes: "true"
  auto-create-cilium-node-resource: "true"
  ipam: "eni"
  eni-tags: "{\"Owner\": \"Cilium\"}"
  tunnel: "disabled"
  enable-ipv4: "true"
  enable-ipv6: "false"
  egress-masquerade-interfaces: "eth0"

EKS 클러스터에 Cilium 설치

기존 EKS 클러스터에 Cilium 설치

bash
# AWS CNI 제거
kubectl delete daemonset -n kube-system aws-node

# Cilium 설치
cilium install --set eni.enabled=true \
  --set ipam.mode=eni \
  --set egressMasqueradeInterfaces=eth0 \
  --set tunnel=disabled

Cilium CNI로 새 EKS 클러스터 생성

bash
eksctl create cluster --name cilium-cluster \
  --without-nodegroup

eksctl create nodegroup --cluster cilium-cluster \
  --node-ami-family AmazonLinux2 \
  --node-type m5.large \
  --nodes 3 \
  --max-pods-per-node 110

# Cilium 설치
cilium install --set eni.enabled=true \
  --set ipam.mode=eni \
  --set egressMasqueradeInterfaces=eth0 \
  --set tunnel=disabled

EKS 클러스터 간 연결

Cilium Cluster Mesh를 사용한 EKS 클러스터 간 연결:

bash
# 클러스터 1에서
cilium clustermesh enable --service-type LoadBalancer

# 클러스터 2에서
cilium clustermesh enable --service-type LoadBalancer

# 클러스터 연결
cilium clustermesh connect --context cluster1 --destination-context cluster2

설치 및 구성

사전 요구 사항

  • Kubernetes 클러스터 (v1.16 이상)
  • Linux 커널 4.9 이상 (권장: 5.4 이상)
  • kubectl 설정
  • Helm (선택 사항)

Cilium CLI 설치

bash
curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz

구성 옵션

네트워킹 모드 구성

직접 라우팅 모드:

bash
cilium install --set tunnel=disabled --set autoDirectNodeRoutes=true

VXLAN 모드:

bash
cilium install --set tunnel=vxlan

kube-proxy 대체 구성

완전 대체 모드:

bash
cilium install --set kubeProxyReplacement=strict

암호화 구성

WireGuard 암호화:

bash
cilium install --set encryption.enabled=true --set encryption.type=wireguard

IPsec 암호화:

bash
cilium install --set encryption.enabled=true --set encryption.type=ipsec

네트워크 정책

Cilium은 Kubernetes NetworkPolicy API를 확장하여 L3-L7 수준의 세분화된 네트워크 정책을 제공합니다.

기본 네트워크 정책

yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
  namespace: app
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - port: 8080
      protocol: TCP

Cilium 네트워크 정책

yaml
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: allow-specific-http-methods
  namespace: app
spec:
  endpointSelector:
    matchLabels:
      app: backend
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: frontend
    toPorts:
    - ports:
      - port: "8080"
        protocol: TCP
      rules:
        http:
        - method: "GET"
          path: "/api/v1/products"

FQDN 기반 정책

yaml
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: allow-specific-domains
  namespace: app
spec:
  endpointSelector:
    matchLabels:
      app: web
  egress:
  - toFQDNs:
    - matchName: "api.example.com"
    - matchPattern: "*.amazonaws.com"
    toPorts:
    - ports:
      - port: "443"
        protocol: TCP

Hubble을 통한 관찰성

Hubble은 Cilium의 관찰성 계층으로, eBPF를 통해 수집된 네트워크 흐름 데이터를 시각화하고 분석할 수 있게 해줍니다.

Hubble 설치

bash
cilium hubble enable --ui

네트워크 흐름 관찰

bash
# 모든 흐름 관찰
hubble observe

# 특정 네임스페이스의 흐름 관찰
hubble observe --namespace app

# HTTP 요청 관찰
hubble observe --protocol http

# 특정 라벨을 가진 파드 간의 흐름 관찰
hubble observe --from-label app=frontend --to-label app=backend

# 실패한 연결 관찰
hubble observe --verdict DROPPED

Prometheus 통합

bash
cilium hubble enable --metrics="{dns:query;ignoreAAAA,drop:sourceContext=pod;destinationContext=pod,tcp,flow,icmp,http}"

Cilium 테스트

bash
# 기본 연결성 테스트
cilium connectivity test

# 특정 테스트 실행
cilium connectivity test --test=client-to-echo-service

# 네트워크 성능 테스트
cilium connectivity test --test=performance

모범 사례

성능 최적화

  1. 커널 버전 최적화: Linux 커널 5.4 이상 사용
  2. BBR 혼잡 제어 활성화: 네트워크 처리량 향상
  3. XDP 가속 활성화: 패킷 처리 성능 향상
  4. MTU 최적화: 네트워크 환경에 맞는 MTU 설정
bash
cilium install --set bpf.preallocateMaps=true \
  --set bpf.masquerade=true \
  --set devices=eth0 \
  --set loadBalancer.acceleration=native \
  --set loadBalancer.mode=dsr

보안 강화

  1. 기본 거부 정책 적용: 명시적으로 허용된 트래픽만 허용
  2. 암호화 활성화: 노드 간 트래픽 암호화
  3. 최소 권한 원칙 적용: 필요한 통신만 허용하는 정책 설계

관찰성 향상

bash
cilium hubble enable --metrics="{dns,drop,tcp,flow,http}"

문제 해결

연결성 문제

bash
# Cilium 상태 확인
cilium status

# 엔드포인트 상태 확인
cilium endpoint list

# 네트워크 정책 검토
kubectl get cnp,ccnp -A

# 흐름 분석
hubble observe --verdict DROPPED

성능 문제

bash
# eBPF 맵 상태 확인
cilium bpf maps list

# 시스템 리소스 모니터링
cilium metrics list

디버깅 도구

bash
# 상태 확인
cilium status --verbose

# 환경 정보 수집
cilium sysdump

# Cilium 에이전트 로그
kubectl logs -n kube-system -l k8s-app=cilium

딥다이브 목차

Cilium 소개 및 기본 개념

  • Cilium 개요 및 역사
  • 컨테이너 네트워킹 기초
  • CNI(Container Network Interface) 이해하기
  • Cilium의 차별화 포인트

eBPF 기술 심층 분석

  • eBPF 기술 소개 및 역사
  • 커널 내 eBPF 작동 방식
  • eBPF 프로그램 유형 및 맵
  • Cilium에서의 eBPF 활용

네트워킹 모델 및 VXLAN

  • 컨테이너 네트워킹 모델 비교
  • VXLAN 기술 심층 분석
  • Cilium의 오버레이 네트워킹
  • 성능 최적화 기법
  • 라우팅 메커니즘 (Encapsulation vs Native-Routing)
  • 클라우드 제공업체별 네트워킹 (AWS ENI, Google Cloud)

IPAM 및 네트워크 정책

  • IP 주소 관리(IPAM) 전략
  • Kubernetes와 Cilium IPAM 통합
  • 네트워크 정책 설계 및 구현
  • 멀티 클러스터 시나리오
  • IPAM 모드 심층 분석 (Cluster Scope, Kubernetes Host Scope, Multi-Pool)
  • 클라우드 제공업체별 IPAM (Azure IPAM, AWS ENI, GKE)
  • CRD 기반 IPAM

L2-L7 네트워킹 및 로드 밸런싱

  • OSI 모델 계층 이해 (L2, L3, L4, L7)
  • Cilium의 계층별 기능
  • 서비스 메시 통합
  • 로드 밸런싱 아키텍처
  • 마스커레이딩 구성 및 구현 모드
  • IPv4 프래그먼트 처리

보안 및 가시성

  • Cilium의 보안 기능
  • 네트워크 가시성 및 모니터링
  • Hubble 아키텍처 및 활용
  • 실시간 위협 탐지

고급 주제 및 실제 사례

  • 성능 튜닝 및 문제 해결
  • 대규모 배포 전략
  • 실제 사용 사례 연구
  • 미래 로드맵 및 발전 방향

추가 자료

참고 자료

퀴즈

이 섹션에서 배운 내용을 테스트하려면 Cilium 딥다이브 퀴즈를 풀어보세요.