DevOps
DevOpsFortgeschritten

Cilium vs Calico: Welches Kubernetes-CNI gehört in Ihren Produktionscluster?

Cilium 1.20 und Calico 3.33 sind im Abstand weniger Wochen erschienen, und das alte Bild „eBPF gegen iptables“ beschreibt keines der beiden mehr. Ein Vergleich für die Produktion: Dataplanes, Policy-Modelle, Observability, Verschlüsselung, Gateway API, was GKE, EKS und AKS tatsächlich einsetzen – und die Migrationsfallen, über die kaum jemand spricht.

Titelbild: Cilium vs Calico: Welches Kubernetes-CNI gehört in Ihren Produktionscluster?
Inhalt

Fast jeder Vergleich „Cilium vs Calico“, den Sie gelesen haben, folgt derselben Idee: Cilium ist das moderne eBPF-Projekt, Calico das ältere mit iptables. Heute stimmt das schlicht nicht mehr. Cilium 1.20 wurde im September angekündigt, Calico Open Source 3.33 erschien am 1. Oktober, und die beiden Projekte überschneiden sich inzwischen stärker, als sie sich unterscheiden. Calico hat eine eBPF-Dataplane und unterstützt inzwischen ebenfalls netkit-Pod-Devices. Beide setzen die neue Kubernetes-ClusterNetworkPolicy durch. Beide liefern eine Gateway-API-Implementierung mit.

Die ehrliche Frage lautet also nicht mehr „Welches ist schneller?“, sondern: Welches Policy-Modell, welche Betriebsbedingungen und welches Ökosystem holen Sie sich ins Haus – und wie schwer wird es, die Entscheidung später zu revidieren? Denn das CNI ist die eine Clusterkomponente, die man fast nie billig austauscht. Das ist der Vergleich, den ich gern gehabt hätte, bevor ich eines für eine Produktionsplattform ausgewählt habe: was jedes Projekt heute tatsächlich kann, was GKE, EKS und AKS schon für Sie entschieden haben, und welche Fallen erst bei einer Migration sichtbar werden.

Cilium vs Calico: zwei Kubernetes-CNIs, die sich bei eBPF, netkit, Gateway API und ClusterNetworkPolicy annähern; die verbleibenden Unterschiede liegen im Policy-Modell, bei Windows und bei BGP.

Die kurze Antwort

Wenn Sie nur einen Abschnitt lesen, dann diesen.

  • Cilium, wenn alle Nodes Linux mit aktuellem Kernel sind und Sie anwendungsbewusste Sicherheit im Open-Source-Projekt wollen: L7-Regeln für HTTP, gRPC und Kafka, DNS-basierter Egress (toFQDNs), Flow-Observability mit Hubble, eingebaute Gateway API und Multi-Cluster-Netzwerk per Cluster Mesh. Auf GKE Dataplane V2 und Azure CNI Powered by Cilium betreiben Sie es ohnehin schon.
  • Calico, wenn der Cluster heterogen oder fest mit der physischen Infrastruktur verbunden ist: Windows-Nodes, BGP-Peering mit Top-of-Rack-Switches, ältere Kernel, die eine iptables- oder nftables-Dataplane brauchen, VMs und Bare-Metal-Hosts unter derselben Policy, oder viele Teams, die Policy-Tiers mit klarer Rangfolge benötigen.
  • Bewusst keines von beiden auf EKS, solange es keinen Grund gibt: Das Amazon VPC CNI ist das einzige CNI, das Amazon auf EC2-Nodes unterstützt, und es setzt Network Policies inzwischen nativ durch.

Der Rest des Artikels erklärt, warum – und wo jede dieser Empfehlungen an Grenzen stößt.

Was Cilium und Calico eigentlich sind

Cilium ist ein eBPF-basiertes Projekt für Netzwerk, Sicherheit und Observability in Kubernetes, gestartet von den Gründern von Isovalent. Es kam 2021 zur CNCF und ist seit Oktober 2023 ein Graduated-Projekt. Um das CNI herum liegen Hubble für Flow-Observability, eine eingebaute Gateway-API-Implementierung und Cluster Mesh für Multi-Cluster-Netzwerke.

Calico wird von Tigera entwickelt und gepflegt. Calico Open Source ist der freie Kern, der über Clouds und Distributionen hinweg läuft; Calico Cloud und Calico Enterprise sind die kommerziellen Editionen mit Funktionen wie DNS-Policies, Egress-Gateways und Multi-Cluster-Verwaltung. Calico reicht außerdem über Kubernetes-Pods hinaus zu VMs, Bare-Metal-Hosts und OpenStack.

Beide sind Open Source, beide laufen in sehr großem Maßstab produktiv, und hinter beiden steht ein kommerzielles Unternehmen. Das zählt weniger für die Funktionen als für den Support: Prüfen Sie, zu welcher Edition eine Funktion gehört, bevor Sie damit planen.

Was ein CNI tatsächlich entscheidet (und warum die Wahl klebt)

Ein Container-Network-Interface-Plugin ist nicht nur „das Ding, das Pods eine IP gibt“. In einem Produktionscluster verantwortet es vier Aufgaben:

  1. IP-Adressverwaltung – aus welchem Bereich die Pod-Adresse stammt und ob dieser Bereich außerhalb des Clusters routbar ist.
  2. Konnektivität – Overlay (VXLAN, Geneve, IP-in-IP) oder natives Routing, und ob die Nodes BGP mit dem Netz sprechen.
  3. Network Policy – Kubernetes-NetworkPolicy (und oft eine reichhaltigere eigene CRD) in Paketfilterregeln auf jedem Node übersetzen.
  4. Service-Load-Balancing – optional kube-proxy ersetzen, sodass Traffic an eine ClusterIP in der Dataplane des CNI statt in iptables-Ketten übersetzt wird.

Weil das CNI den Adressplan und die Dataplane besitzt, heißt ein Austausch: jeden Pod neu adressieren. Die Plattformen wissen das und frieren die Entscheidung ein. GKE schreibt, dass Dataplane V2 „nur beim Erstellen eines neuen Clusters aktiviert werden kann“. RKE2 unterstützt keinen Wechsel des primären CNI nach dem ersten Start. Behandeln Sie diese Entscheidung wie die Wahl einer Datenbank-Engine: Migrieren geht, aber es kostet.

Architektur: Identitäten in eBPF-Maps vs. Policy-Engine mit austauschbaren Dataplanes

Der tiefste Unterschied zwischen den Projekten ist nicht eBPF, sondern wie sie „wer darf mit wem sprechen“ abbilden.

Cilium leitet aus den Labels jedes Pods eine numerische Security Identity ab und legt Identitäten, Endpunkte, Services und Policies in eBPF-Maps im Kernel ab. Kommt ein Paket an, schlägt ein eBPF-Programm die Quell-Identität nach, statt eine Liste von IP-Adressen auszuwerten. Dadurch ist die Policy unabhängig vom Pod-Churn, und Cilium kann jedem Flow reichhaltige Metadaten für Hubble mitgeben. Der Preis: Identitäten sind endlich. Microsofts AKS-Dokumentation warnt, dass Workloads mit hohem Churn wie Spark-Jobs einen Cluster an das Limit von 65.535 Identitäten bringen können, und empfiehlt, volatile Labels aus der Identitätsberechnung auszuschließen.

Calico ist um Felix herum gebaut, einen Agenten auf jedem Node, der Policies aus Labels und Selektoren berechnet und in die gewählte Dataplane schreibt: iptables, nftables, eBPF, Windows oder VPP. BGP-Routing übernahm historisch BIRD – deshalb passt Calico so natürlich in Netze, die schon BGP sprechen. In 3.33 programmiert standardmäßig Felix statt BIRD die Cluster-Routen für IP-in-IP-Pools; die Programmierung dieser Routen über BIRD ist abgekündigt, die Entfernung ist für 3.35 geplant.

Cilium ist eine eBPF-Dataplane mit einem Policy-Modell obendrauf. Calico ist ein Policy-Modell mit mehreren Dataplanes darunter. Die meisten praktischen Unterschiede in diesem Artikel folgen aus diesem einen Satz.

Dataplanes heute: eBPF überall, aber mit unterschiedlichen Notausgängen

Paketpfad in Kubernetes im Vergleich: iptables- oder nftables-Ketten in Calicos Standard-Dataplane gegenüber eBPF-Programmen am veth- oder netkit-Device des Pods in Cilium und in Calicos eBPF-Modus, mit Identitäts-Lookup, Service-Load-Balancing und Policy in einem Durchlauf.
Beide Projekte können iptables heute umgehen – nur Calico kann noch darauf zurückfallen.

So stehen die beiden nach den Herbst-Releases da:

Dataplanes heute: eBPF überall, aber mit unterschiedlichen Notausgängen
Cilium 1.20 Calico Open Source 3.33
Dataplanes nur eBPF iptables, nftables, eBPF, Windows, VPP
kube-proxy-Ersatz Ja (eBPF) Ja, im eBPF-Modus
Pod-Device standardmäßig veth; bpf.datapathMode=auto wählt netkit, wenn der Kernel es kann standardmäßig veth; netkit als optionaler CNI-device_type (Kernel 6.7+), eBPF-Programme hängen dann über die netkit-API ein
Kernel-Untergrenze für eBPF aktueller Kernel; Systemanforderungen der jeweiligen Version prüfen 5.10+ mit BTF/CO-RE – plus bekannte 3.33-Regression auf 5.15
Verschlüsselung WireGuard, IPsec, dazu Sidecar-loses mTLS über ztunnel (Beta) WireGuard
BGP Ja, über GoBGP Ja, ausgereiftes Fabric-Peering; neu in 3.33: L2-Erreichbarkeit per ARP ohne BGP oder Overlay
Windows-Nodes Nein Ja

Einige Zeilen verdienen einen zweiten Blick.

netkit. netkit ist ein neueres Linux-Netzwerkdevice, das veth-Paare für Container ersetzen soll: Das BPF-Programm wird Teil des Devices selbst, statt von außen an ein veth-Paar gehängt zu werden, was Overhead aus dem Pfad des Pods nimmt. Ursprünglich brauchte es Kernel 6.8. Die Ankündigung von Cilium 1.20 verweist auf netkit im Einsatz bei Meta und ByteDance; ByteDance berichtet von rund 10 % Gewinn. Ciliums neuer auto-Modus nimmt netkit, wenn der Kernel es unterstützt, sonst veth; Standard bleibt veth. Calico 3.33 geht einen kleineren Schritt: Sein CNI kann über die optionale Einstellung device_type netkit-Pod-Devices anlegen (Kernel 6.7+, Standard bleibt veth), und die eBPF-Dataplane hängt sich auf diesen Devices standardmäßig über die netkit-API ein, anderswo über TCX.

Der iptables-Notausgang. Cilium hat keinen Fallback ohne eBPF. Gehören Kernel oder gehärtete Images zu Ihrer Flotte, in denen eBPF eingeschränkt ist, ist Calicos Fähigkeit, dieselbe Policy auf iptables oder nftables laufen zu lassen, ein echter Betriebsvorteil und kein Altlasten-Feature. 3.33 bringt zusätzlich optionales nftables-Flowtable-Offload, mit dem etablierte Verbindungen den Großteil des Regelwerks überspringen.

Footprint. Beide Projekte haben dieses Jahr abgespeckt: Das cilium-cni-Binary schrumpfte in 1.20 von 76 MB auf 16 MB, und Calico 3.33 konsolidiert die calico-node-Dienste – laut Tigera rund 200 MB weniger Speicher pro Node – und liefert ein einziges Image quay.io/calico/calico.

Auf einer Managed-Plattform kommen die Betriebsgrenzen vom Anbieter, nicht vom Projekt. Google dokumentiert zum Beispiel, dass der Dataplane-V2-Agent (anetd) auf Nodes mit vielen kurzlebigen TCP-Verbindungen zwei bis drei vCPUs verbrauchen kann, empfiehlt Keep-Alives und Connection Pooling und reserviert 0,25 % des Node-Speichers für die größten eBPF-Maps. Das ist kein Grund gegen eBPF, aber ein Grund, Ihr eigenes Traffic-Muster zu testen, statt irgendeinem Benchmark zu glauben – auch nicht denen der Hersteller.

Network Policy: Der Unterschied, den Sie wirklich spüren

Beide Projekte setzen Standard-Kubernetes-NetworkPolicy durch. Wenn Sie nur die schreiben, reicht jedes. Die Unterschiede beginnen, sobald Sie mehr brauchen als L3/L4-Regeln innerhalb eines Namespaces.

Cilium Network Policy: L7- und DNS-Regeln im Open-Source-Projekt

Cilium ergänzt CiliumNetworkPolicy und CiliumClusterwideNetworkPolicy. Die Kernfunktionen sind L7-Regeln – HTTP-Methoden und -Pfade, gRPC, Kafka – und DNS-basierter Egress. Diese Policy erlaubt nur dem Checkout-Service einen einzigen Endpunkt der Payments-API und lässt Payments genau einen externen Hostnamen erreichen:

apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: payments-api
namespace: shop
spec:
endpointSelector:
matchLabels:
app: payments
ingress:
- fromEndpoints:
- matchLabels:
app: checkout
toPorts:
- ports:
- port: "8080"
protocol: TCP
rules:
http:
- method: POST
path: "/v1/charges"
egress:
# DNS erlauben, damit die FQDN-Regel unten die IPs lernen kann
- toEndpoints:
- matchLabels:
"k8s:io.kubernetes.pod.namespace": kube-system
"k8s:k8s-app": kube-dns
toPorts:
- ports:
- port: "53"
protocol: ANY
rules:
dns:
- matchPattern: "*"
- toFQDNs:
- matchName: "api.stripe.com"
toPorts:
- ports:
- port: "443"
protocol: TCP

Eine normale NetworkPolicy kann keine dieser Regeln ausdrücken. Das ist der Kern von Ciliums Reiz für Zero Trust im Cluster – und der Grund, warum GKE (FQDN-Network-Policies) und AKS (FQDN-Filterung und L7-Policies über Advanced Container Networking Services) ihre Premium-Netzwerkfunktionen darauf aufbauen.

Calico Network Policy: Tiers und Governance im Open-Source-Projekt

Calicos Open-Source-Edition beantwortet eine andere Frage: Wer darf wen überstimmen? Policies liegen in geordneten Tiers. Ein Security-Team kann einen Tier mit hoher Priorität besitzen, den Anwendungsteams nicht umgehen können, und eine Pass-Aktion reicht die Entscheidung an den nächsten Tier weiter:

apiVersion: projectcalico.org/v3
kind: Tier
metadata:
name: security
spec:
order: 300
---
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: security.isolate-prod
spec:
tier: security
order: 100
namespaceSelector: env == "prod"
types:
- Ingress
ingress:
- action: Deny
source:
namespaceSelector: env == "dev"
- action: Pass

Dev erreicht Prod nie, egal was ein Anwendungsteam im eigenen Namespace schreibt; alles andere geht an den Default-Tier, in dem die normalen Kubernetes-Policies liegen. Dazu kommen Staged Policies – vorab sehen, was eine Policy erlauben oder blockieren würde, bevor sie greift – und Host Endpoints, die Nodes, VMs und Bare-Metal-Server unter dieselbe labelbasierte Policy stellen. Zusammen ist das ein starker Werkzeugkasten für Plattformteams.

Was Calico Open Source nicht enthält, sind DNS-basierte Policies: Tigeras eigene Feature-Matrix führt DNS/FQDN-Policies, Egress-Gateways und Cluster Mesh als Funktionen von Calico Cloud und Calico Enterprise. Ist FQDN-Egress Pflicht und wollen Sie bei Open Source bleiben, kann allein das den Vergleich entscheiden.

Die gemeinsame Basis: ClusterNetworkPolicy

Die gute Nachricht: Die Kubernetes-Community schließt die Lücke für clusterweite Regeln. ClusterNetworkPolicy (policy.networking.k8s.io/v1alpha2) gibt Plattformteams einen Admin-Tier, der Namespace-Policies überstimmt, und einen Baseline-Tier, den Namespace-Policies überstimmen dürfen:

apiVersion: policy.networking.k8s.io/v1alpha2
kind: ClusterNetworkPolicy
metadata:
name: deny-dev-to-prod
spec:
tier: Admin
priority: 10
subject:
namespaces:
matchLabels:
env: prod
ingress:
- name: deny-from-dev
action: Deny
from:
- namespaces:
matchLabels:
env: dev

Cilium 1.20 unterstützt sie. Calico bildet sie direkt auf Tiers ab: Admin-Policies landen im eingebauten Tier kube-admin, Baseline-Policies in kube-baseline, und 3.33 unterstützt darin benannte Ports. Eine Warnung: EKS setzt dieselbe Idee nativ im VPC CNI um, aber unter einer eigenen API-Gruppe, networking.k8s.aws/v1alpha1. YAML zwischen Clouds zu kopieren ist weniger portabel, als der Name vermuten lässt.

Observability: Hubble vs. Whisker

Network Policies ohne Flow-Sichtbarkeit zu debuggen ist Raten. Deshalb wiegt dieser Punkt mehr, als er in einer Feature-Liste aussieht.

Ciliums Hubble ist die ausgereifteste Open-Source-Antwort: Sichtbarkeit pro Flow mit Quell- und Ziel-Identität, L7-Metadaten, wo eine L7-Policy greift, und Policy-Verdicts. In 1.20 kann Hubble zudem Audit-Verdicts mit der auslösenden Policy verknüpfen – „Was würde brechen, wenn ich das durchsetze?“ wird damit eine Frage, die Sie mit Daten beantworten. Auf Managed-Plattformen taucht dieselbe Idee als GKE-Dataplane-V2-Observability mit Network-Policy-Logging und als Container Network Observability in AKS auf.

Calicos Whisker ist eine Web-Konsole für Flow-Logs, gespeist von einem Flow-Aggregator und gestützt auf eine Flow-Logs-API – beides in 3.33 noch eine Technology Preview. Die Aufbewahrung in der Open-Source-Edition ist In-Memory; längere Aufbewahrung, Dashboards und der Service-Graph gehören zu den kommerziellen Editionen. Calicos eigentliche Observability-Stärke sind die Staged Policies: Sie sehen die Wirkung einer Policy-Änderung auf echte Flows, bevor irgendetwas durchgesetzt wird.

Ist Observability Ihr Haupttreiber, liegt Cilium im Open-Source-Bereich heute vorn. Ist Ihre größte Sorge, mit einer Policy-Änderung die Produktion zu brechen, ist Calicos Staged-Workflow das direktere Werkzeug.

Verschlüsselung und mTLS

Beide Projekte verschlüsseln Pod-zu-Pod-Traffic zwischen Nodes mit WireGuard – der einfache Standard für Anforderungen wie „alles im Transit verschlüsseln“. Cilium unterstützt zusätzlich IPsec.

Die interessanteste neue Entwicklung liegt bei Cilium: Sidecar-loses Mutual TLS mit ztunnel, gemeinsam von Microsoft und Isovalent gebaut. Es ist seit 1.19 Beta, nutzt TLS 1.3 über HBONE, wird pro Namespace mit dem Label io.cilium/mtls-enabled=true eingeschaltet und kann eine interne CA oder SPIRE verwenden. Anders als WireGuard oder IPsec zwischen Nodes verschlüsselt es auch Traffic zwischen Pods auf demselben Node. Ciliums ältere Mutual-Authentication-Funktion ist zugunsten dessen abgekündigt. Calicos Gegenstück ist die Integration mit dem Istio Ambient Mode, in 3.33 weiterhin eine Technology Preview.

Ein Compliance-Hinweis für regulierte Umgebungen: Calico 3.33 hat den FIPS-Modus entfernt. Hängt Ihr aktuelles Deployment davon ab, upgraden Sie nicht im Autopilot-Modus – klären Sie das mit Ihren Auditoren und mit Tigera, bevor Sie das nächste Release planen.

Gateway API: Beide liefern eine, unterschiedlich gebaut

Seit Ingress NGINX im März 2026 sein Lebensende erreicht hat, zählt die Nord-Süd-Frage mehr als sonst.

  • Cilium implementiert die Gateway API nativ über seinen eingebauten Envoy-Proxy. 1.20 geht auf Gateway API v1.6: TCPRoute und UDPRoute (jetzt im Standard-Channel), ListenerSets, ein CORS-Filter, Redirects mit 303/307/308 und ein ExternalAuth-Filter, der eine Anfrage an einen Auth-Service weiterleitet und auf dessen Antwort 200, 302, 401 oder 403 reagiert.
  • Calico liefert das Calico Ingress Gateway, ein mitgeliefertes Envoy Gateway – in 3.33 v1.9.1 mit Gateway-API-CRDs v1.6.1, was Kubernetes ab 1.33 voraussetzt.

Beide sind ein vernünftiger Ersatz für Ingress NGINX. Der architektonische Unterschied: Ciliums Gateway ist in das CNI eingebaut, das Sie ohnehin betreiben, Calicos ist ein separates Envoy-Gateway-Deployment, das Calico paketiert und verwaltet. Auf GKE verwenden Sie meist ohnehin Googles eigenen Gateway-Controller – siehe GKE Gateway API statt Ingress NGINX für diese Entscheidung.

Was GKE, EKS und AKS schon für Sie entschieden haben

Standard-CNIs von Managed Kubernetes: GKE Dataplane V2 auf Basis von Cilium, das ältere Calico-Policy-Add-on nur auf Standard-Clustern; EKS mit dem Amazon VPC CNI als einzigem unterstütztem CNI auf EC2-Nodes; AKS mit der Empfehlung Azure CNI Powered by Cilium und Calico für Windows-Node-Pools; k3s mit Flannel und RKE2 mit Canal als Standard.
Auf Managed Kubernetes ist die CNI-Frage meist beantwortet, bevor Sie sie stellen.

Auf einem Managed Service ist „Cilium vs Calico“ meist eine kleinere Frage, als es scheint.

GKE. Dataplane V2 basiert auf Cilium, läuft als DaemonSet anetd, ist Standard für neue Autopilot-Cluster und Googles empfohlenes Netzwerk-Plugin für alle Cluster. Network Policy ist immer aktiv, Network-Policy-Logging ist eingebaut, und Services laufen dort ohne kube-proxy. Die ältere Dataplane basiert auf Calico und ist nur auf Standard-Clustern verfügbar; das Aktivieren erstellt die Nodes neu und kostet in kube-system rund 128 MB Speicher und 300 Millicores CPU. Zwei Grenzen sollten Sie kennen: Dataplane V2 lässt sich auf bestehenden Clustern nicht aktivieren, und Cluster mit der CRD CiliumNetworkPolicy sind auf 1.000 Nodes begrenzt, während CiliumClusterwideNetworkPolicy bis 5.000 unterstützt. Außerdem unterstützt GKE keine eigenen eBPF-Programme auf Dataplane-V2-Nodes – eine echte Einschränkung, falls Sie eBPF-basierte Werkzeuge ergänzen wollten. Das größere Härtungsbild zeigt die Secure-by-Default-GKE-Referenzarchitektur.

EKS. Das Amazon VPC CNI ist das einzige CNI, das Amazon EKS auf EC2-Nodes unterstützt; Fargate läuft nur mit dem VPC CNI, und EKS Auto Mode unterstützt keine alternativen CNI- oder Network-Policy-Plugins. Ab VPC CNI 1.21 setzt es Standard-Network-Policies und eine Admin-ClusterNetworkPolicy nativ durch. Cilium oder Calico können Sie trotzdem installieren – AWS führt Isovalent und Tigera als Partner –, empfiehlt dann aber kommerziellen Support oder eigene Expertise. Auf EKS Hybrid Nodes dagegen unterstützt Amazon die Kernfunktionen von Cilium und Calico. Eine scharfe Kante: Traffic von und zu Pods mit Security Groups for Pods unterliegt nicht der Calico-Policy, sondern nur den Security Groups.

AKS. Microsoft empfiehlt für Network Policies Azure CNI Powered by Cilium, die Standard-Netzwerkkonfiguration in AKS Automatic. Es läuft ohne kube-proxy, nur auf Linux, und unterstützt CiliumNetworkPolicy und CiliumClusterwideNetworkPolicy direkt; FQDN-Filterung, L7-Policies, WireGuard und Flow-Observability kommen über Advanced Container Networking Services. Calico wird nur für Standard-Kubernetes-Network-Policies unterstützt – andere Calico-Funktionen testet und unterstützt AKS nicht –, ist aber die Engine für Windows-Node-Pools. Da Azure Network Policy Manager seit dem 30. September 2026 auf Windows-Nodes nicht mehr unterstützt wird und auf Linux 2028 ausläuft, ist das AKS-Bild einfach: Cilium für Linux, Calico, wo Windows im Spiel ist.

Selbst betriebene Distributionen. k3s nutzt standardmäßig Flannel mit kube-router für Network Policies; für Cilium oder Calico starten Sie den Server mit --flannel-backend=none und --disable-network-policy und installieren dann das CNI. RKE2 liefert Canal (Standard – Flannel zwischen den Nodes, Calico für Policies), Cilium, Calico und Flannel mit. Nur Calico und Flannel unterstützen dort Windows-Nodes, und Canal wird auf Clustern mit Windows-Nodes nicht unterstützt. Wenn Sie die Distribution noch wählen, behandelt der Vergleich k3s vs k0s vs MicroK8s vs RKE2 diese Standards ausführlicher.

Auf GKE und AKS heißt „Cilium wählen“ meist: den Plattform-Standard akzeptieren. Die echte Entscheidung zwischen Cilium und Calico fällt auf selbst betriebenen Clustern, On-Prem, am Edge und überall dort, wo Windows-Nodes oder eine BGP-Fabric beteiligt sind.

Skalierung und Multi-Cluster

Beide Projekte betreiben sehr große Cluster; die Unterschiede liegen darin, wie sie Cluster miteinander verbinden.

Cilium Cluster Mesh ist Teil des Open-Source-Projekts: Es verbindet standardmäßig bis zu 255 Cluster, bietet clusterübergreifende Service Discovery und Policies, und 1.20 erklärt die Implementierung der Kubernetes Multi-Cluster Services API für stabil. Eine neue Policy-Entity cluster-mesh erlaubt Regeln für „jeden Workload im Mesh“, ohne Cluster einzeln aufzuzählen.

Calico geht netzwerkzentriert vor: Mit BGP lassen sich Cluster und physische Fabric so verbinden, dass Pod-IPs über sie hinweg routbar sind. Calicos verwaltetes Multi-Cluster-Produkt, Cluster Mesh, und die Multi-Cluster-Policy-Verwaltung gehören zu Calico Cloud und Calico Enterprise, nicht zur Open-Source-Edition.

Heißt die Anforderung „viele Cluster, ein Service- und Policy-Modell“ und wollen Sie bei Open Source bleiben, liegt Cilium vorn. Heißt sie „Pods als vollwertige Teilnehmer meines gerouteten Rechenzentrumsnetzes“, ist Calicos BGP-Erbe genau der Grund, warum es existiert.

Migration von Calico zu Cilium: Erst lesen, dann planen

Die meisten Teams, die beide vergleichen, betreiben bereits Calico und überlegen den Wechsel. Cilium dokumentiert einen Live-Migrationspfad, und der ist wirklich clever: Cilium im sekundären Modus mit eigenem Pod-CIDR, Cluster-Pool-IPAM und eigenem Encapsulation-Port installieren (das Beispiel nutzt VXLAN auf Port 8473), sodass beide Overlays parallel existieren und die Linux-Routingtabelle ihren Traffic trennt. Dann Node für Node: cordon und drain, Node labeln, damit eine CiliumNodeConfig Cilium seine CNI-Konfiguration schreiben lässt, Cilium-Agent neu starten, Node rebooten, prüfen, uncordon.

Lesen Sie dann den Abschnitt zu den Einschränkungen derselben Anleitung. Die Migration ist nicht mit BGP-basiertem Routing getestet und nicht mit einem bestehenden NetworkPolicy-Provider – und Ciliums eigene Policy-Durchsetzung muss während der Migration mit policyEnforcementMode: never laufen, weil sonst Traffic von noch nicht migrierten Pods verworfen werden könnte. Ein produktiver Calico-Cluster hat fast immer Policies, und viele On-Prem-Cluster nutzen BGP. Anders gesagt: Genau die Cluster, die diese Migration am ehesten wollen, sind die, mit denen sie nicht getestet wurde.

Eine pragmatische Reihenfolge:

  1. Policies inventarisieren und übersetzen, mit besonderem Blick auf ipBlock-Regeln und Calico-Tiers, für die es in Cilium keine Eins-zu-eins-Entsprechung gibt.
  2. Auf einem Klon proben, mit laufendem Konnektivitätsmonitor, wie es die Anleitung selbst dringend empfiehlt.
  3. Entscheiden, ob ein Zeitfenster ohne Policies akzeptabel ist. Wenn nicht: einen neuen Cilium-Cluster bauen und Workloads per Blue/Green oder GitOps-gesteuerter Umschaltung umziehen.
  4. Auf AKS das unterstützte In-Place-Upgrade der Dataplane von Azure CNI auf Cilium nutzen (kubenet-Cluster gehen zuerst auf Azure CNI Overlay). Auf GKE gibt es keinen In-Place-Weg zu Dataplane V2: Das ist ein neuer Cluster.

Stolperfallen, die Sie vor dem Upgrade kennen sollten

Calico 3.33

  • eBPF auf Kernel 5.15 ist in 3.33 kaputt – eine bekannte Regression: Das Host-Endpoint-Programm ist über das Verifier-Limit gewachsen. Workaround: Kernel ab 6.8 oder vorerst 3.32. Das betrifft alle mit Ubuntu-22.04-Images, einschließlich des Standard-Node-Images von AKS für Kubernetes 1.25 bis 1.34.
  • Der FIPS-Modus ist weg. Regulierte Deployments brauchen vor dem Upgrade einen Plan.
  • Native v3-CRDs sind GA, der aggregierte API-Server ist abgekündigt. Das vereinfacht Installationen, ändert aber, wie Werkzeuge mit Calico-Ressourcen sprechen.
  • Die Programmierung von IP-in-IP-Cluster-Routen über BIRD ist abgekündigt, die Entfernung ist für 3.35 geplant; Felix verwaltet diese Routen jetzt standardmäßig.

Cilium 1.20

  • Die alte Mutual Authentication ist abgekündigt zugunsten von mTLS über ztunnel.
  • cilium-dbg bgp-Befehle sind abgekündigt zugunsten neuer Shell-Befehle für die GoBGP-basierte Control Plane.
  • Identity-Churn bleibt die klassische Skalierungsfalle: Labels mit hoher Kardinalität ausschließen, bevor sie den Identitätsraum erschöpfen.
  • Auf GKE können andere eBPF-Werkzeuge mit Dataplane V2 kollidieren; Google dokumentiert einen Fall, in dem Microsoft Retina verhinderte, dass Pods Services erreichen.

Die Entscheidung in fünf Fragen

Entscheidungsbaum Cilium vs Calico: Windows-Nodes oder ein nötiger iptables-/nftables-Fallback führen zu Calico; Managed GKE oder AKS führt zur Cilium-basierten Dataplane der Plattform; Bedarf an L7-Regeln, FQDN-Egress oder Open-Source-Cluster-Mesh führt zu Cilium; BGP-Fabric-Peering oder Tier-basierte Policy-Governance über viele Teams führt zu Calico.
Die meisten Cluster entscheiden sich schon bei den ersten beiden Fragen.
  1. Betreiben Sie Windows-Nodes? Dann Calico, zumindest für diese Nodes. Cilium unterstützt Windows nicht.
  2. Sind Sie auf GKE oder AKS? Nutzen Sie die Cilium-basierte Dataplane der Plattform, solange es keinen konkreten Grund dagegen gibt. Auf EKS starten Sie mit den nativen Network Policies des VPC CNI.
  3. Brauchen Sie L7-Policies, FQDN-Egress oder Multi-Cluster-Netzwerk im Open-Source-Projekt? Das spricht für Cilium.
  4. Müssen Pods auf einer BGP-Fabric routbar sein, oder sollen VMs und Bare-Metal-Hosts dieselbe Policy wie Pods bekommen? Das spricht für Calico.
  5. Schreiben mehrere Teams Policies, und muss ein Security-Team immer gewinnen? Calicos Tiers sind das direkteste Modell; auf Cilium decken die neuen Admin- und Baseline-Tiers von ClusterNetworkPolicy die häufigen Fälle inzwischen ab.

Fazit

Heute sind Cilium und Calico beide exzellent, beide nutzen eBPF, und beide bewegen sich auf dieselben Upstream-APIs zu: Gateway API für eingehenden Traffic, ClusterNetworkPolicy für Plattform-Leitplanken. Wer nach Benchmark entscheidet, entscheidet nach dem unwichtigsten Unterschied.

Cilium ist der bessere Standard für einen reinen Linux-Cluster im Cloud-native-Stil, der seinen Traffic bis L7 verstehen will – und auf GKE und AKS ist es bereits der Standard. Calico ist die bessere Wahl für einen heterogenen oder infrastrukturgebundenen Cluster: Windows-Nodes, BGP-Fabrics, ältere Kernel, VMs unter derselben Policy und Organisationen, in denen Policy-Governance mehr zählt als Paketmagie.

Was auch immer Sie wählen: Wählen Sie, als würden Sie es für die gesamte Lebensdauer des Clusters behalten, denn die eigentlichen Kosten stecken in der Migration. Und bevor Sie irgendeiner Policy vertrauen – auch denen, die Sie für das andere CNI geschrieben haben –, prüfen Sie Ihre ipBlock-Regeln.

Weiterlesen: Für die Plattform über dem Netzwerk siehe Platform Engineering auf Kubernetes; was die Managed Services tatsächlich für Sie betreiben, zeigt Managed Kubernetes: Was EKS, AKS und GKE wirklich verwalten.

Themen
ciliumcalicokubernetes-cniebpfnetwork-policygke-dataplane-v2gateway-api

Häufig gestellte Fragen

Ist Cilium besser als Calico?

Keines ist generell besser; beide optimieren für unterschiedliche Cluster. Cilium ist die stärkere Wahl für reine Linux-Cluster, die anwendungsbewusste Sicherheit und Sichtbarkeit im Open-Source-Projekt wollen: L7-Regeln für HTTP, gRPC und Kafka, DNS-basierter Egress mit toFQDNs, Flow-Observability mit Hubble, eingebaute Gateway API und Cluster Mesh für mehrere Cluster. Calico ist die stärkere Wahl, wenn der Cluster heterogen oder an die physische Infrastruktur gebunden ist: Es unterstützt Windows-Nodes, bietet iptables-, nftables-, eBPF-, Windows- und VPP-Dataplanes, hat ausgereiftes BGP-Peering mit der Rechenzentrums-Fabric, und die Open-Source-Edition enthält Policy-Tiers und Staged Policies für die Steuerung über viele Teams. Auf GKE oder AKS hat die Plattform die Wahl meist schon getroffen: Beide setzen auf Cilium-basierte Dataplanes.

Nutzt Calico auch eBPF?

Ja. Calico hat seit Jahren eine eBPF-Dataplane, neben iptables, nftables, Windows und VPP; Sie wählen eine pro Cluster. In Calico Open Source 3.33 braucht die eBPF-Dataplane einen Kernel ab 5.10 mit BTF, kann kube-proxy ersetzen, hat QoS-Verbindungslimits bekommen und kann jetzt netkit-Pod-Devices nutzen. Wichtig ist eine bekannte Regression in 3.33: Die eBPF-Dataplane funktioniert auf Kernel 5.15 nicht. Der dokumentierte Workaround ist ein Kernel ab 6.8 oder vorerst Calico 3.32. Der Unterschied zu Cilium: In Calico ist eBPF optional, in Cilium die einzige Dataplane.

Was ist der Unterschied zwischen Flannel, Calico und Cilium?

Flannel ist ein einfaches Overlay-Netz: Es gibt jedem Pod eine IP und verbindet die Nodes, meist per VXLAN, setzt aber selbst keine Kubernetes-NetworkPolicy durch. Deshalb kombiniert k3s Flannel mit kube-router für Policies, und deshalb verbindet Canal, das Standard-CNI von RKE2, Flannel-Netzwerk mit Calico-Policies. Calico und Cilium sind vollständige CNIs: IP-Adressverwaltung, Routing, Network Policy und optional Service-Load-Balancing ohne kube-proxy. Flannel eignet sich nur für kleine oder kurzlebige Cluster ohne Policy-Bedarf; für alles Mandantenfähige oder Produktive nehmen Sie Calico oder Cilium.

Kann ich ohne Downtime von Calico zu Cilium migrieren?

Manchmal, auf selbst betriebenen Clustern, mit echten Einschränkungen. Cilium dokumentiert eine Live-Migration mit zwei parallelen Overlays: Cilium wird in einem sekundären Modus mit eigenem Pod-CIDR, Cluster-Pool-IPAM und eigenem Encapsulation-Port installiert, dann werden die Nodes einzeln per CiliumNodeConfig umgestellt – cordon, drain, Label, Neustart. Dieselbe Anleitung sagt aber, dass die Migration weder mit BGP-basiertem Routing noch mit einem bestehenden NetworkPolicy-Provider getestet ist, und die Policy-Durchsetzung muss währenddessen abgeschaltet sein. Die meisten produktiven Calico-Cluster nutzen eines davon oder beides. Auf GKE lässt sich ein bestehender Cluster gar nicht auf Dataplane V2 umstellen, und RKE2 unterstützt keinen CNI-Wechsel nach dem ersten Start – ein neuer Cluster mit Blue/Green-Umschaltung ist oft der sicherere Weg.

Welches CNI nutzen GKE, EKS und AKS standardmäßig?

GKE Dataplane V2 basiert auf Cilium, läuft als DaemonSet anetd, ist Standard für neue Autopilot-Cluster und Googles Empfehlung für alle Cluster; das ältere Calico-Network-Policy-Add-on gibt es nur noch auf Standard-Clustern. EKS nutzt das Amazon VPC CNI, das einzige CNI, das Amazon EKS auf EC2-Nodes unterstützt; es setzt inzwischen Standard-NetworkPolicies und eine Admin-ClusterNetworkPolicy nativ durch, während Cilium und Calico Partner-Alternativen sind und auf EKS Hybrid Nodes in ihren Kernfunktionen unterstützt werden. AKS empfiehlt Azure CNI Powered by Cilium, Standard in AKS Automatic und ohne kube-proxy; Calico bleibt für Standard-Kubernetes-Policies unterstützt und ist die Option für Windows-Node-Pools.

Aus der Community

Diskussion im Fediverse

Antworten von Mastodon und Bluesky — direkt aus dem offenen Netz, ohne Tracking.

Antworten werden geladen …

ENDE