CFP: XListenerSet for Cilium GatewayAPI Controller
Cilium Feature Proposal
Summary
Add support for the experimental Gateway API resource XListenerSet, introduced in Gateway API v1.3+ (and still part of the experimental channel as of v1.4). This feature allows multiple Gateways to share listener configuration, improving configuration reuse and operational consistency.
Background / Motivation
We want to have XListenerSet support to allow users add their own blocks to gateway object and then merge it. Cilium 1.19.0-pre2 currently supports Gateway API up to v1.4.0, but the implementation in the operator/pkg/gateway-api controller does not appear to handle XListenerSet resources. When applying an XListenerSet manifest, the resource remains in the following state indefinitely:
Status: Conditions: Type: Accepted Status: Unknown Reason: Pending Message: Waiting for controller LastTransitionTime: 1970-01-01T00:00:00Z Type: Programmed Status: Unknown Reason: Pending Message: Waiting for controller
This suggests that the Cilium Gateway API controller does not yet reconcile or watch for the XListenerSet kind.
The XListenerSet feature was added to the experimental channel of the Gateway API spec to support configuration sharing and delegation of listener definitions. Support for this resource would allow users to reduce duplication in multi-Gateway setups and leverage the richer configuration model introduced in newer API versions.
Proposed Solution
Extend the Cilium Gateway API controller (in operator/pkg/gateway-api/) to:
Watch for XListenerSet resources from the Gateway API CRDs (group gateway.networking.x-k8s.io). Reconcile listener configuration from XListenerSet objects and apply them to corresponding Gateway resources that reference them. Propagate status and events for validation, conflicts, and merging (similar to how listeners are handled today). Optionally provide a feature gate or configuration flag for enabling experimental Gateway API kinds.
References
Gateway API v1.3 release notes: https://kubernetes.io/blog/2025/06/02/gateway-api-v1-3/
Gateway API experimental channel spec: https://gateway-api.sigs.k8s.io/concepts/versioning/#experimental-channel
XListenerSet examples: https://gateway-api.sigs.k8s.io/geps/gep-1713/#yaml