Summary of Changes
Major Changes:
- Gateway API: ExternalAuth filter support for HTTPRoutes Cilium now supports the
ExternalAuthfilter type in HTTPRoutes (GEP-1494). Routes can delegate authorization decisions to an external service using either gRPC (Envoy ext_authz protocol) or HTTP. Configurable options include allowed request/response headers, request body forwarding, path prefix, and TLS-backed auth backends viaBackendTLSPolicy. (#45739, @gauteoh) - proxy: Bump cilium-envoy to v1.37.x (#45851, @sayboras)
Minor Changes:
- Add
encryption.ztunnel.ca.typeHelm value to select ztunnel's CA backend (spire|internal, defaultinternal). (#45861, @nddq) - Add
helm.sh/chartstandard label (#45771, @chernetskyi) - Adds optional fields for subject and private key options in certificate template when cert-manager is used to generate clustermesh-apiserver and hubble TLS certificates. (#45972, @owayss)
- alibabacloud: Migrate IP/CIDR fields to ip.Addr/Prefix wrappers (#46210, @HadrienPatte)
- Azure IPAM: track subnet once per AzureInterface on CiliumNode status, matching AWS and AlibabaCloud IPAM models. The previous per-address
addresses[].subnetand flatinterfaces[].cidrfields are deprecated. (#45985, @jaredledvina) - azure: Remove duplicate
GetInstancecall in per-instance resync (#46192, @HadrienPatte) - azure: Skip listing NIC of empty VMSSs (#46129, @HadrienPatte)
- bgp: Bump GoBGP from v3 to v4.5.0 (#45952, @rastislavs)
- clustermesh/docs: Improve Cluster Mesh intro documentation (#46021, @MrFreezeex)
- Extend default APIInteractions metric buckets from 10s to 2min (#46115, @kamilWyszynski1)
- feat(sdp): Support DNS metrics from Standalone DNS Proxy (#44601, @vipul-21)
- fqdn: Deprecate toFQDNs pre-cache flag and remove preflight poller (#45295, @HadrienPatte)
- gateway-api: Add HTTPRoute CORS filter support. (#45924, @arybolovlev)
- gateway-api: add support for disabling gRPC-web translation (#45984, @thorn3r)
- helm: Remove loadBalancer.standalone option (#46070, @joestringer)
- ipam: Add CIDR-based release mechanism for ENI multipool mode (#45958, @HadrienPatte)
- ipam: Switch ENI IPAM from CRD to multi-pool allocator (#45154, @HadrienPatte)
- lb: support EndpointSlice weights for Maglev backends (#46061, @mhofstetter)
- policies that reference AWS VPC groups are now transformed in to a CiliumCIDRGroup. (#44704, @squeed)
- Prevent premature LRU eviction of newly inserted socket reverse NAT entries by touching the entry after insertion to set the LRU reference bit. (#46228, @luoxuanqiang)
- Relax DisableCiliumEndpointCRD to work with CES and operator slim mode (#45698, @kamilWyszynski1)
- Replace boringcrypto with upstream Go crypto libraries (#46092, @HadrienPatte)
- Shrink cilium-cni binary size by 80% (#45845, @giorio94)
- Updates the CiliumPodIPPool CRD version to v2. Adds a new per-CIDR configuration option "reservedRanges". (#44383, @kyounghoonJang)
- When IPv4 traffic exits an Egress Gateway node, it strictly uses the network interface specified in the CiliumEgressGatewayPolicy (or the default interface). This matches the behavior for IPv6 traffic. (#45833, @julianwiedmann)
- wireguard:mtu: fix mtu calculation with potential padding (#45940, @smagnani96)
Bugfixes:
- Always add cluster label to node when
nodeSelectorLabelsis enabled to fix CiliumNetworkPolicy withfromNodes/toNodeswithpolicy-default-local-clusterenabled (enabled by default in 1.19+) (#46068, @MrFreezeex) - azure: Fix public IP reassignment failure loop on operator restart (#46240, @HadrienPatte)
- bgp: Don't provide default_gateway reconciler when disabled (#45911, @YutaroHayakawa)
- bgp: Reduce amount of soft peer resets by service reconciliation and fix potentially missed incorrect metadata update upon failed reconciliation. (#45927, @rastislavs)
- bpf: don't silently drop packets with tcx hooks (#45740, @Andreagit97)
- bpf: egressgw: don't use bpf_redirect_neigh() for L3 packets (#45703, @julianwiedmann)
- bpf: fix host proxy packet routing to pods (#45916, @atykhyy)
- bug: fixed weighted backend traffic splitting for TLSRoute passthrough listeners in Gateway API (#45937, @nickolaev)
- cilium-dbg:
cilium map listnow displays "unknown" instead of 0 for maps that do not support cache-based entry counting. (#44951, @skymensch) - datapath/mtu: add altname to mark cilium owned interfaces and do skip changing MTU on interfaces not managed by cilium (#45799, @bersoare)
- Fix a bug that causes the NamespaceSelector field in a CiliumEgressGatewayPolicy to be corrupted, and no longer effective. (#45926, @julianwiedmann)
- Fix a rare bug in clustermesh-apiserver that triggers incorrect deletion of a valid endpoint entry from the etcd under high pod churn (#45780, @adamwathieu)
- Fix allowedRoute namespace and kind restrictions on multi-listener Gateways. (#45693, @eufriction)
- Fix BGP PeerConfig status cleanup so it no longer times out when there are no managed conditions to remove. (#45967, @ysksuzuki)
- Fix BPF compilation failure on transient direct routing device address loss (#44894, @christarazi)
- Fix BPF LB map key collision where HostPort/NodePort expansion could overwrite a LoadBalancer frontend when the node IP matches the LoadBalancer external IP (e.g. k3s/RKE2 L2 ServiceLB). Also fix a ~30-minute NodePort outage that occurred after deleting a LoadBalancer whose external IP was a node address with a port in the NodePort range. (#45314, @syedazeez337)
- Fix bug that would disrupt node connectivity when ClusterIP/LoadBalancer VIPs overlapped with node-local IP addresses. (#45572, @ajmmm)
- Fix Cilium node IPv6 selection silently picking an address that failed duplicate-address detection, which could result in the node advertising an address belonging to another node (#45868, @ssam18)
- Fix dedicated Ingress reconciliation panic on invalid TLS passthrough rules (#45737, @weizhoublue)
- Fix Hubble metrics
labelsContextparsing: values must now be comma-separated (e.g.labelsContext=source_ip,destination_ip). Previously, mixing,and|in the value would silently produce invalid tokens. (#45809, @bitflicker64) - Fix Kubernetes ClusterNetworkPolicy (network-policy-api, alpha) match expressions (matchExpressions) being ignored when selecting endpoints. An "In" match selected no endpoints (e.g. a Deny rule would not block its intended traffic) and a "NotIn" match selected all endpoints, so policies using match expressions were not enforced as written. CiliumNetworkPolicy, CiliumClusterwideNetworkPolicy, and standard Kubernetes NetworkPolicy are not affected. (#46253, @aanm)
- fix(gateway-api): set ready condition in endpointSlice to true (#46237, @ulrichgiraud)
- fix: nil pointer dereference panic due to uninitialized logger (#45782, @weizhoublue)
- Fixed unsolicited IPv6 L2 announcements ignored by receiving hosts, as not conformant to RFC 4861 (#46079, @giorio94)
- Fixes a bug where policymap pressure was incorrectly being reported as 0. (#45791, @squeed)
- gateway-api: fix GatewayClass field index (#46127, @thorn3r)
- gateway-api: Fix silent drops of routes on multi listener gateways (#45821, @weizhoublue)
- iptables: match wireguard packets by proto+port instead of packet mark (#45974, @bersoare)
- multipool: Fix retries for CiliumNode Get errors (#46124, @pippolo84)
- operator/ipam: Avoid short-lived ctx for allocators start (#46034, @pippolo84)
- Revert Gateway-API/Ingress endpointslice removal (incl. restore of dummy ingress endpoint) (#45679, @mhofstetter)
CI Changes:
- .github: Enable ciliumbot to pass patch checks (#45977, @joestringer)
- bpf: remove redundant build config (#46175, @julianwiedmann)
- bpf: test: egressgw: fine-tune the FIB lookup for local packets (#46099, @julianwiedmann)
- bpf: tests: minor improvements to legacy GENEVE-DSR test (#46081, @julianwiedmann)
- chore(deps): update lvh-images for conformance-runtime (#45922, @julianwiedmann)
- ci: add interface addresses in TestPrivilegedReplaceRoute (#45827, @bersoare)
- ci: Clean-up disk before running go checks (#45895, @fgiloux)
- ci: gate conn-disrupt-test-check via explicit input (#46042, @ysksuzuki)
- ci: option to pass extra values_files_changes to dev chart push (#45702, @mhofstetter)
- ci:bpftrace: fail curl with corrupted binary download (#45948, @smagnani96)
- Fix stack depth reporting in verifier test (#46182, @pchaigno)
- gh: conn-disrupt: remove skip-include-conn-disrupt-test-ns-traffic flag (#46045, @julianwiedmann)
- gh: gateway-api: run disk-cleanup action (#45897, @julianwiedmann)
- gha/clustermesh: run on schedule, rather than on every push to main (#46088, @giorio94)
- gha: fix hour handling in Ariane scheduled workflow (#46083, @giorio94)
- gha: make conformance kubespray runner configurable (#46171, @giorio94)
- golangci-lint: Update
gomodguardlinter to v2 (#45860, @HadrienPatte) - helm: allow overriding of registry_prefix in charts (#46217, @sekhar-isovalent)
- ipam: Deflake TestMarkForReleaseNoAllocate (#46188, @pippolo84)
- loader: Support max stack depth in verifier logs (#46109, @pchaigno)
- loader: Support newer verifier logs (#45880, @pchaigno)
- pkg/loadbalancer: fix loadbalancer nodeport collision test (#46087, @ajmmm)
- Revert ".github/actions/e2e: Fix incorrect devices helm option syntax" (#45898, @joamaki)
- Revert "chore(deps): update all lvh-images main" (#45822, @pchaigno)
- Revert "chore(deps): update all lvh-images main" (#46221, @pchaigno)
- workflows/verifier: Fix again always-passing workflow status (#45899, @pchaigno)
- workflows/verifier: Fix always-passing workflow status (#45835, @pchaigno)
- workflows/verifier: Fix scheduled runs (#46176, @pchaigno)
- workflows: Reject GitHub's default email for SOB (#45912, @pchaigno)
- workflows: Update 6.6 LVH image (#46190, @pchaigno)
Misc Changes:
- .github: Make release note instructions clearer (#45768, @joestringer)
- Add documentation and warnings on DNS interception (#45525, @ferozsalam)
- Add extension points for cilium-envoy container lifecycle hooks (#45857, @0xch4z)
- Add schema to the "devices" helm option and expose it in docs. (#45830, @joamaki)
- always render enable-host-firewall in configmap (#44748, @shibaPuppy)
- Azure IPAM: Add tracking of the Primary IP per interface (#45976, @jaredledvina)
- Azure: Merge subnets during resyncInstance instead of replacing them (#45715, @jaredledvina)
- azure: Remove unused
GetVpcsAndSubnetsfunction (#46173, @HadrienPatte) - bgp: Handle errors from NewPathForPrefix (#46256, @rastislavs)
- bgp: Use CreatedAt timestamp instead of AgeNanoseconds in the internal Path type (#46113, @rastislavs)
- bpf/analyze: Always visit global functions (#45917, @pchaigno)
- bpf: constify and minor NAT cleanups (#46244, @julianwiedmann)
- bpf: egressgw: skip redirect checks in to-netdev for non-local traffic (#45955, @julianwiedmann)
- bpf: Fix should_redirect_peer under netkit (#46037, @borkmann)
- bpf: introduce pull_l3_hdr() helper for ethertype de-mux points (#45891, @saiaunghlyanhtet)
- bpf: local_delivery: add CB flag for "use_redirect_peer" (#46169, @julianwiedmann)
- bpf: local_delivery: condense usage of skb cb slots (#46064, @julianwiedmann)
- bpf: lxc: pull L3 header at first ethertype de-mux point (#45639, @saiaunghlyanhtet)
- bpf: nodeport: make l3_off in nodeport_lb4() static (#45797, @julianwiedmann)
- bpf: Refuse legacy host routing when in netkit mode (#46032, @borkmann)
- bpf: rename
aux.hto avoid malformed file path error upongo get(#45804, @tklauser) - chore(deps): update all github action dependencies (main) (#45745, @cilium-renovate[bot])
- chore(deps): update all github action dependencies (main) (#45992, @cilium-renovate[bot])
- chore(deps): update all github action dependencies (main) (#46014, @cilium-renovate[bot])
- chore(deps): update all github action dependencies (main) (patch) (#46133, @cilium-renovate[bot])
- chore(deps): update all lvh-images main (main) (patch) (#45390, @cilium-renovate[bot])
- chore(deps): update all lvh-images main (main) (patch) (#45879, @cilium-renovate[bot])
- chore(deps): update all-dependencies (main) (#45725, @cilium-renovate[bot])
- chore(deps): update base-images (main) (#45991, @cilium-renovate[bot])
- chore(deps): update base-images (main) (#46054, @cilium-renovate[bot])
- chore(deps): update cilium/cilium digest to 6bbf438 (main) (#46011, @cilium-renovate[bot])
- chore(deps): update cilium/cilium digest to e1b3ec8 (main) (#46005, @cilium-renovate[bot])
- chore(deps): update cilium/cilium-cli action to v0.19.3 (main) (#46134, @cilium-renovate[bot])
- chore(deps): update cilium/cilium-cli action to v0.19.4 (main) (#46263, @cilium-renovate[bot])
- chore(deps): update dependency bufbuild/buf to v1.69.0 (main) (#45869, @cilium-renovate[bot])
- chore(deps): update dependency bufbuild/buf to v1.70.0 (main) (#46265, @cilium-renovate[bot])
- chore(deps): update dependency cilium/little-vm-helper to v0.0.30 (main) (#46108, @cilium-renovate[bot])
- chore(deps): update docker.io/library/golang:1.26.3 docker digest to 2d6c802 (main) (#46163, @cilium-renovate[bot])
- chore(deps): update gcr.io/etcd-development/etcd docker tag to v3.6.11 (main) (#45900, @cilium-renovate[bot])
- ci: add output option "skip" tests to derive config action (#45971, @smagnani96)
- cilium-cli/sysdump: use bgp hive shell commands instead of the old rest API based commands (#45754, @martonra)
- Clarify AI policy guidance in PR template (#46126, @joestringer)
- clustermesh: add ClusterEndpointSlice type (#46160, @MrFreezeex)
- clustermesh: update MCS-api dependency to v0.5.0 and adopt the yaml conformance output (#45934, @MrFreezeex)
- cni: extract configuration into separate package (#46114, @giorio94)
- CODEOWNERS: Assign ztunnel workflows to ztunnel (#45776, @joestringer)
- completion: Prune pending completions after Wait (#46060, @jrajahalme)
- daemon: Fix privileged integration policy test (#46056, @jrajahalme)
- datapath: clean up USE_BPF_PROG_FOR_INGRESS_POLICY for endpoint programs (#46121, @julianwiedmann)
- datapath: remove USE_BPF_PROG_FOR_INGRESS_POLICY (#46248, @julianwiedmann)
- Deprecate Identity.StringID & Refactor callers to use String() instead (#46131, @furkan-asani)
- deps: Bump GoBGP to most recent 4.5.1 pre-release commit (#46226, @rastislavs)
- Do not pin Cilium GH actions (#45826, @aanm)
- docs: Add caveats on Kubernetes versions when using host L7 DNS policies (#45843, @atykhyy)
- docs: Add Gateway API default TLS certificate example (#45807, @arybolovlev)
- docs: add small CiliumCIDRGroup scalability callout (#45763, @squeed)
- docs: Document BTF as a requirement (#46063, @pchaigno)
- docs: drop stale nodeinit from Azure CNI chaining guide (#46128, @vipul-21)
- docs: Extend Azure IPAM documentation (#45575, @HadrienPatte)
- docs: Fix DOCS_BUILDER_REPO env variable for BSD sed compatibility (#46033, @arybolovlev)
- docs: fix Markdown-style hyperlink in mutual-authentication.rst (#45751, @bitflicker64)
- docs: fix typo cillium -> cilium in encryption-ztunnel.rst (#45838, @kiranbabu09)
- docs: Update docs-builder for Makefile usage (#45774, @joestringer)
- Documentation: Update outdated datapath config docs (#46225, @dylandreimerink)
- egressgw: minor changes for network interface detection (#45638, @julianwiedmann)
- endpoint: set and get the value of the RTInfo's encoding (#45794, @ldelossa)
- endpoint: Update BenchmarkWriteHeaderfile benchmark (#45592, @odinuge)
- endpoint: use temporary directory for log file in TestPolicyLog (#45801, @tklauser)
- envoy: Apply default config in standalone_envoy_test (#46052, @jrajahalme)
- envoy: finalize policy update (#46066, @jrajahalme)
- Envoy: Network policy cleanup (#46069, @jrajahalme)
- Fix new golangci-lint findings (#45894, @HadrienPatte)
- Fix schema for
gatewayAPI.gatewayClass.create. (#45741, @reitermarkus) - Fix typo: StringID -> String in doc comment of Identity.String function (#46012, @furkan-asani)
- fix(deps): update all go dependencies main (main) (#45993, @cilium-renovate[bot])
- fix(deps): update all go dependencies main (main) (#46006, @cilium-renovate[bot])
- fix(deps): update all go dependencies main (main) (#46136, @cilium-renovate[bot])
- fix(deps): update all go dependencies main (main) (#46152, @cilium-renovate[bot])
- fix(deps): update all go dependencies main (main) (#46264, @cilium-renovate[bot])
- Fix: Prevent external-group hash collisions that can merge distinct policies (#45820, @weizhoublue)
- gateway-api: Fix BackendTLSPolicy connections to TLS 1.3-only services (#45865, @weizhoublue)
- gateway-api: remove ref of v1beta1 grpcroute (#45828, @mhofstetter)
- gateway-api: remove some usages of v1alpha2 TLSRoute (#45825, @mhofstetter)
- gateway-api: treat BackendTLSPolicy as required type (#46031, @mhofstetter)
- gateway-api: treat TLSRoute as required type (#45930, @mhofstetter)
- gw-api: add external auth example (#46098, @mhofstetter)
- gw-api: cleanup cecTranslator (#46110, @mhofstetter)
- health: Add health/history command (#46102, @joamaki)
- helm: add minReadySeconds support to DaemonSets (#45808, @PhilipSchmid)
- images: Fix Envoy update script (#46057, @jrajahalme)
- images: relax dockerfile match when updating builder and runtime images (#45970, @giorio94)
- ip: Add
netip.Addr/Prefixwrappers for Kubernetes API types (#46047, @HadrienPatte) - ipam/multi-pool: Do not propagate errors in case of conflicts (#46172, @pippolo84)
- ipam: Decorrelate agent and operator implementations (#45765, @HadrienPatte)
- ipam: Migrate
AllocationResult.{CIDRs,GatewayIP}to netip types (#45790, @HadrienPatte) - ipam: Migrate
AllocatorandAllocationResulttonetip.Addr(#45647, @HadrienPatte) - ipam: Migrate operator-side IP-keyed maps to
netip.Addr(#45859, @HadrienPatte) - ipam: Remove unused ForeachAddress abstraction (#46111, @HadrienPatte)
- ipsec: misc agent fixes and cleanups (#45641, @smagnani96)
- k8s/node: Remove NodeIdentity field from CiliumNode (#45685, @gandro)
- k8s/portforward: avoid panic in case of service without ports (#46230, @tklauser)
- k8s/tables: extract k8s StateDB tables out of daemon/k8s (#45786, @tklauser)
- kpr/initializer: fix reserved port range validation (#46229, @tklauser)
- lbipam: Apply fixes for bugs in LBIPAM refactor (#45800, @dylandreimerink)
- loadbalancer: Fix resource-drain and transaction churn in the background zone watcher by caching zone state and precisely filtering zone-driven traffic distribution policies. (#45752, @08volt)
- loadbalancer: proxy ports are now resolved per frontend instead of per service, preventing one port from losing its L7 redirect when multiple listeners share a service. (#45949, @eufriction)
- loadbalancer: use structured logging in config (#45785, @statsops)
- loadbalancing: Expose ReflectorWaitTime via flag (#46059, @brb)
- mac: remove unused
CArrayString(#45946, @tklauser) - MAINTAINERS: Add Simone Magnani (#46094, @pchaigno)
- Miscellaneous improvements to the fake client (#45784, @giorio94)
- operator/ipam: Consolidate cloud allocator bootstrap (#45975, @HadrienPatte)
- operator/ipam: Miscellaneous improvements to allocators (#46035, @pippolo84)
- pkg/node/sync: Add support for injecting init functions (#45921, @joamaki)
- pkg/{aws,azure}: Use go 1.26's
new()(#45862, @HadrienPatte) - pkg/{aws,azure}: Use k8s
sets.Settype for string sets (#45813, @HadrienPatte) - Policy minor fixes (#46058, @jrajahalme)
- policy: Add error logging when parsing invalid CIDRs in
GetAsEndpointSelectors(#45781, @statsops) - policy: Fix data race in resolve tests under -race (#45941, @christarazi)
- policy: remove unused
EmptyStringLabels(#46044, @tklauser) - Prepare for release v1.20.0-pre.2 (#45772, @cilium-release-bot[bot])
- README: Update releases (#45779, @joestringer)
- README: Update releases (#45964, @thorn3r)
- refactor(endpointmanager): use GetEndpointsByNamespace in namespace_updater (#45540, @zbb88888)
- Remove defunct
l2podAnnouncements.interfaceHelm value that rendered a configmap key the agent no longer recognises, causing crash-loops when L2 pod announcements were enabled. Users must usel2podAnnouncements.interfacePatterninstead. (#46093, @salamidrus) - renovate: skip sphinx from being updated (#45812, @aanm)
- Revert "tools/stackwhere: Add a tool to analyze BPF stack usage" (#45759, @dylandreimerink)
- Split cloud providers into specific files (#45680, @aanm)
- tools/cloud-dep-check: gitignore the built binary (#45892, @HadrienPatte)
- tools: Add statedblint (#45896, @joamaki)
- vendor: Update
controller-runtimetov0.24.0(#45919, @HadrienPatte) - vendor: Update
controller-toolsfork tov0.21.0-1(#46039, @HadrienPatte) - ztunnel: consolidate MockEndpointManager into pkg/testutils (#46067, @nddq)
- ztunnel: split CA server into its own package (#45664, @nddq)
Other Changes:
- Fix Meeting Notes link in README (#46086, @parlakisik)
Docker Manifests
cilium
quay.io/cilium/cilium:v1.20.0-pre.3@sha256:c25d38b048b90a1755437aa71e0e1e6b778a6c16532c49300a62b8690def2cd2
clustermesh-apiserver
quay.io/cilium/clustermesh-apiserver:v1.20.0-pre.3@sha256:7604a20140321f4f0abe84284db8ee16b7817edf6593cc73016dc24ac52edae5
docker-plugin
quay.io/cilium/docker-plugin:v1.20.0-pre.3@sha256:ea9eb75ef2aca3d03330d2332748765f12d2683251be16fa4a51e891434811da
hubble-relay
quay.io/cilium/hubble-relay:v1.20.0-pre.3@sha256:d9fa9e132a9bcd5fa554995d708e152bd4b0282ac131984536d260b4c8c3abc3
operator-alibabacloud
quay.io/cilium/operator-alibabacloud:v1.20.0-pre.3@sha256:67e73aed47b871cb475dfdf76abcf4ddc11f7848aa16c40c77cea19b1de12e6e
operator-aws
quay.io/cilium/operator-aws:v1.20.0-pre.3@sha256:d63bd21ed1a135c2e4ff714142e293cef3fda1ff192b19a89d5c6177293eb778
operator-azure
quay.io/cilium/operator-azure:v1.20.0-pre.3@sha256:1f854ea98a4131d17fb1f956e9c5e3d2abbf1ae478030d7a20cbd50c1f371d62
operator-generic
quay.io/cilium/operator-generic:v1.20.0-pre.3@sha256:5be513260832401fa50d2e112396130ac17585c8e30a2e6e4529282c7fc39fd9
operator
quay.io/cilium/operator:v1.20.0-pre.3@sha256:12a7c328625d88a3280139a2c868ecd945f0280a557513ffdfc670a6593992f6