🚀 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
``` This HostFW hook lives in bpf_host's `from-netdev` program. It operates on packets that have been successfully RevSNATed (otherwise we would have bailed out earlier). And ipv*_host_policy_ingress() only takes action for packets where the RevSNATed destination IP is mapped as HOST_ID - otherwise it returns immediately. The next step in the program chain i
For "various reasons", I am running a custom LWT based Geneve overlay that needs to intersect with our Cilium deployment. I noticed that traffic was not routing into the overlay, and through the pure magic that is `cilium monitor --type drop -v` I was able to get this message: ``` xx drop (FIB lookup failed, 6) flow 0x0 to endpoint 0, ifindex 1344, file bpf_
`ValidateHeaderModifier` write an `Accepted=False` condition. But `ValidateMatchRegexps` writes the same condition type, and `helpers.MergeConditions` matches by type and replaces in place. In `setHTTPRouteStatuses` in gateway_reconcile.go both run in one loop, so the regex message overwrites the header modifier message. `setGRPCRouteStatuses` has the same l
`http.Transport.Dial` has been deprecated since Go 1.7 (`SA1019`) in favor of `DialContext`, which allows the transport to cancel dials as soon as they are no longer needed. Per the Go docs, if both fields are set `DialContext` takes priority — so the current code is effectively opting out of context-aware dialing on every request the Cilium health checker's
The name of a CiliumEnvoyConfig is derived from the Gateway name ·cilium-gateway-<name>·, so a recreated Gateway with the same name necessarily maps to the same CiliumEnvoyConfig object. Since Gateway has no finalizer, deleting a Gateway relies entirely on Kubernetes garbage collection for cleanup, which is asynchronous and may take seconds or longer. When a
When `NewIDPool` creates an ID pool, it used to fill a map with every single ID right away. For a pool of 1,000,000 IDs, this took ~37.8 MB of memory and ~141 ms of setup time upfront before any IDs were even used. This change switches to allocating IDs on demand using a `nextID` counter. It only adds IDs to maps when they are released or inserted, saving me
## Description of change Make HTTPRoute ExternalAuth fail closed when the backend reference is invalid or cannot be resolved. Previously, an invalid ExternalAuth backend reference could cause the filter to be omitted while the route remained active, effectively allowing requests to bypass external authentication. This change: - Fails closed with HTTP 500 whe
`setStaticAddressStatus` compared addresses from `Gateway.spec.addresses` with the generated Service status as strings. Equivalent IPv6 addresses can use different textual representations, causing an allocated and working static address to be reported as unusable. Parse both sides with `netip.ParseAddr` and compare the resulting addresses. Hostname-only Serv
Add opt-in protocol and destination port labels to hubble_policy_verdicts_total. Both labels are disabled by default to preserve the existing metric label set. The destination port label may increase metric cardinality depending on the traffic pattern. Please ensure your pull request adheres to the following guidelines: - [x] For first time contributors, rea
Newer GKE node images configure `containerRuntimeEndpoint` in `/home/kubernetes/kubelet-config.yaml` instead of `/etc/default/kubelet`. This causes the existing GKE containerd detection in node-init to miss the GKE-specific path and fall through to the generic kubelet handling. This change: * preserves the existing legacy GKE/containerd detection; * recogniz
This PR adds support for setting DSCP marks on Pod egress traffic through the Bandwidth Manager. Pods can configure the DSCP value with the `bandwidth.cilium.io/egress-dscp` annotation. The annotation accepts values in the `0-63` range. The BPF datapath preserves the existing ECN bits while rewriting the IPv4 TOS or IPv6 Traffic Class field. The feature is h
Sometimes users report issues against the latest pre-release. Sometimes they are also reporting a bug on a different version but the template is too restrictive so they file the bug with the wrong version then add the version later on in the bug report. We already make it clear to the reporter that they should upgrade if the version is not listed, but I woul