반응형

쿠버네티스 클러스터의 핵심 인프라인 CNI 플러그인, RKE1과 RKE2에서 어떤 것을 선택해야 할까요? 각 환경에 최적화된 선택을 위한 결정적 차이점을 알아봅니다.
기본 개념: RKE1과 RKE2의 근본적 차이
RKE1과 RKE2는 네트워크 아키텍처에서 근본적인 차이를 보입니다.
| 컨테이너 런타임 | Docker | Containerd |
| 보안 기준 | 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: 다중 네트워크 인터페이스 지원
성능 벤치마크
| Cilium | 12M pps | 0.8ms | 낮음 | 높음 |
| Calico | 9M pps | 1.2ms | 중간 | 높음 |
| Canal | 7M pps | 1.8ms | 중간 | 중간 |
| Flannel | 6M pps | 2.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를 선택하세요.
반응형
'IT기술 > 쿠버네티스 (k8s)' 카테고리의 다른 글
| RKE2 NAS 스토리지와 GPU 가속 연동 완벽 가이드: 온프레미스 AI/ML 인프라 구축 (6) | 2025.07.12 |
|---|---|
| RKE2 스토리지 완벽 가이드: 로컬부터 분산 스토리지까지 모든 환경 대응 전략 (0) | 2025.07.11 |
| RKE2 보안 완벽 가이드: 기업과 정부를 위한 차세대 보안 쿠버네티스 (4) | 2025.07.10 |
| RKE2 v1.30.4 클러스터 10분 구축 가이드: AWS EC2로 프로덕션급 쿠버네티스 환경 만들기 (2) | 2025.07.08 |
| RKE2 설치 완벽 가이드: Ubuntu와 Rocky Linux 환경별 구축 방법 (6) | 2025.07.08 |