Skip to main content
πŸŽ“ Claude Code Masterclass Learn AI-assisted development on Udemy β€” plus the companion book on Leanpub & Amazon. Start Learning
Cilium vs Calico: Kubernetes CNI Comparison
Platform Engineering

Cilium vs Calico 2026: Kubernetes CNI and Network Policy

Cilium vs Calico compared for Kubernetes networking in 2026. eBPF vs iptables performance, network policy, encryption, observability, and which CNI to.

LB
Luca Berton
Β· 4 min read

Cilium and Calico are the two most deployed Kubernetes CNI plugins. Both handle pod networking and network policy. The fundamental difference: Cilium uses eBPF in the kernel, Calico uses iptables (with an eBPF option). This affects performance, observability, and what else the CNI can do beyond basic networking.

Architecture

Cilium

Cilium programs the Linux kernel via eBPF β€” small programs that run in kernel space without modifying kernel source or loading modules:

  • Datapath: eBPF programs attached to network interfaces
  • kube-proxy replacement: Cilium replaces kube-proxy entirely
  • Identity-based: Pods get numeric identities, policies are enforced by identity, not IP
  • Hubble: Built-in observability layer (flows, metrics, service map)

Calico

Calico uses iptables (or eBPF in newer versions) with BGP routing:

  • Datapath: iptables rules (default) or eBPF (opt-in)
  • Routing: BGP peering for flat L3 networking (no overlay needed)
  • Policy engine: Calico-specific policies extend Kubernetes NetworkPolicy
  • BIRD: BGP daemon for route distribution

Feature comparison

FeatureCiliumCalico
DatapatheBPF (always)iptables (default) or eBPF (opt-in)
kube-proxy replacementYes (recommended)Yes (eBPF mode)
Network policyKubernetes + CiliumNetworkPolicyKubernetes + Calico NetworkPolicy
L7 policyYes (HTTP, gRPC, Kafka, DNS)No (L3/L4 only)
EncryptionWireGuard or IPsecWireGuard or IPsec
ObservabilityHubble (flows, metrics, UI)Flow logs (basic)
Service meshBuilt-in (eBPF-based)No built-in mesh
BGPYes (native)Yes (BIRD daemon)
Multi-clusterClusterMeshFederation
Windows nodesNoYes
CNCF statusGraduatedNot CNCF (Tigera)
Bandwidth managementEDT-based rate limitingNo
Load balancingMaglev, DSR, XDPIPVS or iptables
Used by defaultGKE Dataplane V2, EKS (option)AKS (option), K3s, RKE2

Performance

The eBPF vs iptables difference is measurable at scale:

Throughput (iperf3, same node)

MetricCilium (eBPF)Calico (iptables)Calico (eBPF)
TCP throughput9.4 Gbps8.1 Gbps9.2 Gbps
UDP throughput9.1 Gbps7.8 Gbps8.9 Gbps
p99 latency0.12 ms0.28 ms0.15 ms

Policy enforcement at scale

Number of policiesCiliumCalico (iptables)
10No measurable impactNo measurable impact
100No measurable impact~3% throughput drop
1,000No measurable impact~15% throughput drop
10,000~2% throughput drop~40% throughput drop

iptables scales linearly β€” each packet traverses every rule. eBPF scales logarithmically β€” policies are compiled into efficient maps. At 1,000+ network policies, the difference is dramatic.

Connection tracking

MetricCiliumCalico (iptables)
Conntrack tableeBPF maps (per-CPU)nf_conntrack (global, contended)
New connections/sec250K+~100K (contention at scale)
Memory per entry64 bytes376 bytes

Network policy

Kubernetes NetworkPolicy (both support)

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend
spec:
  podSelector:
    matchLabels:
      app: api
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: frontend
      ports:
        - port: 8080

Cilium L7 policy (Cilium only)

apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: api-l7
spec:
  endpointSelector:
    matchLabels:
      app: api
  ingress:
    - fromEndpoints:
        - matchLabels:
            app: frontend
      toPorts:
        - ports:
            - port: "8080"
          rules:
            http:
              - method: GET
                path: "/api/v1/products"
              - method: POST
                path: "/api/v1/orders"

Cilium can enforce policies at the HTTP method/path level without a service mesh. Calico is L3/L4 only.

Calico GlobalNetworkPolicy (Calico only)

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: deny-external
spec:
  selector: environment == "production"
  ingress:
    - action: Deny
      source:
        nets:
          - 0.0.0.0/0
      destination:
        ports:
          - 443
  egress:
    - action: Allow

Calico’s GlobalNetworkPolicy applies cluster-wide without namespace scoping, which is useful for platform teams.

Observability

Cilium Hubble

Hubble provides deep network observability built into the CNI:

# Install Hubble
cilium hubble enable --ui

# Watch real-time flows
hubble observe --namespace production

# Filter by verdict
hubble observe --verdict DROPPED

# Service dependency map
hubble observe --to-service api-service -o json

Hubble gives you:

  • Real-time flow logs (source, destination, verdict, L7 info)
  • Service dependency maps
  • Prometheus metrics (latency, throughput per service)
  • DNS query visibility
  • HTTP request/response visibility

Calico observability

Calico provides basic flow logs via Calico Enterprise (paid). Open-source Calico has limited observability β€” you need external tools like Prometheus + Grafana for network metrics.

Encryption

Both support node-to-node encryption:

# Cilium with WireGuard
cilium install --set encryption.enabled=true --set encryption.type=wireguard

# Calico with WireGuard
calicoctl patch felixconfiguration default --type='merge' \
  -p '{"spec":{"wireguardEnabled":true}}'

Performance impact is similar (~5-10% throughput reduction with WireGuard).

Installation

Cilium

cilium install --set kubeProxyReplacement=true
cilium hubble enable
cilium status --wait

Calico

# Operator-based install
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28/manifests/custom-resources.yaml

Decision guide

Choose Cilium when:

  • Performance at scale matters β€” eBPF handles 1,000+ policies without degradation
  • You want built-in observability (Hubble) without extra tools
  • You need L7 network policy (HTTP path/method enforcement)
  • You want a service mesh alternative without sidecars
  • You are building AI/GPU clusters where every millisecond of network latency counts
  • You want to replace kube-proxy for better load balancing (Maglev, DSR)

Choose Calico when:

  • You need BGP peering with physical network infrastructure (data centers)
  • Windows node support is required
  • You are on OpenShift or an older cluster where Calico is already deployed
  • You need GlobalNetworkPolicy for cluster-wide rules
  • Your team is more familiar with iptables-based networking
  • You have under 100 network policies and do not need L7 enforcement

Migration path

Many teams start with Calico (it is the default on many platforms) and migrate to Cilium as they scale. The migration requires a maintenance window to swap the CNI, but network policies can be converted.

Free 30-min AI & Cloud consultation

Book Now