Skip to content

Split View: 쿠버네티스 네트워킹의 대전환: 전문가도 놓치기 쉬운 5가지 핵심 변화

|

쿠버네티스 네트워킹의 대전환: 전문가도 놓치기 쉬운 5가지 핵심 변화

1. 도입부: 우리가 알던 쿠버네티스 네트워킹은 이제 없다

쿠버네티스 생태계의 복잡성은 운영자들에게 언제나 거대한 산과 같았습니다. 하지만 이제 그 산의 지형 자체가 바뀌고 있습니다. 최신 v1.35 버전의 등장은 단순한 기능 추가를 넘어, 지난 10년간 우리가 당연하게 여겼던 네트워킹 표준들의 종언을 고하고 있습니다.

"왜 지금 이 변화를 알아야 하는가?"라는 질문에 대한 답은 명확합니다. 과거의 유산에 안주하는 것은 곧 통제할 수 없는 기술 부채와 직결되기 때문입니다. 아키텍트의 시선으로, 현재 진행 중인 파괴적 혁신의 본질을 꿰뚫어 보아야 할 때입니다.

이 글에서 다루는 5가지 핵심 변화는 다음과 같습니다:

  1. IPVS 지원 중단과 nftables의 등장 (KEP-5495, KEP-3866)
  2. Istio Ambient Mesh로의 전환 — 사이드카 없는 서비스 메쉬
  3. 자격증 시험의 실무 100% 전환 — ICA 신설과 CKA/CKAD 변화
  4. Gateway API — Ingress를 대체하는 새로운 라우팅 표준
  5. Cilium eBPF CNI — 관측 가능성의 중심이 된 네트워크 인터페이스

2. IPVS의 퇴장과 nftables의 화려한 등장

2.1 왜 IPVS가 퇴장하는가

오랫동안 대규모 클러스터의 고성능 부하 분산을 책임졌던 IPVS(IP Virtual Server)가 **Kubernetes v1.35를 기점으로 공식 지원 중단(Deprecated)**되었습니다 (KEP-5495). 이는 단순한 세대교체가 아닌, 리눅스 커널 네트워킹 스택의 진화에 따른 필연적인 결과입니다.

kube-proxy 모드 진화 타임라인:

이벤트버전KEP
nftables 모드 Alphav1.29KEP-3866
nftables 모드 Betav1.31KEP-3866
nftables 모드 GAv1.33KEP-3866
IPVS 모드 Deprecatedv1.35KEP-5495
IPVS 모드 삭제 (예정)~v1.38KEP-5344 (논의 중)

2.2 iptables vs IPVS vs nftables 기술 비교

기존 iptables는 규칙이 증가할수록 전체 규칙을 선형 탐색해야 하는 O(N) 복잡도와, 규칙 업데이트 시마다 발생하는 **글로벌 락 병목 현상(Global lock bottleneck)**으로 인해 대규모 환경에서 성능 저하가 심각했습니다.

IPVS는 해시맵(Hashmap) 기반의 O(1) 성능으로 이를 해결했지만, 네트워킹을 위해 완전히 별개의 커널 서브시스템을 유지해야 한다는 구조적 부채를 안고 있었습니다.

nftables는 이 두 방식의 장점을 결합하여, 현대적인 통합 커널 API 내에서 유연성과 성능을 동시에 확보한 차세대 표준입니다.

구분iptables (Legacy)IPVS (Deprecated)nftables (GA)
데이터 플레인 복잡도O(N) 선형 탐색O(1) 해시맵O(1) Verdict Map
컨트롤 플레인 업데이트전체 규칙 재작성증분 업데이트변경분만 업데이트
커널 APInetfilter (레거시)별도 서브시스템통합 현대적 API
최소 커널 요구사항2.6+2.6+5.13+
IPv4/IPv6 통합별도 관리별도 관리통합 관리
K8s v1.35 상태기본값 (레거시)지원 중단권장 모드

2.3 성능 벤치마크: nftables의 압도적 우위

공식 Kubernetes 블로그에서 발표된 벤치마크에 따르면, nftables의 데이터 플레인 레이턴시는 서비스 수에 관계없이 일정하게 유지됩니다:

데이터 플레인 레이턴시 (첫 번째 패킷, p50):

서비스 수iptables 모드nftables 모드
5,000~50-100 μs~5-10 μs
10,000~100+ μs~5-10 μs
30,000~300+ μs~5-10 μs

이 차이의 핵심은 Verdict Map 자료구조에 있습니다. iptables가 서비스마다 개별 규칙 체인을 생성하는 반면, nftables는 단일 해시 테이블로 모든 서비스를 관리합니다:

iptables 방식 (서비스당 개별 규칙):

-A KUBE-SERVICES -m comment --comment "ns1/svc1:p80 cluster IP" \
  -m tcp -p tcp -d 172.30.0.41 --dport 80 -j KUBE-SVC-XPGD46QRK7WJZT7O
-A KUBE-SERVICES -m comment --comment "ns2/svc2:p443 cluster IP" \
  -m tcp -p tcp -d 172.30.0.42 --dport 443 -j KUBE-SVC-GNZBNJ2PO5MGZ6GT

nftables 방식 (단일 Verdict Map):

table ip kube-proxy {
    map service-ips {
        type ipv4_addr . inet_proto . inet_service : verdict
        elements = {
            172.30.0.41 . tcp . 80 : goto service-ns1/svc1/tcp/p80,
            172.30.0.42 . tcp . 443 : goto service-ns2/svc2/tcp/p443,
        }
    }
    chain services {
        ip daddr . meta l4proto . th dport vmap @service-ips
    }
}

2.4 실무 마이그레이션 가이드: IPVS에서 nftables로

사전 요구사항

  • Kubernetes v1.31 이상 (v1.33+ 권장 — nftables GA)
  • Linux 커널 5.13 이상 (RHEL 9+, Ubuntu 22.04+, Debian 12+)
  • Calico 사용 시: v3.30 이상
  • 유지보수 윈도우에서 수행 권장

Step 1: 현재 모드 확인

kubectl logs -n kube-system daemonset/kube-proxy | grep -i ipvs
# 기대 출력: "Using ipvs Proxier"

Step 2: kube-proxy ConfigMap 수정

kubectl edit configmap -n kube-system kube-proxy

mode: ipvsmode: nftables로 변경합니다.

또는 kubeadm 기반 클러스터의 경우, 클러스터 초기화 시 다음 설정을 사용합니다:

apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
---
kind: ClusterConfiguration
apiVersion: kubeadm.k8s.io/v1beta4
kubernetesVersion: v1.33.0
networking:
  podSubnet: '192.168.0.0/16'
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: nftables

Step 3: kube-proxy DaemonSet 재시작

kubectl rollout restart -n kube-system daemonset/kube-proxy

주의: ConfigMap 변경만으로는 적용되지 않습니다. 반드시 DaemonSet을 재시작해야 합니다.

Step 4: nftables 모드 활성화 확인

kubectl logs -n kube-system daemonset/kube-proxy | grep -i nftables

Step 5: 노드에서 nftables 규칙 확인

sudo nft list chain ip kube-proxy services

Step 6: Calico CNI 사용 시 — nftables 데이터 플레인 전환

kubectl patch installation default --type=merge \
  -p '{"spec":{"calicoNetwork":{"linuxDataplane":"Nftables"}}}'
kubectl logs -f -n calico-system daemonset/calico-node | grep -i nftables
# 기대 출력: "Parsed value for NFTablesMode: Enabled"

AKS(Azure) 클러스터의 경우

{
  "enabled": true,
  "mode": "NFTABLES"
}
az aks update \
  --resource-group <resourceGroup> \
  --name <clusterName> \
  --kube-proxy-config kube-proxy.json

2.5 마이그레이션 주의사항

항목설명
ConfigMap 변경 후 재시작 필수ConfigMap만 수정하면 적용되지 않음. 반드시 rollout restart 실행
Calico 롤링 재시작Calico 패치 시 모든 calico-node Pod가 재시작됨 — 일시적 네트워크 중단 발생
롤백 호환성nftables에서 iptables/IPVS로 롤백 시 kube-proxy v1.29+ 필요 (자동 정리 코드 포함)
localhost NodePort 동작 변경nftables 모드는 route_localnet sysctl을 활성화하지 않음
eBPF 전환 시eBPF 데이터 플레인으로 전환할 경우, kube-proxy를 iptables 모드로 먼저 변경해야 함

"IPVS 지원이 종료됨에 따라 이를 계속 사용하는 것은 단순히 구형 기술을 유지하는 문제가 아닙니다. 업스트림 지원이 줄어들면 테스트와 버그 수정이 적어지고, 이는 결국 예기치 않은 장애와 최신 기능과의 호환성 결여로 이어집니다." — From IPVS to NFTables: A Migration Guide for Kubernetes v1.35


3. "사이드카는 이제 안녕" — Istio Ambient Mesh의 혁신

3.1 사이드카 모델의 한계

서비스 메쉬의 정의와도 같았던 사이드카(Sidecar) 프록시 모델이 저물고 있습니다. 모든 파드에 Envoy 프록시를 주입하던 방식은 다음과 같은 한계에 부딪혔습니다:

  • 리소스 낭비: Pod당 ~0.20 vCPU, ~60 MB 메모리의 프록시 오버헤드
  • 복잡한 업그레이드: Envoy 버전 변경 시 모든 Pod 재시작 필요
  • 애플리케이션 수명 주기 개입: 사이드카 주입이 Pod 배포와 결합

3.2 Ambient Mode 아키텍처

Istio의 Ambient Mode는 Istio v1.24 (2024년 11월)에 GA를 달성했으며, 이러한 제약을 혁신적으로 제거합니다. 2022년 9월 발표 후 Solo.io, Google, Microsoft, Intel 등이 26개월간 공동 개발했습니다.

핵심 아키텍처 — 두 계층 분리:

계층컴포넌트역할
L4ztunnel (DaemonSet)노드 단위 공유 프록시 — mTLS, L4 인증/인가, TCP 텔레메트리
L7Waypoint Proxy (Deployment)선택적 L7 처리 — HTTP 라우팅, 트래픽 시프팅, L7 인가

ztunnel (Zero Trust Tunnel):

  • Rust 기반 경량 프록시 — 노드당 ~0.06 vCPU, ~12 MB 메모리
  • HBONE (HTTP-Based Overlay Network Environment) 프로토콜로 mTLS 터널링
  • 노드당 하나의 DaemonSet으로 동작
  • 같은 노드 내 트래픽도 ztunnel을 경유하여 균일한 정책 적용

트래픽 흐름 비교:

[L4 Only - Waypoint 없음]
Source Podztunnel(source) ──HBONE/mTLS──→ ztunnel(dest)Dest Pod

[L7 - Waypoint 사용]
Source Podztunnel(source) ──HBONE──→ Waypoint ──HBONE──→ ztunnel(dest)Dest Pod

3.3 성능 비교: Ambient vs Sidecar

레이턴시 (1KB HTTP 요청, Istio v1.24 벤치마크):

모드p90 레이턴시p99 레이턴시
Ambient (L4, ztunnel)~0.16 ms~0.20 ms
Ambient (L7, Waypoint)~0.40 ms~0.50 ms
Sidecar~0.63 ms~0.88 ms

리소스 사용량 (1,000 req/s, 1KB 페이로드):

컴포넌트CPU메모리
Sidecar (Pod당 Envoy)~0.20 vCPU~60 MB
Waypoint (L7 Envoy)~0.25 vCPU~60 MB
ztunnel (노드당)~0.06 vCPU~12 MB

실제 절감 효과:

  • Ambient 모드 전환 시 CPU 73% 감소 (Solo.io 측정)
  • 네임스페이스당 약 1.3 CPU 코어 절약
  • 일부 사용 사례에서 90%+ 오버헤드 감소
  • 한 사용자는 AWS App Mesh에서 전환 후 컨테이너 수 45% 감소 달성

3.4 실무 배포 가이드

사전 요구사항

# Gateway API CRDs 설치
kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
  kubectl apply --server-side -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.0/experimental-install.yaml

방법 1: istioctl (빠른 시작)

istioctl install --set profile=ambient --skip-confirmation

방법 2: Helm (프로덕션 권장)

# 1. Base 차트 설치
helm install istio-base istio/base -n istio-system --create-namespace --wait

# 2. istiod (컨트롤 플레인) 설치
helm install istiod istio/istiod -n istio-system --set profile=ambient --wait

# 3. CNI 에이전트 설치
helm install istio-cni istio/cni -n istio-system --set profile=ambient --wait

# 4. ztunnel DaemonSet 설치
helm install ztunnel istio/ztunnel -n istio-system --wait

워크로드를 메쉬에 등록

# 네임스페이스 단위 등록 — Pod 재시작 불필요!
kubectl label namespace default istio.io/dataplane-mode=ambient

# 개별 Pod 제외
kubectl label pod <pod-name> istio.io/dataplane-mode=none

Waypoint 프록시 배포 (L7 기능 필요 시)

# 네임스페이스에 Waypoint 배포
istioctl waypoint apply -n default --enroll-namespace

# 서비스별 Waypoint 배포
istioctl waypoint apply -n default --name reviews-svc-waypoint
kubectl label service reviews istio.io/use-waypoint=reviews-svc-waypoint

Waypoint Gateway API YAML 예시:

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  labels:
    istio.io/waypoint-for: service
  name: waypoint
  namespace: default
spec:
  gatewayClassName: istio-waypoint
  listeners:
    - name: mesh
      port: 15008
      protocol: HBONE

3.5 Ambient vs Sidecar: 언제 무엇을 선택할 것인가

상황권장 모드
L4 제로 트러스트 암호화만 필요Ambient
리소스 제약이 있는 환경Ambient
Pod 재시작이 어려운 운영 환경Ambient (재시작 불필요)
점진적 L7 기능 도입Ambient (Waypoint 선택적 배포)
멀티 클러스터/멀티 네트워크Sidecar (Ambient 지원 개발 중)
VM 워크로드Sidecar (Ambient VM 지원 개발 중)
Pod 단위 최대 보안 격리Sidecar

4. 자격증 시험의 진화: 이론보다 무서운 '실무 100%'의 시대

기술의 변화는 자격증 트렌드에도 즉각 반영되고 있습니다. CKA와 CKAD는 이미 실무 중심(Performance-based) 시험으로 완전히 자리 잡았습니다.

4.1 CKA (Certified Kubernetes Administrator)

도메인배점
장애 조치 (Troubleshooting)30%
클러스터 아키텍처, 설치 및 구성25%
서비스 및 네트워킹20%
워크로드 및 스케줄링15%
스토리지10%

4.2 CKAD (Certified Kubernetes Application Developer)

도메인배점
애플리케이션 환경, 구성 및 보안25%
서비스 및 네트워킹20%
애플리케이션 설계 및 구축20%
애플리케이션 배포20%
애플리케이션 관측성 및 유지보수15%

4.3 ICA (Istio Certified Associate) — 신설 자격증

특히 주목할 변화는 **ICA(Istio Certified Associate)**의 등장입니다. 이는 단순한 자격증 추가가 아니라, Ambient Mesh와 같은 사이드카 없는 아키텍처로의 전환에 필요한 기초 지식을 검증하기 위한 필수 관문으로 설계되었습니다.

2025년 8월 12일 업데이트된 ICA 시험 도메인:

도메인배점핵심 역량
Traffic Management35%VirtualService, DestinationRule, Gateway, ServiceEntry, 트래픽 시프팅, Circuit Breaking, Failover
Securing Workloads25%mTLS, PeerAuthentication, AuthorizationPolicy, JWT 인증
Installation & Configuration20%istioctl/Helm 설치, Sidecar/Ambient 모드 배포, 카나리/In-place 업그레이드
Troubleshooting20%컨트롤 플레인 진단, 데이터 플레인 진단, 설정 이슈 해결

시험 상세 정보:

항목내용
Istio 버전v1.26
시험 시간2시간
형식온라인 프록터, 15-20개 실무 태스크
합격 기준68%
비용$250 (무료 재시험 1회 포함)
참조 가능 자료Istio 공식 문서, Istio Blog, Kubernetes 문서

합격 팁: 태스크당 약 6-8분이 주어집니다. 익숙한 태스크부터 해결하여 점수를 확보하고, VirtualService/DestinationRule/AuthorizationPolicy 설정에 대한 실습이 핵심입니다. 2-3개월의 실무 경험을 권장합니다.


5. Ingress를 넘어선 Gateway API: 새로운 라우팅 표준

5.1 Ingress의 한계

기존의 Ingress는 L4 프로토콜 지원이 부족하여 NGINX의 ConfigMap이나 복잡한 주석(Annotation)을 활용한 해킹에 의존해야 했습니다. Gateway API는 이러한 한계를 극복하고 트래픽 관리를 선언적이고 구조적인 방식으로 진화시켰습니다.

Gateway API는 v1.0 (2023년 10월)에 GA를 달성했으며, 최신 v1.4 (2025년 11월)까지 지속 발전 중입니다.

5.2 역할 기반 리소스 분리 (Role-Oriented Design)

Gateway API의 가장 혁신적인 특징은 역할별 리소스 분리입니다:

역할관리 리소스책임
인프라 제공자 (Ian)GatewayClass기반 구현 정의 (Envoy, AWS NLB 등), 클러스터 범위
클러스터 운영자 (Chihiro)Gateway로드밸런서 인스턴스화, 리스너/TLS 설정, 네임스페이스 접근 제어
애플리케이션 개발자 (Ana)HTTPRoute / GRPCRoute서비스 라우팅 규칙 정의 (경로, 헤더, 가중치)

5.3 핵심 리소스 가이드

리소스범위안정성설명
GatewayClass클러스터GA (v1)Gateway 집합의 공통 구성 정의. IngressClass와 유사
Gateway네임스페이스GA (v1)트래픽 수신 방법 정의 (주소, 리스너, TLS)
HTTPRoute네임스페이스GA (v1)HTTP/HTTPS 트래픽 라우팅 (호스트, 경로, 헤더)
GRPCRoute네임스페이스GA (v1.1+)gRPC 트래픽 전용 라우팅
TCPRoute네임스페이스ExperimentalL4 TCP 포트 매핑
UDPRoute네임스페이스ExperimentalL4 UDP 포트 매핑
TLSRoute네임스페이스ExperimentalSNI 기반 TLS 연결 멀티플렉싱

리소스 관계: GatewayClass → Gateway → Routes → Services

5.4 실전 YAML 예시

카나리 배포 — 트래픽 분할 (90/10)

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: canary-split
spec:
  parentRefs:
    - name: production-gateway
  hostnames:
    - 'app.example.com'
  rules:
    - backendRefs:
        - name: app-v1
          port: 8080
          weight: 90
        - name: app-v2
          port: 8080
          weight: 10

A/B 테스트 — 헤더 기반 라우팅

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: ab-testing
spec:
  parentRefs:
    - name: main-gateway
  hostnames:
    - 'api.example.com'
  rules:
    # X-API-Version: v2 헤더가 있는 요청 → v2로 라우팅
    - matches:
        - headers:
            - name: X-API-Version
              value: 'v2'
      backendRefs:
        - name: api-v2
          port: 8080
    # 기본 요청 → v1로 라우팅
    - backendRefs:
        - name: api-v1
          port: 8080

테스트 트래픽 + 프로덕션 분할 결합

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: combined-routing
spec:
  parentRefs:
    - name: production-gateway
  hostnames:
    - 'app.example.com'
  rules:
    # traffic: test 헤더 → v2로 직접 라우팅
    - matches:
        - headers:
            - name: traffic
              value: test
      backendRefs:
        - name: app-v2
          port: 8080
    # 프로덕션 트래픽 → 90/10 분할
    - backendRefs:
        - name: app-stable
          port: 8080
          weight: 90
        - name: app-canary
          port: 8080
          weight: 10

5.5 Ingress에서 Gateway API로 마이그레이션

ingress2gateway 도구를 활용한 자동 변환:

# 도구 설치
go install github.com/kubernetes-sigs/ingress2gateway@latest

# 기존 Ingress 리소스를 Gateway API로 변환
ingress2gateway print

마이그레이션 전략:

  1. Gateway API CRDs 설치
  2. Gateway API 구현체 선택 (Istio, Envoy Gateway, NGINX Gateway Fabric 등)
  3. ingress2gateway로 기존 Ingress 자동 변환
  4. Gateway API와 Ingress를 병행 운영하여 검증
  5. 트래픽 전환 후 기존 Ingress 제거

6. CNI는 이제 단순한 '파이프'가 아니다: 관측 가능성의 중심

6.1 Cilium: eBPF 기반의 차세대 CNI

CNI(Container Network Interface)는 이제 파드 간의 IP를 연결하는 단순한 파이프 역할을 넘어섰습니다. eBPF 기술을 기반으로 하는 Cilium은 네트워킹, 보안, 그리고 관측 가능성(Observability)을 하나로 통합합니다.

Cilium의 kube-proxy 대체 — eBPF로 완전 교체:

helm install cilium cilium/cilium --version 1.19.1 \
   --namespace kube-system \
   --set kubeProxyReplacement=true \
   --set k8sServiceHost=${API_SERVER_IP} \
   --set k8sServicePort=${API_SERVER_PORT}

지원 서비스 타입: ClusterIP, NodePort, LoadBalancer, externalIPs, hostPort

로드 밸런싱 알고리즘:

  • Random (기본): 무작위 백엔드 선택
  • Maglev: 일관된 해싱 — 백엔드 변경 시 최소 중단 (loadBalancer.algorithm=maglev)

포워딩 모드:

  • SNAT (기본): 표준 소스 NAT
  • DSR (Direct Server Return): 백엔드가 클라이언트에 직접 응답 — 추가 홉 제거
  • Hybrid: TCP는 DSR, UDP는 SNAT

6.2 Hubble: 블랙박스 네트워크의 시각화

Cilium의 Hubble은 블랙박스 같았던 네트워크 내부를 L7 트래픽 수준까지 시각화합니다:

컴포넌트역할
Hubble (per-node)각 노드에서 실행, Unix Domain Socket으로 로컬 플로우 제공
Hubble Relay클러스터 전체 또는 멀티 클러스터 플로우 집계
Hubble CLI커맨드라인 플로우 쿼리 및 필터링
Hubble UI웹 인터페이스 — 서비스 의존성 맵, 플로우 필터링 시각화

모니터링 범위:

  • L3/L4: 소스/목적지 IP, 포트, TCP 연결 상태, DNS 해석 문제, 연결 타임아웃
  • L7: HTTP 요청/응답 (메서드, 경로, 상태 코드), Kafka 토픽, gRPC 호출, DNS 쿼리
  • 암호화된 트래픽 필터링 지원
  • 자동 서비스 의존성 그래프 발견

Hubble 활성화 설치:

helm install cilium cilium/cilium --version 1.19.1 \
   --namespace kube-system \
   --set kubeProxyReplacement=true \
   --set k8sServiceHost=${API_SERVER_IP} \
   --set k8sServicePort=${API_SERVER_PORT} \
   --set hubble.enabled=true \
   --set hubble.relay.enabled=true \
   --set hubble.ui.enabled=true

6.3 Cilium의 핵심 보안 기능

NetworkPolicy 강화:

  • Kubernetes 표준 NetworkPolicy + Cilium 전용 CiliumNetworkPolicy / CiliumClusterwideNetworkPolicy
  • L3, L4, L7 수준의 정책 적용 (예: GET /api/v1/users만 허용)
  • IP 기반이 아닌 Identity 기반 정책 — Pod 변경에도 안정적

Transparent Encryption (3가지 옵션):

방식설명
IPsec모든 Cilium 관리 엔드포인트 간 트래픽 암호화
WireGuard기본: Pod-to-Pod. 옵션: Node-to-Node, Pod-to-Node
Ztunnel (Beta)사이드카 없이 TCP 연결의 투명 암호화 및 인증

6.4 CNI 비교: Flannel vs Calico vs Cilium

기능FlannelCalicoCilium
데이터 플레인VXLAN / host-gwiptables 또는 eBPFeBPF (네이티브)
NetworkPolicy미지원L3/L4L3/L4/L7
kube-proxy 대체불가불가가능 (eBPF)
암호화미지원WireGuardIPsec, WireGuard, Ztunnel
관측성없음기본 플로우 로그Hubble (L3-L7)
BGP미지원네이티브지원 (v1.10+)
멀티 클러스터미지원FederationCluster Mesh
리소스 사용량매우 낮음낮음-중간중간-높음
복잡도매우 낮음중간높음

선택 가이드:

  • Flannel: 소규모 개발/테스트 클러스터, NetworkPolicy 불필요 시
  • Calico: BGP 피어링이 필요한 온프레미스/하이브리드 환경, 안정적인 L3/L4 정책
  • Cilium: 대규모 고성능 환경, L7 정책/관측성 필요, kube-proxy 제거 원할 때

6.5 CNI 마이그레이션 팁: Calico에서 Cilium으로

여기서 아키텍트가 놓치지 말아야 할 핵심 포인트가 있습니다. Calico에서 Cilium으로 라이브 마이그레이션할 경우, 반드시 legacy routing 모드를 활성화해야 합니다:

# Cilium 마이그레이션 Helm 값
ipam:
  mode: 'cluster-pool'
  operator:
    clusterPoolIPv4PodCIDRList: ['10.245.0.0/16'] # Calico와 다른 CIDR
cni:
  customConf: true
  uninstall: false
policyEnforcementMode: 'never' # 마이그레이션 중 정책 비활성화
bpf:
  hostLegacyRouting: true # 핵심! Linux 라우팅 스택 사용
tunnelPort: 8473 # Calico 기본 포트(8472)와 다른 포트

마이그레이션 프로세스 (노드 단위):

  1. Cilium을 보조 모드로 설치 (CNI 관리 없이)
  2. 각 노드별: cordon → drain → Cilium 라벨 지정 → Cilium 에이전트 재시작 → 리부트
  3. 각 노드에서 새 Cilium CIDR의 Pod 확인
  4. 전체 마이그레이션 완료 후: 정책 활성화, Calico 제거, iptables 규칙 정리 (리부트 시 자동)

"적절한 CNI 플러그인을 선택하는 것은 단순한 연결 방식의 문제가 아닙니다. 이는 클러스터의 전체적인 성능, 보안 태세, 그리고 운영의 복잡성을 결정짓는 가장 중대한 아키텍처적 결정입니다." — Comparing Kubernetes CNI Plugins: Calico, Cilium, Flannel, and Weave


7. 결론: 다음 세대의 쿠버네티스를 준비하는 자세

쿠버네티스 네트워킹은 거대한 전환기를 지나고 있습니다:

영역BeforeAfter
kube-proxyiptables/IPVSnftables (GA v1.33)
서비스 메쉬Sidecar ProxyAmbient Mode (GA Istio 1.24)
인그레스Ingress + AnnotationGateway API (GA v1.0+)
CNI단순 네트워킹eBPF 기반 통합 플랫폼 (Cilium)

이러한 변화의 종착역은 결국 성능 최적화와 운영 효율성을 통한 **운영 우수성(Operational Excellence)**의 확보입니다.

변화는 이미 시작되었고, 유예 기간은 생각보다 짧습니다. 당신의 클러스터는 IPVS의 퇴장에 대비가 되어 있습니까? 지금이 바로 미래지향적인 아키텍처로의 전환을 결정해야 할 골든타임입니다.


References

The Great Shift in Kubernetes Networking: 5 Critical Changes Even Experts Easily Overlook

1. Introduction: The Kubernetes Networking We Knew Is Gone

The complexity of the Kubernetes ecosystem has always loomed like a towering mountain for operators. But now, the very terrain of that mountain is shifting. The arrival of the latest v1.35 release goes beyond mere feature additions — it signals the end of networking standards we took for granted over the past decade.

The answer to "Why should we care about these changes now?" is clear: clinging to legacy approaches leads directly to uncontrollable technical debt. From an architect's perspective, it is time to see through the essence of the disruptive innovations currently underway.

The five critical changes covered in this article are:

  1. IPVS Deprecation and the Rise of nftables (KEP-5495, KEP-3866)
  2. Transition to Istio Ambient Mesh — Service mesh without sidecars
  3. Certification Exams Go 100% Hands-On — Introduction of ICA and changes to CKA/CKAD
  4. Gateway API — The new routing standard replacing Ingress
  5. Cilium eBPF CNI — The network interface that became the center of observability

2. The Departure of IPVS and the Grand Entrance of nftables

2.1 Why Is IPVS Being Retired?

IPVS (IP Virtual Server), long responsible for high-performance load balancing in large-scale clusters, has been officially deprecated as of Kubernetes v1.35 (KEP-5495). This is not a simple generational shift but an inevitable consequence of the evolution of the Linux kernel networking stack.

kube-proxy Mode Evolution Timeline:

EventVersionKEP
nftables mode Alphav1.29KEP-3866
nftables mode Betav1.31KEP-3866
nftables mode GAv1.33KEP-3866
IPVS mode Deprecatedv1.35KEP-5495
IPVS mode Removal (planned)~v1.38KEP-5344 (under discussion)

2.2 Technical Comparison: iptables vs IPVS vs nftables

Legacy iptables suffered severe performance degradation in large-scale environments due to its O(N) complexity — requiring linear traversal of all rules as the rule count grew — and the global lock bottleneck that occurred with every rule update.

IPVS solved this with hashmap-based O(1) performance, but it carried the structural debt of maintaining an entirely separate kernel subsystem for networking.

nftables combines the strengths of both approaches, delivering flexibility and performance simultaneously within a modern, unified kernel API as the next-generation standard.

Categoryiptables (Legacy)IPVS (Deprecated)nftables (GA)
Data Plane ComplexityO(N) linear traversalO(1) hashmapO(1) Verdict Map
Control Plane UpdatesFull rule rewriteIncremental updatesDelta-only updates
Kernel APInetfilter (legacy)Separate subsystemUnified modern API
Minimum Kernel Required2.6+2.6+5.13+
IPv4/IPv6 HandlingSeparate managementSeparate managementUnified management
K8s v1.35 StatusDefault (legacy)DeprecatedRecommended mode

2.3 Performance Benchmarks: The Overwhelming Advantage of nftables

According to benchmarks published on the official Kubernetes blog, nftables data plane latency remains constant regardless of the number of services:

Data Plane Latency (first packet, p50):

Service Countiptables modenftables mode
5,000~50-100 us~5-10 us
10,000~100+ us~5-10 us
30,000~300+ us~5-10 us

The key to this difference lies in the Verdict Map data structure. While iptables creates individual rule chains per service, nftables manages all services through a single hash table:

iptables approach (individual rules per service):

-A KUBE-SERVICES -m comment --comment "ns1/svc1:p80 cluster IP" \
  -m tcp -p tcp -d 172.30.0.41 --dport 80 -j KUBE-SVC-XPGD46QRK7WJZT7O
-A KUBE-SERVICES -m comment --comment "ns2/svc2:p443 cluster IP" \
  -m tcp -p tcp -d 172.30.0.42 --dport 443 -j KUBE-SVC-GNZBNJ2PO5MGZ6GT

nftables approach (single Verdict Map):

table ip kube-proxy {
    map service-ips {
        type ipv4_addr . inet_proto . inet_service : verdict
        elements = {
            172.30.0.41 . tcp . 80 : goto service-ns1/svc1/tcp/p80,
            172.30.0.42 . tcp . 443 : goto service-ns2/svc2/tcp/p443,
        }
    }
    chain services {
        ip daddr . meta l4proto . th dport vmap @service-ips
    }
}

2.4 Practical Migration Guide: From IPVS to nftables

Prerequisites

  • Kubernetes v1.31 or later (v1.33+ recommended — nftables GA)
  • Linux kernel 5.13 or later (RHEL 9+, Ubuntu 22.04+, Debian 12+)
  • If using Calico: v3.30 or later
  • Recommended to perform during a maintenance window

Step 1: Check Current Mode

kubectl logs -n kube-system daemonset/kube-proxy | grep -i ipvs
# Expected output: "Using ipvs Proxier"

Step 2: Modify the kube-proxy ConfigMap

kubectl edit configmap -n kube-system kube-proxy

Change mode: ipvs to mode: nftables.

Or for kubeadm-based clusters, use the following configuration during cluster initialization:

apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
---
kind: ClusterConfiguration
apiVersion: kubeadm.k8s.io/v1beta4
kubernetesVersion: v1.33.0
networking:
  podSubnet: '192.168.0.0/16'
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: nftables

Step 3: Restart the kube-proxy DaemonSet

kubectl rollout restart -n kube-system daemonset/kube-proxy

Note: Changing the ConfigMap alone does not apply the changes. You must restart the DaemonSet.

Step 4: Verify nftables Mode Activation

kubectl logs -n kube-system daemonset/kube-proxy | grep -i nftables

Step 5: Verify nftables Rules on the Node

sudo nft list chain ip kube-proxy services

Step 6: If Using Calico CNI — Switch to nftables Data Plane

kubectl patch installation default --type=merge \
  -p '{"spec":{"calicoNetwork":{"linuxDataplane":"Nftables"}}}'
kubectl logs -f -n calico-system daemonset/calico-node | grep -i nftables
# Expected output: "Parsed value for NFTablesMode: Enabled"

For AKS (Azure) Clusters

{
  "enabled": true,
  "mode": "NFTABLES"
}
az aks update \
  --resource-group <resourceGroup> \
  --name <clusterName> \
  --kube-proxy-config kube-proxy.json

2.5 Migration Considerations

ItemDescription
Restart required after ConfigMap changeConfigMap changes alone are not applied. You must run rollout restart
Calico rolling restartPatching Calico triggers a restart of all calico-node Pods — temporary network disruption
Rollback compatibilityRolling back from nftables to iptables/IPVS requires kube-proxy v1.29+ (includes auto-cleanup code)
localhost NodePort behavior changenftables mode does not enable the route_localnet sysctl
When switching to eBPFWhen migrating to the eBPF data plane, kube-proxy must first be changed to iptables mode

"With IPVS support ending, continuing to use it is not simply a matter of maintaining legacy technology. As upstream support diminishes, testing and bug fixes decrease, ultimately leading to unexpected failures and incompatibility with the latest features." — From IPVS to NFTables: A Migration Guide for Kubernetes v1.35


3. "Goodbye Sidecars" — The Innovation of Istio Ambient Mesh

3.1 The Limitations of the Sidecar Model

The sidecar proxy model, once synonymous with the very definition of service mesh, is fading. The approach of injecting an Envoy proxy into every pod hit the following limitations:

  • Resource waste: Proxy overhead of ~0.20 vCPU, ~60 MB memory per Pod
  • Complex upgrades: All Pods must be restarted when changing the Envoy version
  • Application lifecycle interference: Sidecar injection is coupled with Pod deployment

3.2 Ambient Mode Architecture

Istio's Ambient Mode reached GA with Istio v1.24 (November 2024), innovatively eliminating these constraints. After its announcement in September 2022, Solo.io, Google, Microsoft, Intel, and others co-developed it over 26 months.

Core Architecture — Two-Layer Separation:

LayerComponentRole
L4ztunnel (DaemonSet)Shared per-node proxy — mTLS, L4 auth/authz, TCP telemetry
L7Waypoint Proxy (Deployment)Optional L7 processing — HTTP routing, traffic shifting, L7 authz

ztunnel (Zero Trust Tunnel):

  • Rust-based lightweight proxy — ~0.06 vCPU, ~12 MB memory per node
  • mTLS tunneling via HBONE (HTTP-Based Overlay Network Environment) protocol
  • Operates as a single DaemonSet per node
  • Even intra-node traffic passes through ztunnel for uniform policy enforcement

Traffic Flow Comparison:

[L4 Only - No Waypoint]
Source Pod -> ztunnel(source) --HBONE/mTLS--> ztunnel(dest) -> Dest Pod

[L7 - With Waypoint]
Source Pod -> ztunnel(source) --HBONE--> Waypoint --HBONE--> ztunnel(dest) -> Dest Pod

3.3 Performance Comparison: Ambient vs Sidecar

Latency (1KB HTTP request, Istio v1.24 benchmark):

Modep90 Latencyp99 Latency
Ambient (L4, ztunnel)~0.16 ms~0.20 ms
Ambient (L7, Waypoint)~0.40 ms~0.50 ms
Sidecar~0.63 ms~0.88 ms

Resource Usage (1,000 req/s, 1KB payload):

ComponentCPUMemory
Sidecar (Envoy per Pod)~0.20 vCPU~60 MB
Waypoint (L7 Envoy)~0.25 vCPU~60 MB
ztunnel (per node)~0.06 vCPU~12 MB

Actual Savings:

  • Switching to Ambient mode yields 73% CPU reduction (measured by Solo.io)
  • Approximately 1.3 CPU cores saved per namespace
  • Over 90% overhead reduction in some use cases
  • One user achieved a 45% reduction in container count after migrating from AWS App Mesh

3.4 Practical Deployment Guide

Prerequisites

# Install Gateway API CRDs
kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
  kubectl apply --server-side -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.0/experimental-install.yaml

Method 1: istioctl (Quick Start)

istioctl install --set profile=ambient --skip-confirmation
# 1. Install Base chart
helm install istio-base istio/base -n istio-system --create-namespace --wait

# 2. Install istiod (control plane)
helm install istiod istio/istiod -n istio-system --set profile=ambient --wait

# 3. Install CNI agent
helm install istio-cni istio/cni -n istio-system --set profile=ambient --wait

# 4. Install ztunnel DaemonSet
helm install ztunnel istio/ztunnel -n istio-system --wait

Enrolling Workloads in the Mesh

# Namespace-level enrollment — No Pod restart required!
kubectl label namespace default istio.io/dataplane-mode=ambient

# Exclude individual Pods
kubectl label pod <pod-name> istio.io/dataplane-mode=none

Deploying a Waypoint Proxy (When L7 Features Are Needed)

# Deploy a Waypoint to a namespace
istioctl waypoint apply -n default --enroll-namespace

# Deploy a per-service Waypoint
istioctl waypoint apply -n default --name reviews-svc-waypoint
kubectl label service reviews istio.io/use-waypoint=reviews-svc-waypoint

Waypoint Gateway API YAML Example:

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  labels:
    istio.io/waypoint-for: service
  name: waypoint
  namespace: default
spec:
  gatewayClassName: istio-waypoint
  listeners:
    - name: mesh
      port: 15008
      protocol: HBONE

3.5 Ambient vs Sidecar: When to Choose What

ScenarioRecommended Mode
Only L4 zero-trust encryption neededAmbient
Resource-constrained environmentsAmbient
Production environments where Pod restarts are difficultAmbient (no restart needed)
Gradual L7 feature adoptionAmbient (selective Waypoint deployment)
Multi-cluster / multi-networkSidecar (Ambient support in development)
VM workloadsSidecar (Ambient VM support in development)
Maximum per-Pod security isolationSidecar

4. The Evolution of Certification Exams: The Era of 100% Hands-On, More Demanding Than Theory

Changes in technology are immediately reflected in certification trends. CKA and CKAD have already fully established themselves as performance-based exams.

4.1 CKA (Certified Kubernetes Administrator)

DomainWeight
Troubleshooting30%
Cluster Architecture, Installation & Configuration25%
Services & Networking20%
Workloads & Scheduling15%
Storage10%

4.2 CKAD (Certified Kubernetes Application Developer)

DomainWeight
Application Environment, Configuration & Security25%
Services & Networking20%
Application Design & Build20%
Application Deployment20%
Application Observability & Maintenance15%

4.3 ICA (Istio Certified Associate) — New Certification

A particularly noteworthy change is the emergence of the ICA (Istio Certified Associate). This is not merely an additional certification — it is designed as an essential gateway to validate the foundational knowledge needed for transitioning to sidecar-free architectures like Ambient Mesh.

ICA Exam Domains (Updated August 12, 2025):

DomainWeightKey Competencies
Traffic Management35%VirtualService, DestinationRule, Gateway, ServiceEntry, traffic shifting, Circuit Breaking, Failover
Securing Workloads25%mTLS, PeerAuthentication, AuthorizationPolicy, JWT authentication
Installation & Configuration20%istioctl/Helm installation, Sidecar/Ambient mode deployment, canary/in-place upgrades
Troubleshooting20%Control plane diagnostics, data plane diagnostics, configuration issue resolution

Exam Details:

ItemDetails
Istio Versionv1.26
Exam Duration2 hours
FormatOnline proctored, 15-20 hands-on tasks
Passing Score68%
Cost$250 (includes 1 free retake)
Allowed ReferencesIstio official docs, Istio Blog, Kubernetes docs

Passing Tip: You have approximately 6-8 minutes per task. Secure points by solving familiar tasks first, and hands-on practice with VirtualService/DestinationRule/AuthorizationPolicy configuration is essential. 2-3 months of hands-on experience is recommended.


5. Beyond Ingress: Gateway API as the New Routing Standard

5.1 The Limitations of Ingress

Legacy Ingress lacked L4 protocol support, forcing reliance on NGINX ConfigMaps or complex annotations as workarounds. Gateway API overcomes these limitations and evolves traffic management into a declarative, structured approach.

Gateway API reached GA with v1.0 (October 2023) and continues to evolve through the latest v1.4 (November 2025).

5.2 Role-Oriented Resource Separation (Role-Oriented Design)

The most innovative feature of Gateway API is its role-based resource separation:

RoleManaged ResourceResponsibility
Infrastructure Provider (Ian)GatewayClassDefines underlying implementation (Envoy, AWS NLB, etc.), cluster scope
Cluster Operator (Chihiro)GatewayInstantiates load balancer, listener/TLS config, namespace access control
Application Developer (Ana)HTTPRoute / GRPCRouteDefines service routing rules (paths, headers, weights)

5.3 Core Resource Guide

ResourceScopeStabilityDescription
GatewayClassClusterGA (v1)Defines common configuration for a set of Gateways. Similar to IngressClass
GatewayNamespaceGA (v1)Defines how traffic is received (addresses, listeners, TLS)
HTTPRouteNamespaceGA (v1)HTTP/HTTPS traffic routing (hosts, paths, headers)
GRPCRouteNamespaceGA (v1.1+)Dedicated gRPC traffic routing
TCPRouteNamespaceExperimentalL4 TCP port mapping
UDPRouteNamespaceExperimentalL4 UDP port mapping
TLSRouteNamespaceExperimentalSNI-based TLS connection multiplexing

Resource Relationships: GatewayClass -> Gateway -> Routes -> Services

5.4 Practical YAML Examples

Canary Deployment — Traffic Split (90/10)

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: canary-split
spec:
  parentRefs:
    - name: production-gateway
  hostnames:
    - 'app.example.com'
  rules:
    - backendRefs:
        - name: app-v1
          port: 8080
          weight: 90
        - name: app-v2
          port: 8080
          weight: 10

A/B Testing — Header-Based Routing

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: ab-testing
spec:
  parentRefs:
    - name: main-gateway
  hostnames:
    - 'api.example.com'
  rules:
    # Requests with X-API-Version: v2 header -> route to v2
    - matches:
        - headers:
            - name: X-API-Version
              value: 'v2'
      backendRefs:
        - name: api-v2
          port: 8080
    # Default requests -> route to v1
    - backendRefs:
        - name: api-v1
          port: 8080

Combined Test Traffic + Production Split

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: combined-routing
spec:
  parentRefs:
    - name: production-gateway
  hostnames:
    - 'app.example.com'
  rules:
    # traffic: test header -> route directly to v2
    - matches:
        - headers:
            - name: traffic
              value: test
      backendRefs:
        - name: app-v2
          port: 8080
    # Production traffic -> 90/10 split
    - backendRefs:
        - name: app-stable
          port: 8080
          weight: 90
        - name: app-canary
          port: 8080
          weight: 10

5.5 Migrating from Ingress to Gateway API

Automated conversion using the ingress2gateway tool:

# Install the tool
go install github.com/kubernetes-sigs/ingress2gateway@latest

# Convert existing Ingress resources to Gateway API
ingress2gateway print

Migration Strategy:

  1. Install Gateway API CRDs
  2. Choose a Gateway API implementation (Istio, Envoy Gateway, NGINX Gateway Fabric, etc.)
  3. Auto-convert existing Ingress resources with ingress2gateway
  4. Run Gateway API and Ingress in parallel for validation
  5. Remove the existing Ingress after traffic switchover

6. CNI Is No Longer Just a "Pipe": The Center of Observability

6.1 Cilium: The Next-Generation eBPF-Based CNI

CNI (Container Network Interface) has moved beyond its simple role of connecting IPs between pods. Cilium, built on eBPF technology, unifies networking, security, and observability into a single platform.

Cilium Replacing kube-proxy — Full Replacement with eBPF:

helm install cilium cilium/cilium --version 1.19.1 \
   --namespace kube-system \
   --set kubeProxyReplacement=true \
   --set k8sServiceHost=${API_SERVER_IP} \
   --set k8sServicePort=${API_SERVER_PORT}

Supported Service Types: ClusterIP, NodePort, LoadBalancer, externalIPs, hostPort

Load Balancing Algorithms:

  • Random (default): Random backend selection
  • Maglev: Consistent hashing — minimal disruption on backend changes (loadBalancer.algorithm=maglev)

Forwarding Modes:

  • SNAT (default): Standard Source NAT
  • DSR (Direct Server Return): Backend responds directly to client — eliminates extra hops
  • Hybrid: DSR for TCP, SNAT for UDP

6.2 Hubble: Visualizing the Black Box Network

Cilium's Hubble brings visibility into what was once a black-box network, down to the L7 traffic level:

ComponentRole
Hubble (per-node)Runs on each node, provides local flows via Unix Domain Socket
Hubble RelayAggregates flows across the entire cluster or multi-cluster
Hubble CLICommand-line flow querying and filtering
Hubble UIWeb interface — service dependency maps, flow filtering visualization

Monitoring Scope:

  • L3/L4: Source/destination IP, ports, TCP connection state, DNS resolution issues, connection timeouts
  • L7: HTTP requests/responses (method, path, status code), Kafka topics, gRPC calls, DNS queries
  • Encrypted traffic filtering support
  • Automatic service dependency graph discovery

Hubble-Enabled Installation:

helm install cilium cilium/cilium --version 1.19.1 \
   --namespace kube-system \
   --set kubeProxyReplacement=true \
   --set k8sServiceHost=${API_SERVER_IP} \
   --set k8sServicePort=${API_SERVER_PORT} \
   --set hubble.enabled=true \
   --set hubble.relay.enabled=true \
   --set hubble.ui.enabled=true

6.3 Core Security Features of Cilium

Enhanced NetworkPolicy:

  • Kubernetes standard NetworkPolicy + Cilium-specific CiliumNetworkPolicy / CiliumClusterwideNetworkPolicy
  • L3, L4, L7 level policy enforcement (e.g., allow only GET /api/v1/users)
  • Identity-based policies instead of IP-based — stable even when Pods change

Transparent Encryption (3 Options):

MethodDescription
IPsecEncrypts traffic between all Cilium-managed endpoints
WireGuardDefault: Pod-to-Pod. Options: Node-to-Node, Pod-to-Node
Ztunnel (Beta)Transparent encryption and authentication of TCP connections without sidecars

6.4 CNI Comparison: Flannel vs Calico vs Cilium

FeatureFlannelCalicoCilium
Data PlaneVXLAN / host-gwiptables or eBPFeBPF (native)
NetworkPolicyNot supportedL3/L4L3/L4/L7
kube-proxy ReplacementNot possibleNot possiblePossible (eBPF)
EncryptionNot supportedWireGuardIPsec, WireGuard, Ztunnel
ObservabilityNoneBasic flow logsHubble (L3-L7)
BGPNot supportedNativeSupported (v1.10+)
Multi-ClusterNot supportedFederationCluster Mesh
Resource UsageVery lowLow-MediumMedium-High
ComplexityVery lowMediumHigh

Selection Guide:

  • Flannel: Small-scale dev/test clusters, when NetworkPolicy is not needed
  • Calico: On-premises/hybrid environments requiring BGP peering, stable L3/L4 policies
  • Cilium: Large-scale high-performance environments, when L7 policies/observability are needed, when you want to eliminate kube-proxy

6.5 CNI Migration Tips: From Calico to Cilium

There is a critical point that architects must not overlook here. When performing a live migration from Calico to Cilium, legacy routing mode must be enabled:

# Cilium Migration Helm Values
ipam:
  mode: 'cluster-pool'
  operator:
    clusterPoolIPv4PodCIDRList: ['10.245.0.0/16'] # Different CIDR from Calico
cni:
  customConf: true
  uninstall: false
policyEnforcementMode: 'never' # Disable policies during migration
bpf:
  hostLegacyRouting: true # Critical! Use Linux routing stack
tunnelPort: 8473 # Different port from Calico default (8472)

Migration Process (per node):

  1. Install Cilium in auxiliary mode (without CNI management)
  2. Per node: cordon -> drain -> assign Cilium label -> restart Cilium agent -> reboot
  3. Verify Pods on each node are using the new Cilium CIDR
  4. After full migration: enable policies, remove Calico, clean up iptables rules (automatic on reboot)

"Choosing the right CNI plugin is not simply a matter of connectivity. It is the most critical architectural decision that determines the overall performance, security posture, and operational complexity of your cluster." — Comparing Kubernetes CNI Plugins: Calico, Cilium, Flannel, and Weave


7. Conclusion: Preparing for the Next Generation of Kubernetes

Kubernetes networking is undergoing a massive transformation:

AreaBeforeAfter
kube-proxyiptables/IPVSnftables (GA v1.33)
Service MeshSidecar ProxyAmbient Mode (GA Istio 1.24)
IngressIngress + AnnotationGateway API (GA v1.0+)
CNISimple networkingeBPF-based unified platform (Cilium)

The ultimate destination of these changes is the achievement of Operational Excellence through performance optimization and operational efficiency.

The transformation has already begun, and the grace period is shorter than you think. Is your cluster prepared for the departure of IPVS? Now is the golden window to commit to a future-oriented architecture.


References

Quiz

Q1: What is the main topic covered in "The Great Shift in Kubernetes Networking: 5 Critical Changes Even Experts Easily Overlook"?

From IPVS deprecation and the nftables transition in Kubernetes v1.35, to Istio Ambient Mesh eliminating sidecars, Gateway API replacing Ingress, and Cilium eBPF-based CNI unifying observability — we analyze 5 critical changes in Kubernetes networking with practical migration gui...

Q2: What is The Departure of IPVS and the Grand Entrance of nftables? 2.1 Why Is IPVS Being Retired? IPVS (IP Virtual Server), long responsible for high-performance load balancing in large-scale clusters, has been officially deprecated as of Kubernetes v1.35 (KEP-5495).

Q3: Explain the core concept of "Goodbye Sidecars" — The Innovation of Istio Ambient Mesh.

3.1 The Limitations of the Sidecar Model The sidecar proxy model, once synonymous with the very definition of service mesh, is fading.

Q4: What are the key aspects of The Evolution of Certification Exams: The Era of 100% Hands-On, More Demanding Than Theory?

Changes in technology are immediately reflected in certification trends. CKA and CKAD have already fully established themselves as performance-based exams.

Q5: How does Beyond Ingress: Gateway API as the New Routing Standard work? 5.1 The Limitations of Ingress Legacy Ingress lacked L4 protocol support, forcing reliance on NGINX ConfigMaps or complex annotations as workarounds. Gateway API overcomes these limitations and evolves traffic management into a declarative, structured approach.