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의 주요 이점
- 고성능 네트워킹: eBPF를 활용한 효율적인 패킷 처리
- 세분화된 네트워크 정책: L3-L7 수준의 네트워크 정책 지원
- 투명한 암호화: 노드 간 투명한 IPsec 또는 WireGuard 암호화
- 부하 분산: XDP(eXpress Data Path) 기반 고성능 부하 분산
- 관찰성: Hubble을 통한 네트워크 흐름 가시성
- 서비스 메시: 기존 사이드카 없이 L7 트래픽 관리
- 멀티 클러스터 네트워킹: 클러스터 간 투명한 연결
- BGP 지원: 외부 네트워크와의 통합
기존 CNI와의 비교
| 기능 | Cilium | Calico | Flannel | AWS VPC CNI |
|---|---|---|---|---|
| 네트워크 모델 | eBPF | iptables/IPVS | VXLAN/host-gw | AWS ENI |
| 네트워크 정책 | L3-L7 | L3-L4 | 제한적 | AWS 보안 그룹 |
| 암호화 | IPsec/WireGuard | IPsec | 없음 | 없음 |
| 관찰성 | Hubble | Flow Logs | 제한적 | VPC Flow Logs |
| 서비스 메시 | 내장 | Istio 필요 | Istio 필요 | Istio/AppMesh 필요 |
| 성능 | 매우 높음 | 높음 | 중간 | 높음 |
| 멀티 클러스터 | 내장 | 제한적 | 없음 | Transit Gateway 필요 |
아키텍처
Cilium은 eBPF를 기반으로 한 데이터 플레인과 Kubernetes와 통합되는 컨트롤 플레인으로 구성됩니다.
주요 구성 요소
- Cilium Agent: 각 노드에서 실행되며 eBPF 프로그램을 로드하고 관리
- Cilium Operator: 클러스터 수준의 리소스 및 작업 관리
- eBPF 프로그램: 커널에 로드되어 패킷 처리 및 정책 시행
- Hubble: 네트워크 흐름 모니터링 및 관찰성 제공
- Cilium CLI: Cilium 및 Hubble 관리를 위한 명령줄 도구
네트워킹 모델
Cilium은 여러 네트워킹 모드를 지원합니다:
- 직접 라우팅: 노드 간 직접 라우팅 (BGP 또는 정적 라우팅)
- 터널링: VXLAN 또는 Geneve 터널을 통한 오버레이 네트워킹
- AWS ENI: Amazon EKS에서 ENI(Elastic Network Interface) 활용
- Azure IPAM: Azure AKS에서 Azure IPAM 활용
패킷 흐름
Cilium에서 패킷이 처리되는 방식:
- 패킷이 네트워크 인터페이스에 도착
- eBPF XDP 프로그램이 패킷을 초기 처리 (DDoS 방어, 부하 분산)
- eBPF TC(Traffic Control) 프로그램이 네트워크 정책 적용
- 패킷이 컨테이너 네트워크 네임스페이스로 전달
- 응답 패킷도 유사한 경로로 처리
Amazon EKS와의 통합
Amazon EKS에서 Cilium을 사용하는 방법은 크게 두 가지가 있습니다:
- Amazon EKS 추가 기능으로 설치: Amazon EKS는 Cilium을 관리형 추가 기능으로 제공합니다.
- 수동 설치: Helm 차트를 사용하여 직접 설치합니다.
Amazon EKS 추가 기능으로 설치
# 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 ciliumHelm을 사용한 수동 설치
# 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=disabledEKS 특화 구성 옵션
EKS에서 Cilium을 사용할 때 고려해야 할 주요 구성 옵션:
- ENI 모드: AWS Elastic Network Interface를 활용하여 네이티브 AWS 네트워킹 성능 활용
- IPAM 모드: AWS VPC IP 주소 관리와 통합
- 암호화: 노드 간 트래픽 암호화 (WireGuard 또는 IPsec)
- NodeLocal DNSCache: DNS 성능 향상
- Hubble: 네트워크 관찰성 활성화
ENI 모드 구성
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 설치
# 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=disabledCilium CNI로 새 EKS 클러스터 생성
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=disabledEKS 클러스터 간 연결
Cilium Cluster Mesh를 사용한 EKS 클러스터 간 연결:
# 클러스터 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 설치
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구성 옵션
네트워킹 모드 구성
직접 라우팅 모드:
cilium install --set tunnel=disabled --set autoDirectNodeRoutes=trueVXLAN 모드:
cilium install --set tunnel=vxlankube-proxy 대체 구성
완전 대체 모드:
cilium install --set kubeProxyReplacement=strict암호화 구성
WireGuard 암호화:
cilium install --set encryption.enabled=true --set encryption.type=wireguardIPsec 암호화:
cilium install --set encryption.enabled=true --set encryption.type=ipsec네트워크 정책
Cilium은 Kubernetes NetworkPolicy API를 확장하여 L3-L7 수준의 세분화된 네트워크 정책을 제공합니다.
기본 네트워크 정책
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: TCPCilium 네트워크 정책
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 기반 정책
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: TCPHubble을 통한 관찰성
Hubble은 Cilium의 관찰성 계층으로, eBPF를 통해 수집된 네트워크 흐름 데이터를 시각화하고 분석할 수 있게 해줍니다.
Hubble 설치
cilium hubble enable --ui네트워크 흐름 관찰
# 모든 흐름 관찰
hubble observe
# 특정 네임스페이스의 흐름 관찰
hubble observe --namespace app
# HTTP 요청 관찰
hubble observe --protocol http
# 특정 라벨을 가진 파드 간의 흐름 관찰
hubble observe --from-label app=frontend --to-label app=backend
# 실패한 연결 관찰
hubble observe --verdict DROPPEDPrometheus 통합
cilium hubble enable --metrics="{dns:query;ignoreAAAA,drop:sourceContext=pod;destinationContext=pod,tcp,flow,icmp,http}"Cilium 테스트
# 기본 연결성 테스트
cilium connectivity test
# 특정 테스트 실행
cilium connectivity test --test=client-to-echo-service
# 네트워크 성능 테스트
cilium connectivity test --test=performance모범 사례
성능 최적화
- 커널 버전 최적화: Linux 커널 5.4 이상 사용
- BBR 혼잡 제어 활성화: 네트워크 처리량 향상
- XDP 가속 활성화: 패킷 처리 성능 향상
- MTU 최적화: 네트워크 환경에 맞는 MTU 설정
cilium install --set bpf.preallocateMaps=true \
--set bpf.masquerade=true \
--set devices=eth0 \
--set loadBalancer.acceleration=native \
--set loadBalancer.mode=dsr보안 강화
- 기본 거부 정책 적용: 명시적으로 허용된 트래픽만 허용
- 암호화 활성화: 노드 간 트래픽 암호화
- 최소 권한 원칙 적용: 필요한 통신만 허용하는 정책 설계
관찰성 향상
cilium hubble enable --metrics="{dns,drop,tcp,flow,http}"문제 해결
연결성 문제
# Cilium 상태 확인
cilium status
# 엔드포인트 상태 확인
cilium endpoint list
# 네트워크 정책 검토
kubectl get cnp,ccnp -A
# 흐름 분석
hubble observe --verdict DROPPED성능 문제
# eBPF 맵 상태 확인
cilium bpf maps list
# 시스템 리소스 모니터링
cilium metrics list디버깅 도구
# 상태 확인
cilium status --verbose
# 환경 정보 수집
cilium sysdump
# Cilium 에이전트 로그
kubectl logs -n kube-system -l k8s-app=cilium딥다이브 목차
- Cilium 개요 및 역사
- 컨테이너 네트워킹 기초
- CNI(Container Network Interface) 이해하기
- Cilium의 차별화 포인트
- eBPF 기술 소개 및 역사
- 커널 내 eBPF 작동 방식
- eBPF 프로그램 유형 및 맵
- Cilium에서의 eBPF 활용
- 컨테이너 네트워킹 모델 비교
- VXLAN 기술 심층 분석
- Cilium의 오버레이 네트워킹
- 성능 최적화 기법
- 라우팅 메커니즘 (Encapsulation vs Native-Routing)
- 클라우드 제공업체별 네트워킹 (AWS ENI, Google Cloud)
- IP 주소 관리(IPAM) 전략
- Kubernetes와 Cilium IPAM 통합
- 네트워크 정책 설계 및 구현
- 멀티 클러스터 시나리오
- IPAM 모드 심층 분석 (Cluster Scope, Kubernetes Host Scope, Multi-Pool)
- 클라우드 제공업체별 IPAM (Azure IPAM, AWS ENI, GKE)
- CRD 기반 IPAM
- OSI 모델 계층 이해 (L2, L3, L4, L7)
- Cilium의 계층별 기능
- 서비스 메시 통합
- 로드 밸런싱 아키텍처
- 마스커레이딩 구성 및 구현 모드
- IPv4 프래그먼트 처리
- Cilium의 보안 기능
- 네트워크 가시성 및 모니터링
- Hubble 아키텍처 및 활용
- 실시간 위협 탐지
- 성능 튜닝 및 문제 해결
- 대규모 배포 전략
- 실제 사용 사례 연구
- 미래 로드맵 및 발전 방향
추가 자료
참고 자료
퀴즈
이 섹션에서 배운 내용을 테스트하려면 Cilium 딥다이브 퀴즈를 풀어보세요.