IT기술/쿠버네티스 (k8s)

RKE1 vs RKE2 CNI 플러그인 완벽 가이드: 쿠버네티스 네트워킹의 미래를 선택하는 방법

후스파 2025. 7. 10. 20:31
반응형

쿠버네티스 클러스터의 핵심 인프라인 CNI 플러그인, RKE1과 RKE2에서 어떤 것을 선택해야 할까요? 각 환경에 최적화된 선택을 위한 결정적 차이점을 알아봅니다.


기본 개념: RKE1과 RKE2의 근본적 차이

RKE1과 RKE2는 네트워크 아키텍처에서 근본적인 차이를 보입니다.

컨테이너 런타임DockerContainerd
보안 기준CIS 수동 설정CIS 자동 통과
CNI 관리YAML 직접 수정Helm 차트 활용
제어 평면Docker 컨테이너정적 Pod (kubelet 관리)
지원 종료2025년 7월 31일지속적 지원
레지스트리 미러링미지원완전 지원

RKE1은 2025년 7월 지원 종료 예정이므로 신규 클러스터는 RKE2 추천

아키텍처 차이점의 실질적 영향

# RKE1 CNI 설정 방식 (레거시)
# cluster.yml 파일 직접 수정
network:
  plugin: canal
  options:
    canal_iface: eth1
    canal_flannel_backend_type: vxlan

# RKE2 CNI 설정 방식 (현대적)
# HelmChartConfig 리소스 사용
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: rke2-cilium
  namespace: kube-system
spec:
  valuesContent: |-
    hubble:
      enabled: true
      ui:
        enabled: true

지원 CNI 플러그인 비교

RKE1 주요 옵션

  • Canal: Flannel + Calico 조합 (기본값)
  • Flannel: 단순 VXLAN 오버레이
  • Calico: BGP 라우팅 + 네트워크 정책
  • Weave: 자체 암호화 기능 (2024년 이후 지원 중단)

RKE2 주요 옵션

  • Canal: Flannel 기반 오버레이 (기본값)
  • Cilium: eBPF 기반 고성능 + 보안 강화
  • Calico: 엔터프라이즈급 네트워크 정책
  • Multus: 다중 네트워크 인터페이스 지원

성능 벤치마크

Cilium12M pps0.8ms낮음높음
Calico9M pps1.2ms중간높음
Canal7M pps1.8ms중간중간
Flannel6M pps2.5ms높음낮음

CNI별 상세 특징 비교

# Cilium 고급 설정 예시
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: rke2-cilium
  namespace: kube-system
spec:
  valuesContent: |-
    kubeProxyReplacement: true
    hubble:
      enabled: true
      relay:
        enabled: true
      ui:
        enabled: true
    operator:
      replicas: 2
    ipam:
      mode: kubernetes
    tunnel: vxlan
    enableIPv4Masquerade: true
    enableIdentityMark: true
# Calico 엔터프라이즈 설정 예시
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: rke2-calico
  namespace: kube-system
spec:
  valuesContent: |-
    installation:
      calicoNetwork:
        bgp: Enabled
        ipPools:
        - blockSize: 26
          cidr: 10.42.0.0/16
          encapsulation: VXLAN
          natOutgoing: Enabled
    apiServer:
      enabled: true

상황별 최적의 CNI 선택 전략

보안 강화 환경

RKE2 + Cilium: eBPF 기반 실시간 위협 탐지

# 설정 예시
# /etc/rancher/rke2/config.yaml
cni: cilium
profile: "cis"

장점:

  • L7 네트워크 정책 지원
  • API 인식 보안 필터링
  • 실시간 네트워크 관측성 (Hubble)
  • 제로 트러스트 아키텍처 구현

대규모 클라우드 네이티브

RKE2 + Calico: 10,000노드 이상 확장 지원
장점:

  • BGP를 통한 네이티브 라우팅
  • 고급 IPAM 기능
  • 다중 클러스터 관리
  • 엔터프라이즈급 정책 엔진
# Calico 대규모 클러스터 최적화
kubectl patch felixconfiguration default --type merge --patch='
{
  "spec": {
    "bpfLogLevel": "Off",
    "bpfDataIfacePattern": "^((en|wl|ww|sl|ib)[opsx].*|(eth|wlan|wwan).*)",
    "routeRefreshInterval": "90s"
  }
}'

하이브리드 인프라

RKE1 + Canal: 레거시 시스템과 호환성 우수
주의: 2025년 이후 유지보수 어려움

Edge/IoT 환경

RKE2 + Multus: 5G·WiFi 동시 연결 가능
사용 사례: 자율주행차 데이터 실시간 처리

# Multus 다중 네트워크 설정
apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
  name: macvlan-conf
spec:
  config: '{
    "cniVersion": "0.3.1",
    "type": "macvlan",
    "master": "eth1",
    "mode": "bridge",
    "ipam": {
      "type": "host-local",
      "subnet": "192.168.1.0/24",
      "rangeStart": "192.168.1.200",
      "rangeEnd": "192.168.1.250"
    }
  }'

RKE1 → RKE2 마이그레이션

단계별 마이그레이션 프로세스

# 1. 기존 CNI 확인
kubectl get daemonset -n kube-system

# 2. 현재 네트워크 정책 백업
kubectl get networkpolicies -A -o yaml > network-policies-backup.yaml

# 3. RKE2 클러스터 준비
# /etc/rancher/rke2/config.yaml
cni: cilium
cluster-cidr: "10.42.0.0/16"
service-cidr: "10.43.0.0/16"

Helm 차트 준비: RKE2용 CNI 설정 파일 생성

# /var/lib/rancher/rke2/server/manifests/cilium-config.yaml
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: rke2-cilium
  namespace: kube-system
spec:
  valuesContent: |-
    hubble:
      enabled: true
      relay:
        enabled: true
      ui:
        enabled: true
    kubeProxyReplacement: true
    k8sServiceHost: "localhost"
    k8sServicePort: "6443"

테스트 클러스터 구축: Canary 배포 방식 권장

# 1. 테스트 워크로드 배포
kubectl create deployment test-app --image=nginx:alpine
kubectl expose deployment test-app --port=80 --type=ClusterIP

# 2. 네트워크 연결성 테스트
kubectl run test-pod --image=busybox --rm -it -- sh
# 내부에서 실행
nslookup test-app.default.svc.cluster.local
wget -qO- test-app.default.svc.cluster.local

# 3. 성능 테스트
kubectl apply -f https://raw.githubusercontent.com/cilium/cilium/master/examples/kubernetes/connectivity-check/connectivity-check.yaml

트래픽 전환: 로드밸런서 단계적 교체

# 1. 트래픽 가중치 조정 (예: NGINX Ingress)
kubectl patch ingress app-ingress --type='json' -p='[
  {
    "op": "replace",
    "path": "/metadata/annotations/nginx.ingress.kubernetes.io~1canary-weight",
    "value": "10"
  }
]'

# 2. 점진적 트래픽 증가
# 10% → 25% → 50% → 100%

주의사항 & 문제 해결

일반적인 문제와 해결책

문제 원인 해결책
CNI 변경 금지 클러스터 생성 후 플러그인 교체 불가 새 클러스터 구축 후 워크로드 마이그레이션
성능 저하 네트워크 버퍼 부족 net.core.rmem_max=16777216 설정
네트워크 분할 노드 간 연결 실패 kubectl cordon → kubectl drain 절차 준수

상세 트러블슈팅

# CNI 상태 진단
kubectl get pods -n kube-system | grep -E "(cilium|calico|flannel)"

# 네트워크 정책 디버깅
kubectl describe networkpolicy -A

# Cilium 연결성 테스트
cilium connectivity test

# Calico 노드 상태 확인
kubectl exec -n calico-system calico-node-xxx -- calicoctl node status

성능 최적화 설정

# 시스템 튜닝 (모든 노드에서 실행)
echo 'net.core.rmem_max = 16777216' >> /etc/sysctl.conf
echo 'net.core.wmem_max = 16777216' >> /etc/sysctl.conf
echo 'net.core.netdev_max_backlog = 5000' >> /etc/sysctl.conf
sysctl -p

# Cilium eBPF 맵 크기 증가
kubectl patch configmap cilium-config -n kube-system --patch='
{
  "data": {
    "bpf-map-dynamic-size-ratio": "0.25",
    "bpf-policy-map-max": "65536"
  }
}'

마무리

RKE2는 Cilium의 eBPF와 Calico의 정교한 정책으로 현대적 인프라에 적합합니다. 신규 프로젝트는 반드시 RKE2를 시작점으로 삼고, 기존 RKE1 클러스터는 2025년 7월 전에 전환하세요. 첫 단계는 개발 환경에서 Cilium의 Hubble 관측 기능을 체험해보는 것입니다.
핵심 포인트:

  • RKE1 EOL 2025년 7월 31일로 인한 필수 전환
  • Cilium eBPF 기반으로 최고 성능과 보안 제공
  • Calico 엔터프라이즈급 정책 엔진으로 대규모 환경 최적화
  • Multus 다중 네트워크 지원으로 Edge/5G 환경 구축
  • Helm 차트 기반 관리로 운영 효율성 극대화

CNI 선택은 클러스터의 생명주기 전반에 영향을 미치는 중요한 결정입니다. 보안, 성능, 확장성을 종합적으로 고려하여 환경에 최적화된 CNI를 선택하세요.

반응형