Cilium is a networking, security and observability layer for cloud native platforms, implemented with eBPF, which lets small verified programs run inside the Linux kernel. It started as an eBPF-based implementation of the Container Networking Interface (CNI) and has grown into a full data plane: pod networking, identity-based network policy, kube-proxy replacement, load balancing, transparent encryption, multi-cluster connectivity, BGP, a sidecarless service mesh and Layer 3 to 7 flow visibility through Hubble. It addresses the limits of iptables-based networking, where rule lists grow with the number of services and policies are tied to IP addresses that change constantly; Cilium instead attaches policy to workload identity and resolves it in the kernel. The project was created by Isovalent, became a CNCF Incubating project in October 2021 and graduated in October 2023, announced on October 11, 2023.
CNCF daily · Sprint 1, day 4 · Cloud Native Network
At a glance
| Category | Cloud Native Network |
| CNCF status | Graduated. Incubating since October 2021; graduated October 2023 |
| Written in | Go for the control plane, with eBPF programs written in C |
| License | Apache 2.0 |
| Data plane | eBPF programs attached to network devices and sockets in the Linux kernel |
| Main features | CNI, network policy, kube-proxy replacement, Cluster Mesh, BGP, WireGuard and IPsec encryption, Gateway API, service mesh |
| Related projects | Hubble for observability and Tetragon for runtime security observability |
| Release line | 1.19 (patch 1.19.5 published June 2026), with 1.20 following |
Architecture
flowchart TB
API[Kubernetes API server<br/>pods, services, policies] -->|watch| OP
subgraph CP[Control plane]
OP[Cilium operator<br/>IPAM and cluster tasks]
KV[Identity store<br/>CRDs or kvstore]
end
subgraph NODE[Each node]
AG[Cilium agent<br/>DaemonSet] -->|compiles and loads| EBPF[eBPF programs<br/>in the kernel]
EBPF --> NET[Pod traffic<br/>routing, policy, load balancing]
EBPF --> FLOW[Flow events]
end
OP --> AG
KV --> AG
FLOW --> HUB[Hubble<br/>per node observer]
HUB --> REL[Hubble Relay<br/>cluster view]
REL --> UI[Hubble UI and CLI<br/>Prometheus metrics]
AG --> CM[Cluster Mesh<br/>other clusters]
| Component | Responsibility |
|---|---|
| Cilium agent | Runs on every node, learns about pods and policies from the API server, and programs the eBPF data plane. |
| eBPF programs | Handle packet forwarding, policy enforcement, service load balancing and encryption in the kernel, without iptables chains. |
| Cilium operator | Handles cluster-wide tasks such as IP address management and garbage collection. |
| Identities | Each set of pods with the same labels gets a numeric identity, and policy is expressed and enforced against identities rather than IP addresses. |
| Hubble | Observes flows, DNS and HTTP events from the data plane and exports them through a relay, a UI, a CLI and Prometheus metrics. |
| Cluster Mesh | Connects several clusters so services and policies can span them. |
| Envoy | Cilium embeds Envoy for Layer 7 features such as HTTP policy, ingress and Gateway API routing. |
Design principle. Cilium moves networking logic out of user space and iptables and into eBPF programs that run at the earliest point in the kernel’s packet path. Policy follows workload identity rather than IP address, so rules stay valid as pods move, and the same data plane that forwards traffic also produces the flow records that Hubble exposes, giving enforcement and visibility from one source.
Production reference design
A common pattern on EKS, GKE, AKS and on-premises clusters, where Cilium is the CNI and replaces kube-proxy. Several managed services offer Cilium directly, and Azure’s CNI integrates it, so check what your provider supports before installing it yourself.
- Check prerequisites. Use a recent Linux kernel (Cilium documents minimum versions per feature), and decide whether the cluster is created without kube-proxy and without another CNI. Replacing the CNI on a running cluster is a planned migration, not a casual change.
- Install with Helm, enabling kube-proxy replacement, Hubble and encryption in a values file:
# values.yaml kubeProxyReplacement: true k8sServiceHost: <api-server-host> k8sServicePort: 6443 operator: replicas: 2 hubble: relay: { enabled: true } ui: { enabled: true } encryption: enabled: true type: wireguardhelm repo add cilium https://helm.cilium.io/ helm install cilium cilium/cilium --version <version> -n kube-system -f values.yaml cilium status --wait - Verify the data plane with
cilium statusand the connectivity test (cilium connectivity test) from the Cilium CLI before moving workloads. - Start with default-deny and add policy. Apply identity-based rules, including Layer 7 rules where useful:
Check field names against the Cilium version you install.apiVersion: cilium.io/v2 kind: CiliumNetworkPolicy metadata: { name: orders-allow-frontend, namespace: orders } spec: endpointSelector: { matchLabels: { app: orders-api } } ingress: - fromEndpoints: [{ matchLabels: { app: frontend } }] toPorts: - ports: [{ port: "8080", protocol: TCP }] rules: { http: [{ method: GET, path: "/orders.*" }] } - Expose services with Cilium’s Gateway API implementation for ingress, and use BGP or the cloud load balancer integration to advertise addresses on bare metal.
- Observe and connect. Use Hubble to see denied flows while writing policy, export its metrics to Prometheus, and add Cluster Mesh if services must reach each other across clusters.
Typical production uses include the cluster CNI for large clusters, kube-proxy replacement for faster service load balancing, zero-trust network policy between namespaces, flow visibility for troubleshooting, and multi-cluster service connectivity.
Operational considerations
- Kernel and platform fit. Features depend on kernel versions and cloud networking modes. Check the compatibility table for your distribution and managed service before choosing features such as native routing or encryption.
- Roll out policy gradually. Use Hubble to observe real traffic first, apply policies in audit mode where available, and then enforce. Default-deny without that preparation causes outages.
- Treat CNI changes as migrations. Replacing the CNI or enabling kube-proxy replacement on a live cluster needs a tested plan, node-by-node rollout and a rollback path.
- Size and monitor the agent. The agent runs on every node, so set resource requests, watch its memory and map usage in large clusters, and alert on agent health, endpoint regeneration and dropped packets.
- Upgrade carefully. Cilium releases a minor version regularly and documents upgrade notes per version. Read them, upgrade the agent and operator together, and test connectivity afterwards.
Adoption
- The CNCF graduation announcement listed case studies from Bell Canada, Bloomberg, DB Schenker, S&P Global, Sky and The New York Times, and quoted adopters including Datadog, Tietoevry and Schuberg Philis.
- The announcement reported more than 800 contributors and maintainers from seven companies, 46 public case studies and well over 100 organisations in the project’s USERS file, and placed Cilium second only to Kubernetes among CNCF projects by commits.
- Microsoft Azure integrated open-source Cilium into its CNI, and the project’s own ten-year retrospective cites OVHcloud and Zynga, the latter replacing kube-proxy with eBPF load balancing to avoid conntrack scaling problems.
Alternatives
| Solution | Model | Best suited to |
|---|---|---|
| Calico | CNI with network policy, using iptables or an eBPF data plane | Clusters that want a long-established policy engine and flexible data planes |
| Flannel | Simple overlay CNI | Small clusters that need basic connectivity only |
| Cloud provider CNIs (AWS VPC CNI, Azure CNI, GKE) | Native cloud networking | Teams that want provider support and VPC-native addressing |
| Antrea | Open vSwitch based CNI | VMware environments and Windows node support |
| Istio ambient or Linkerd | Service mesh layered on a CNI | Teams whose main need is mTLS and Layer 7 traffic management |
Strengths and limitations
| Strengths | Limitations |
|---|---|
| Identity-based policy and kernel-level enforcement that scale with cluster size | Depends on kernel versions and eBPF features, so platform support needs checking |
| kube-proxy replacement with efficient service load balancing | Debugging eBPF behaviour needs specific tools and skills |
| Hubble provides flow and DNS visibility without extra agents | Migrating an existing cluster from another CNI is a careful project |
| One platform for CNI, policy, encryption, ingress and multi-cluster | Many features, so configuration choices and upgrades need discipline |
| Large community and wide managed-service support | Advanced features and support often come through commercial offerings |
Recommendation
Adopt Cilium as the CNI for new Kubernetes clusters, particularly large or security-sensitive ones, using the managed offering your cloud provides where it exists. Enable Hubble from the start, roll out network policy from observed traffic, and plan upgrades with the release notes. For small clusters with simple needs, a provider CNI or Flannel may be enough, and an existing Calico estate does not need to move without a clear gain.
References: CNCF project page · CNCF: Cilium graduation announcement · Cilium documentation · Cilium releases on Go packages · Cilium on GitHub