contribution/compass
cilium/cilium

Cilium

166 signals · 203 observation events

Open repository ↗

eBPF-based Networking, Security, and Observability

24.9K stars4.0K forksGoApache-2.0bpfcncfcnicontainersebpfk8skernelkuberneteskeyword: Cilium
PROJECT NEWS

Release, roadmap, and discussion

All news →
cilium/cilium

Cilium

Platform / Networking / Runtime Infrastructure
Latest stable

1.20.0

v1.20.0
  • ⛩️ Gateway API
  • 🚀 Gateway API v1.6.1: Cilium moves from Gateway API v1.4 to v1.6.1, bringing support for capabilities that graduated across both upstream releases. (cilium/cilium#45251, @youngnick; cilium/cilium#46827, cilium/cilium#47274, @arybolovlev)
  • 👥 Delegate Gateway Listeners: ListenerSets let application teams attach and manage their own listeners while the platform team retains ownership of the shared Gateway. (cilium/cilium#46303, cilium/cilium#46785, @asauber)
  • 🔏 Encrypt Traffic to Backends: Gateway API BackendTLSPolicy support lets operators configure TLS and backend certificate validation for traffic between the gateway and application services. (cilium/cilium#43045, @youngnick)
  • 🔀 TCPRoute and UDPRoute: Databases, DNS servers, game servers and other non-HTTP services can now be managed through the same Gateway API model as HTTP and gRPC traffic. (cilium/cilium#46184, cilium/cilium#46970, @eminaktas; cilium/cilium#4
Original release notes ↗

Publicly indicated next

Prereleases and milestones indicate public plans; they are not delivery commitments.

Observation trail

  1. changedupdatedAt
  2. changedupdatedAt
  3. changedupdatedAt
  4. changedupdatedAt, metrics
  5. changedmetrics
  6. changedupdatedAt
  7. changedupdatedAt, metrics
  8. changedupdatedAt
  9. changedupdatedAt, metrics
  10. changedupdatedAt, metrics
  11. changedupdatedAt
  12. changedtext, updatedAt
  13. changedupdatedAt, metrics, labels
  14. changedupdatedAt, labels
  15. changedupdatedAt
  16. changedupdatedAt
  17. changedupdatedAt
  18. discoveredinitial snapshot
  19. discoveredinitial snapshot
  20. changedupdatedAt
  21. changedupdatedAt, labels, state
  22. changedupdatedAt, metrics, labels, state
  23. changedupdatedAt, state
  24. changedupdatedAt, labels
  25. discoveredinitial snapshot
  26. changedtext, updatedAt
  27. discoveredinitial snapshot
  28. changedupdatedAt, metrics
  29. discoveredinitial snapshot
  30. changedupdatedAt, labels, state
50 shown
pull request

gateway-api: remove unnecessary TLSRoute support checks

TLSRoute support is already mandatory, but the Gateway API controller still carried helper functions and conditional logic for treating it as optional. Remove the obsolete HasTLSRouteSupport helper and the remaining reconcile branches that skipped TLSRoute listing and status updates when the CRD was not present. This keeps the implementation aligned with the

importance 5@mhofstetterclosedkind/bugready-to-mergerelease-note/miscarea/servicemeshfeature/k8s-gateway-apiOriginal evidence ↗
pull request

ci: use GitHub App client ID in v1.17 image workflow

## Summary - replace the deprecated `app-id` input with `client-id` in the v1.17 image workflow - use `AUTO_COMMENT_CLIENT_APP_ID` for the corresponding GitHub App credential ## Why The v1.17 workflow on `main` handles pull requests targeting the v1.17 branch. Keeping this change isolated allows the same one-file patch to be backported only to v1.17, where t

importance 5@bogdankraskoopenrelease-note/cikind/community-contributiondont-merge/needs-ci-validationarea/renovateOriginal evidence ↗
pull request

ci: use GitHub App client ID in v1.18 image workflow

## Summary - replace the deprecated `app-id` input with `client-id` in the v1.18 image workflow - use `AUTO_COMMENT_CLIENT_APP_ID` for the corresponding GitHub App credential ## Why The v1.18 workflow on `main` handles pull requests targeting the v1.18 branch. Keeping this change isolated allows the same one-file patch to be backported only to v1.18, where t

importance 5@bogdankraskoopenrelease-note/cikind/community-contributiondont-merge/needs-ci-validationarea/renovateOriginal evidence ↗
pull request

ci: use GitHub App client ID in v1.19 image workflow

## Summary - replace the deprecated `app-id` input with `client-id` in the v1.19 image workflow - use `AUTO_COMMENT_CLIENT_APP_ID` for the corresponding GitHub App credential ## Why The v1.19 workflow on `main` handles pull requests targeting the v1.19 branch. Keeping this change isolated allows the same one-file patch to be backported only to v1.19, where t

importance 5@bogdankraskoopenrelease-note/cikind/community-contributiondont-merge/needs-ci-validationarea/renovateOriginal evidence ↗
pull request

ci: use GitHub App client ID in v1.20 image workflow

## Summary - replace the deprecated `app-id` input with `client-id` in the v1.20 image workflow - use `AUTO_COMMENT_CLIENT_APP_ID` for the corresponding GitHub App credential ## Why The v1.20 workflow on `main` handles pull requests targeting the v1.20 branch. Keeping this change isolated allows the same one-file patch to be backported only to v1.20, where t

importance 5@bogdankraskoopenrelease-note/cikind/community-contributiondont-merge/needs-ci-validationarea/renovateOriginal evidence ↗
pull request

ci: replace needs-attention action and use app client ID

## Summary - replace `hramos/needs-attention` with pinned `actions/github-script@v9` logic - preserve the existing issue-label transition: when the issue author replies to an issue labeled `need-more-info`, remove that label and add `info-completed` - configure `actions/create-github-app-token` in the image workflow with its `client-id` input and the `AUTO_C

importance 5@bogdankraskoopenrelease-note/cikind/community-contributiondont-merge/needs-ci-validationarea/renovateOriginal evidence ↗
pull request

datapath: turn ARP off on the base devices before bringing them up

The clustermesh conformance job fails check-log-errors on the IPv6 native-routing legs with one warning from a freshly booted agent: "failed to find valid IPv6 address for cilium_net". setupVethPair brings cilium_host and cilium_net up before setupBaseDevice turns ARP off on them, so the kernel runs duplicate address detection on the link-locals it generates

importance 5@aanmclosedrelease-note/bugbackport-done/1.20Original evidence ↗
pull request

gateway-api/gamma: refresh CEC owner refs on route recreation

When a GAMMA HTTPRoute is deleted and recreated with the same name, the generated CiliumEnvoyConfig is updated in place. Before this change, ensureEnvoyConfig() only replaced the spec and left the previous OwnerReferences unchanged. That meant the CEC could still be owned by the old route UID after the new route had been reconciled. In delete-and-recreate fl

importance 5@mhofstetterclosedkind/bugrelease-note/bugready-to-mergearea/servicemeshfeature/k8s-gateway-apiOriginal evidence ↗
pull request

bpf: lb: use dedicated new_backend bool

Update the change introduced by 64527fb1c31e ("bpf: dsr: always forward DSR info to newly selected remote backend"), and transport the `new_backend` information via a dedicated bool. This seems to help with BPF program complexity.

importance 5@julianwiedmannclosedarea/datapathrelease-note/misckind/complexity-issuearea/loadbalancingarea/kprOriginal evidence ↗
pull request

[v1.20] bpf: dsr: various fixes

Backport * [ ] #47388 * [ ] #47529 * [ ] #47593 * [ ] #47640 * [ ] #47592 * [ ] #47841 ```release-note Fix various aspects in the DSR feature: support TCP-RST after switching to a new backend, fix processing of fragmented TCP traffic, fix accidental RevDNAT of a connection which matches an earlier DSR connection. ``` ```upstream-prs 47388 47529 47593 47640 4

importance 5@julianwiedmannclosedkind/backportsbackport/1.20Original evidence ↗
pull request

v1.20 Backports 2026-08-10

* [ ] #47587 (@thorn3r) * [x] #47780 (@giorio94) * [ ] #47208 (@iwanhae) * [ ] #47754 (@weizhoublue) * [ ] #47741 (@jdw6359) * [x] #47758 (@mhofstetter) * [x] #47766 (@mhofstetter) * [x] #47824 (@MrFreezeex) * [ ] #47838 (@aanm) * [x] #47844 (@bimmlerd) * [ ] #47801 (@aanm) Once this PR is merged, a GitHub action will update the labels of these PRs: ```upstr

importance 5@pippolo84closedkind/backportsfeature/k8s-gateway-apibackport/1.20Original evidence ↗
pull request

operator/ipam: Remove the per-node pool-maintainer retry trigger

Each CiliumNode creates 4 triggers today, and one of them exists only to call another one: the "-retry" trigger's entire body is `poolMaintainer.Trigger()`, rate limited to one call per minute. That is one goroutine and one timer per node, which on a large enough production cluster where the majority of goroutine count is driven by node count, amounts to a q

importance 5@HadrienPatteopendont-merge/needs-release-note-labelOriginal evidence ↗
issue

Operator/IPAM: recover nodes dropped from the instance cache by the full ENI resync

### Is your proposed feature related to a problem? Yes and it has been reported [here as well](https://github.com/cilium/cilium/issues/35404). I hit this running: Cilium v1.19.4, EKS, ENI IPAM mode, cilium-operator with `eni.subnetTagsFilter`. During a big scale-up, 348→432 instances in ~2 min, 5 freshly launched nodes were stuck permanently with `available=

importance 4@ryanjwongclosedkind/featurestalearea/enikind/cfparea/ipamOriginal evidence ↗
issue

On-demand synthetic probing for running workloads

### Is your proposed feature related to a problem? Currently, verifying connectivity or debugging policy drops between specific running endpoints in a Kubernetes cluster is either reactive or intrusive: - **Reactive**: Hubble provides excellent observability, but it relies on existing application traffic. If an app is silent or failing to initiate connection

importance 4@arighnacopenkind/featurestalekind/cfpOriginal evidence ↗
issue

Netkit + endpointRoutes + hostNamespaceOnly reclassifies service replies as new flows

### Is there an existing issue for this? - [x] I have searched the existing issues ### Version equal or higher than v1.20.0 and lower than v1.21.0 ### What happened? I built a new single node cluster using "modern Cilium settings" and Tailscale Operator. The specific problematic settings are the combination of: - `bpf.datapathMode=netkit` - `endpointRoutes.e

importance 4@evan314159openkind/bugarea/datapathkind/community-reportOriginal evidence ↗
issue

pkg/idpool: use lazy map allocation in NewIDPool to reduce memory usage

### Is there an existing issue for this? - [x] I have searched the existing issues ### Version equal or higher than v1.20.0 and lower than v1.21.0 ### What happened? ### the bug When `NewIDPool(minID, maxID)` is called in `pkg/idpool/idpool.go`: - It immediately creates and populates a hash map (`map[ID]struct{}`) for all IDs in the range `[minID, maxID]`. -

importance 4@DARSHANR007openkind/bugneeds/triagekind/community-reportOriginal evidence ↗
issue

Gateway API: Envoy upstream replies from same-node backends lost (RST), nondeterministic across restarts — k3s/Ubuntu-raspi, not reproducible on kind

### Is there an existing issue for this? - [X] I have searched the existing issues Closest matches are #47400 / #46260 / #26584, but those are about **ingress** traffic to L7LB frontends being dropped at TC on specific device types. This issue is different: ingress reaches Envoy fine — it is Envoy's **upstream replies from same-node backends** that are lost,

importance 4@thdxgopenOriginal evidence ↗
pull request

contrib: Don't descend into ~/.cache subdirs when chowning in builder.sh

When Podman is used as Docker's drop-in replacement, it mounts volumes owned by user inaccessible by root inside the container, and the recursive chown fails. Don't try to go inside the mountpoints when fixing the ownership of /home/ubuntu. Fixes: 65cdb42f3ff6 ("contrib: chown ~/.cache in builder.sh") ```release-note Follow-up bugfixes for builder.sh. ```

importance 4@gentoo-rootopendont-merge/needs-rebaserelease-note/miscOriginal evidence ↗
pull request

Pr/jwi/main/l7lb route

Please ensure your pull request adheres to the following guidelines: - [ ] For first time contributors, read [Submitting a pull request](https://docs.cilium.io/en/stable/contributing/development/contributing_guide/#submitting-a-pull-request) - [ ] All code is covered by unit and/or runtime tests where feasible. - [ ] All commits contain a well written commit

importance 4@julianwiedmannopenarea/datapathstalerelease-note/miscOriginal evidence ↗
pull request

bgp: add BGP Monitoring Protocol (BMP, RFC 7854) support

## Summary Adds **BGP Monitoring Protocol (BMP, [RFC 7854](https://datatracker.ietf.org/doc/html/rfc7854))** support to the Cilium BGP Control Plane. Cilium nodes can stream the state of their BGP instances to one or more external BMP monitoring stations, giving operators a real-time, read-only view of what each node receives and advertises over BGP — withou

importance 4@nvibertopenstaledont-merge/needs-release-note-labelOriginal evidence ↗
pull request

datapath: reimplement VLAN_FILTER using load-time config array

Reimplement the `--vlan-bpf-bypass` allowlist using five load-time config slots instead of the compile-time `VLAN_FILTER` preprocessor macro, as proposed in #38721. The macro was generated from the VLAN subinterfaces present at agent startup. Subinterfaces created later were never added to the filter and their tagged frames were dropped until an agent restar

importance 4@skymenschopenstaledont-merge/needs-release-note-labelkind/community-contributionOriginal evidence ↗
pull request

Fix: data race for unlocked map read in regeneration goroutine

<!-- Description of change --> This is a Go map concurrent read data race bug. The core issue is that a new goroutine is spawned to perform `e.isPropertyLocked()` instead of calling the API on the original goroutine ``` go func() { if !e.isPropertyLocked(endpointtypes.PropertyFakeEndpoint) { e.scrubIPsInConntrackTable() } close(datapathRegenCtxt.ctCleaned) }

importance 4@weizhoublueopendont-merge/needs-release-note-labelkind/community-contributionOriginal evidence ↗
pull request

test(bpf): parallelize eBPF test execution

This PR contains some enhancements to the eBPF execution step to help improve the eBPF test suite speed discussed in #45133. Currently the eBPF tests are executed serially when running `make run_bpf_tests`. Each eBPF test file (.o) is loaded independently and does not share any state across the file boundary. So the test runner can be updated to load/execute

importance 4@lconneryopenrelease-note/cikind/community-contributionOriginal evidence ↗
pull request

policy: Implement Shared Policy LPM Trie map

This patch implements a globally shared LPM Trie policy map (`cilium_policy_shared`) alongside a local overlay hash map (`cilium_policy_overlay`) mapping endpoint IDs to Rule Set IDs. This replaces legacy per-endpoint BPF policy maps, significantly reducing kernel control-plane memory footprint (~97.6% savings) and BPF map count (from O(Endpoints) to O(1)),

importance 4@tsotne95dont-merge/needs-release-note-labelOriginal evidence ↗
pull request

bpf: stop dropping MLD and router solicitation sent from pods

Pods keep showing up in Hubble as dropping their own ICMPv6 traffic with "Invalid source ip". The source is always the link local address that the kernel gives the pod interface, and the messages are the MLD reports and router solicitations that the kernel sends on its own. The from container path lets neighbour solicitation and neighbour advertisement past

importance 4@ssam18opendont-merge/needs-release-note-labelkind/community-contributionOriginal evidence ↗
pull request

gateway-api: mark unresolved backend service ports in route status

Mark backend references with unknown Service ports as unresolved during shared Gateway API route validation. So far, shared backend validation only checked whether the referenced backend Service exists. If the Service was present but the referenced `backendRef.port` was not exposed by that Service, the route could still end up with `ResolvedRefs=True` and th

importance 4@mhofstetterclosedkind/bugrelease-note/bugready-to-mergearea/servicemeshfeature/k8s-gateway-apiOriginal evidence ↗
pull request

ci: skip etcd log fetch when kvstore was never started

The Fetch artifacts step runs on any failure, including a failure of the step that brings up the cluster. On kvstore matrix legs it then runs kubectl -n kube-system logs kvstore with no cluster to talk to, so it exits 1 with "connection to the server localhost:8080 was refused" and one real failure becomes two red steps. Legs without kvstore stay green, beca

importance 4@aanmclosedrelease-note/cibackport-done/1.18backport-done/1.19backport-done/1.20Original evidence ↗
pull request

golangci-lint: Fix `netlink.AddrList` escaping the forbidigo check

The `ErrDumpInterrupted` pattern has been `(Handle\.)?("AddrList|BridgeVlanList|...` since it was introduced. The double quote character makes the first alternative `"AddrList`, which cannot match anything, so `netlink.AddrList` and `netlink.Handle.AddrList` have never been flagged. Fixing this surfaces three new previously accidentally ignored findings. Thi

importance 4@HadrienPatteclosedready-to-mergerelease-note/miscOriginal evidence ↗
pull request

ipam/multi-pool: Allow regaining ownership of removed CIDRs

A CIDR which disappears from the CiliumNode CRD spec while IPs are allocated from it is marked as removed: we keep its allocator to hold on to the in-use IPs, stop allocating from it, and keep advertising it as allocated to signal to the operator that we want the CIDR back. But nothing ever cleared that mark, so the CIDR stayed unallocatable for the lifetime

importance 4@HadrienPatterelease-note/bugarea/ipamneeds-backport/1.20Original evidence ↗
pull request

docs: add OpenChoreo to USERS.md

Added OpenChoreo entry with details on network security and observability. Please ensure your pull request adheres to the following guidelines: - [ ] For first time contributors, read [Submitting a pull request] - [ ] All code is covered by unit and/or runtime tests where feasible. - [ ] All commits contain a well written commit description including a title

importance 4@kavishkafernandoopenrelease-note/misckind/community-contributionOriginal evidence ↗
pull request

DONOTMERGE : test commit

Testing changes that are included in: https://github.com/cilium/cilium/pull/47787 https://github.com/cilium/cilium/pull/47786 https://github.com/cilium/cilium/pull/47785 https://github.com/cilium/cilium/pull/47784

importance 4@Artyopopendont-merge/needs-release-note-labelOriginal evidence ↗
pull request

bpf: preserve original source in NodePort tunnel traces

## Summary Preserve the original IPv4 or IPv6 client address in `TRACE_TO_OVERLAY` when tunneled NodePort or LoadBalancer traffic is SNATed. Hubble can then show the client address in `source` and the SNAT address in `source_xlated`. Flows without SNAT and other encapsulation paths are unchanged. ## Testing - Overlay NodePort BPF runtime tests - Hubble parse

importance 4@daroxopendont-merge/needs-release-note-labelOriginal evidence ↗
pull request

node: don't select IFA_F_DEPRECATED addresses as the node IP

Please ensure your pull request adheres to the following guidelines: - [x] For first time contributors, read [Submitting a pull request] - [x] All code is covered by unit and/or runtime tests where feasible. - [x] All commits contain a well written commit description including a title, description and a `Fixes: #XXX` line if the commit addresses a particular

importance 3@arcusbuildsopenkind/enhancementrelease-note/minorarea/agentkind/community-contributionOriginal evidence ↗
pull request

bpf: don't reclassify an already reverse-NATed service reply

- [X] For first time contributors, read [Submitting a pull request] - [X] All code is covered by unit and/or runtime tests where feasible. - [X] All commits contain a well written commit description including a title, description and a `Fixes: #XXX` line if the commit addresses a particular GitHub issue. - [X] If your commit description contains a `Fixes: <c

importance 3@evan314159openrelease-note/bugkind/community-contributionOriginal evidence ↗
pull request

Fixes #47918: Handle label filters as regex when loading from file

Please ensure your pull request adheres to the following guidelines: - [x] For first time contributors, read [Submitting a pull request] - [x] All code is covered by unit and/or runtime tests where feasible. - [x] All commits contain a well written commit description including a title, description and a `Fixes: #XXX` line if the commit addresses a particular

importance 3@AverageMarcuscloseddont-merge/needs-release-note-labelkind/community-contributionOriginal evidence ↗
pull request

cilium-cli/connectivity: detect Cilium version in connectivity perf setup

`cilium connectivity perf` always reports "Cilium version: 0.0.0" in its info banner, regardless of the actual Cilium version running in the cluster. `setupAndValidatePerf()`, the setup path used by the `perf` subcommand, never calls `initCiliumPods()`/`detectCiliumVersion()`, unlike `setupAndValidate()` (used by `connectivity test`). `CiliumVersion` is ther

importance 3@khaddictopenrelease-note/bugkind/community-contributioncilium-clicilium-cli-exclusiveOriginal evidence ↗
pull request

hubble/relay: stop gRPC health server on shutdown

The gRPC health server is started as part of Server.Serve(), but Server.Stop() only stops the main gRPC server. This leaves the health listener running and keeps Serve() blocked in errgroup.Wait(). Stop the gRPC health server during shutdown and add a test that verifies Serve() returns after Stop(). Please ensure your pull request adheres to the following gu

importance 3@xandauopenkind/bugrelease-note/bugkind/community-contributionneeds-backport/1.17area/hubbleOriginal evidence ↗
pull request

helm: Support ipFamilyPolicy and ipFamilies for dual-stack in ingressController service

This extension of the Helm chart allows setting `ipFamilyPolicy` and `ipFamilies` for the LoadBalancer service when using shared mode. This makes it possible to create a shared dual-stack LoadBalancer service with the following Helm values: ```yaml ingressController: enabled: true loadbalancerMode: shared service: ipFamilies: - IPv4 - IPv6 ipFamilyPolicy: Re

importance 2@heptaliumopenstaledont-merge/needs-release-note-labelkind/community-contributionOriginal evidence ↗
pull request

overlay: Remove unnecessary identity lookup

Commit dfa42c75c409 ("bpf: Fix kube-apiserver policy drop in tunneling") fixed a temporary packet disruption issue during upgrade from v1.11 to v1.12 by overriding a security identity lookup for node-to-node traffic using the locally constructed ipcache. The code for that case was intended to be temporary to ensure hitless upgrade at the time, and that code

importance 2@joestringeropenarea/datapathsig/policystalerelease-note/miscdont-merge/waiting-for-reviewOriginal evidence ↗