Skip to content

Gateway API (Cilium): no supported knob to enable proxyProtocol on the publishing path #3030

Open

Description

Problem

When publishing through the Cilium Gateway API path (added in v1.5.0), there is no supported way for an operator to enable PROXY protocol on the Gateway listeners. The functionality exists in Cilium (gatewayAPI.enableProxyProtocol, default false), but Cozystack exposes no knob to turn it on, and the value cannot be reached through normal configuration.

The host ingress-nginx path already has a first-class switch for this — publishing.proxyProtocol — but it only drives ingress-nginx (plus Ouroboros) and does not touch the Gateway path. So an operator who publishes via Gateway API and needs PROXY protocol (e.g. to preserve the client source IP behind an L4 load balancer that injects PROXY headers) has no equivalent.

Why it cannot be set today

Cilium is installed as the cilium component of the cozystack.networking package. The platform chart builds that component's values from a fixed set of keys and passes nothing else through:

# packages/core/platform/templates/bundles/system.yaml
{{- $ciliumValues := dict "cilium" (dict
  "k8sServiceHost" "localhost"
  "k8sServicePort" "7445"
  "cgroup" (dict "autoMount" (dict "enabled" false))) -}}
{{- $_ := set $networkingComponents "cilium" (dict "values" $ciliumValues) -}}

There is no operator-facing override hook in packages/core/platform/values.yaml for arbitrary cilium values, and cozystack.networking is reconciled by helm-controller (managed-by Helm, helm.sh/resource-policy: keep), so editing the rendered Package spec by hand is reverted on the next reconcile. The result is that cilium.gatewayAPI.enableProxyProtocol is effectively unreachable without forking the platform chart.

Proposed solution

Add a first-class switch for PROXY protocol on the Gateway publishing path, mirroring publishing.proxyProtocol for ingress-nginx — when enabled, it sets cilium.gatewayAPI.enableProxyProtocol: true on the networking package's cilium component.

A lighter alternative (or a complement) is a generic passthrough for cilium component values in the platform config, so operators can set advanced Cilium options without a fork.

Caveats worth documenting alongside the feature

  • gatewayAPI.enableProxyProtocol is cluster-wide for all Gateway listeners: once enabled, Envoy accepts PROXY-framed traffic only, so an upstream L4 load balancer that injects the PROXY header is required, otherwise all Gateway traffic breaks (same failure mode as the ingress-nginx switch).
  • If the goal is only client source-IP preservation, externalTrafficPolicy: Local on the Gateway's LoadBalancer Service is usually enough and avoids the all-or-nothing PROXY requirement.

Environment

Cozystack v1.5.0 (Cilium 1.19.3), gatewayAPI.enabled: true shipped by default; gatewayAPI.enableProxyProtocol left at the Cilium default of false.

Activity

  1. added
    kind/featureCategorizes issue or PR as related to a new feature
    priority/backlogGeneral backlog priority. Lower than priority/important-longterm
    area/platformIssues or PRs related to platform infrastructure (bundle, flux, talos, installer)
    area/networkingIssues or PRs related to networking (ingress, gateway, vpn, metallb, kube-ovn)
    on Jun 24, 2026
  2. harshitrwt commented on Jun 24, 2026

    @harshitrwt
    Contributor

    Hey, I'd like to work on this.
    Planning to add a gateway.proxyProtocol switch in packages/core/platform/values.yaml, and wire it into the $ciliumValues block in system.yaml to set gatewayAPI.enableProxyProtocol: true when enabled, mirroring the existing publishing.proxyProtocol pattern for ingress-nginx.
    Starting with the narrow switch first.
    Two things I'm not sure about from the repo alone:

    • Is there an existing e2e/integration test for the ingress-nginx proxyProtocol switch I should mirror for the Gateway version?
    • Should the new value live under publishing.* for naming consistency, or under gateway.* since this only touches the Gateway API path?
  3. added
    area/ciliumIssues or PRs related to Cilium (agent, operator, Gateway API, network policy, LB-IPAM)
    on Aug 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area/ciliumIssues or PRs related to Cilium (agent, operator, Gateway API, network policy, LB-IPAM)area/networkingIssues or PRs related to networking (ingress, gateway, vpn, metallb, kube-ovn)area/platformIssues or PRs related to platform infrastructure (bundle, flux, talos, installer)kind/featureCategorizes issue or PR as related to a new featurepriority/backlogGeneral backlog priority. Lower than priority/important-longtermtriage/acceptedIndicates an issue is ready to be actively worked on

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions