2025-05-12 9:00 AM
Kubernetes 환경에서 네트워크는 단순한 연결 이상의 중요한 역할을 합니다.
특히 대규모 마이크로서비스 아키텍처에서는 네트워크 관찰성(Observability)과 세밀한 네트워크 정책이 필수적입니다.
하지만 클라우드 제공업체의 기본 CNI(예: AWS VPC CNI)는 네트워크 연결성은 우수하지만, 고급 보안 기능이나 관찰성 측면에서는 한계를 가질 수 있습니다.
특히 이미 운영 중인 CNI를 변경하기 어려운 환경에서는, 기존 구조를 유지하면서 기능을 확장할 수 있는 접근이 필요합니다.
이 글에서는 AWS EKS 환경에서 AWS VPC CNI, Cilium, Calico를 함께 활용하는 CNI 체이닝(Chaining) 구성에 대해 살펴보겠습니다.
특히 eBPF 기술을 기반으로 한 Cilium CNI 체이닝이 어떻게 강력한 네트워크 관찰성과 보안 기능을 제공하는지 알아보겠습니다.
CNI(Container Network Interface)는 Kubernetes에서 컨테이너 네트워킹을 담당하는 표준 인터페이스입니다.
CNI 체이닝은 여러 CNI 플러그인을 순차적으로 결합하여 각 CNI의 장점을 활용하는 접근 방식입니다.
eBPF는 Linux 커널에서 안전하게 프로그램을 실행할 수 있는 혁신적인 기술입니다.
Cilium, Calico, Weave Net 등 CNI 도구는 eBPF를 활용하여 패킷 필터링, 네트워크 모니터링, 보안 정책 적용 등 다양한 기능을 제공합니다.
AWS EKS에서 멀티 CNI 아키텍처를 구현할 때 일반적으로 AWS VPC CNI를 기본으로 하고, Cilium과 Calico를 보조 CNI로 추가합니다.
이 조합은 강력하면서도 유연한 네트워크 스택을 제공합니다.
AWS VPC CNI는 EKS의 기본 네트워킹 레이어로, AWS 인프라와의 통합을 담당합니다.
Cilium은 eBPF 기술을 활용하여 네트워크 트래픽에 대한 깊은 통찰력을 제공합니다.
Calico는 강력한 네트워크 정책 집행과 고급 보안 기능을 제공합니다.
AWS EKS에서 AWS VPC CNI + Cilium + Calico 체이닝을 구현하는 단계별 과정을 살펴보겠습니다.
먼저 AWS VPC CNI 버전이 체이닝을 지원하는지 확인합니다. v1.11.2 이상을 권장합니다.
# VPC CNI 버전 확인
kubectl -n kube-system get ds aws-node -o jsonpath='{.spec.template.spec.containers[0].image}'
Cilium 설치를 위한 Helm 저장소를 추가합니다.
helm repo add cilium https://helm.cilium.io/
helm repo update
AWS VPC CNI와의 체이닝 모드로 Cilium을 설치합니다.
helm install cilium cilium/cilium --version 1.17.3 \
--namespace kube-system \
--set cni.chainingMode=aws-cni \
--set cni.exclusive=false \
--set routingMode=native \
--set enableIPv4Masquerade=false
각 옵션의 의미는 다음과 같습니다:
cni.chainingMode=aws-cni
: AWS VPC CNI와 체이닝 구성cni.exclusive=false
: 다른 CNI와 함께 사용 허용routingMode=native
: 기본 라우팅 사용enableIPv4Masquerade=false
: AWS VPC 라우팅과의 충돌 방지네트워크 관찰성을 위한 Hubble 컴포넌트를 활성화합니다.
helm upgrade cilium cilium/cilium \
--namespace kube-system \
--reuse-values \
--set hubble.enabled=true \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true \
--set "hubble.metrics.enabled={dns,drop,tcp,flow,port-distribution,icmp,http}"
이미 Cilium의 네트워크 정책으로 충분할 수 있지만, 특정 사용 사례에서는 Calico의 정책 기능이 필요할 수 있습니다.
# Calico 설치 전 operator 설정
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/tigera-operator.yaml
# 체이닝 모드로 Calico 설치
cat <<EOF | kubectl apply -f -
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
name: default
spec:
calicoNetwork:
containerIPForwarding: Enabled
ipPools: []
cni:
type: AmazonVPC
EOF
Cilium의 Hubble은 eBPF 기술을 활용하여 Kubernetes 네트워크 트래픽에 대한 깊은 통찰력을 제공합니다. 이는 서비스 간 통신 패턴을 이해하고 네트워크 문제를 신속하게 진단하는 데 매우 유용합니다.
Hubble UI에 접속하기 위한 포트포워딩을 설정합니다.
# Cilium CLI 설치
# macOS
brew install cilium-cli
# Linux
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
# Hubble UI 접속
cilium hubble port-forward &
cilium hubble ui
또는 kubectl을 사용한 방법:
kubectl -n kube-system port-forward svc/hubble-relay 4245:80 &
kubectl -n kube-system port-forward svc/hubble-ui 12000:80 &
Hubble UI는 다음과 같은 강력한 기능을 제공합니다:
CNI 체이닝은 강력한 기능을 제공하지만, 운영 환경에 적용할 때 몇 가지 중요한 고려사항이 있습니다.
eBPF는 매우 효율적이지만, 여러 CNI 레이어를 통과하는 것은 약간의 오버헤드를 발생시킬 수 있습니다:
CNI 체이닝 환경에서는 각 구성 요소의 호환성을 주의 깊게 확인해야 합니다:
CNI 설정 확인:
kubectl get cm -n kube-system cni-config -o yaml
Pod 네트워크 인터페이스 확인:
kubectl debug <pod-name> -it -- ip addr
Cilium 상태 확인:
cilium status --wait
네트워크 정책 검증:
cilium policy get
수십 또는 수백 개의 마이크로서비스가 있는 환경에서는 서비스 간 통신 패턴을 이해하는 것이 중요합니다.
Cilium Hubble은 서비스 간 의존성과 통신 패턴을 시각화하여 다음과 같은 이점을 제공합니다:
모든 통신을 명시적으로 허용해야 하는 제로 트러스트 환경에서는 CNI 체이닝이 이상적입니다:
금융, 의료 등 규제가 엄격한 산업에서는 네트워크 활동에 대한 상세한 감사 로그가 필요합니다:
EKS 환경에서 AWS VPC CNI, Cilium, Calico를 체이닝하는 아키텍처는 각 CNI의 강점을 결합합니다.
이러한 CNI 체이닝은:
을 결합하여 복잡한 마이크로서비스 환경에서도 각 CNI 만의 강점만을 사용할수 있습니다.
특히 기존 CNI를 유지해야 하는 상황에서 네트워크 기능을 고도화하고자 한다면, CNI 체이닝은 실용적이고 강력한 대안이 될 수 있습니다.
참고 자료