Gateway API¶
This section documents the Gateway API implementation in the Cloudflare Tunnel Gateway Controller.
Overview¶
The controller implements the Kubernetes Gateway API to manage an in-process L7 reverse proxy data plane. It watches Gateway and Route resources, pushes routing configuration to the in-cluster proxy, and writes each tunnel an ingress document through the Cloudflare API. All L7 routing, matching, and filter logic executes in the in-cluster proxy; the ingress document only feeds the Cloudflare dashboard.
Supported Resources¶
| Resource | API Version | Status |
|---|---|---|
| GatewayClass | gateway.networking.k8s.io/v1 | Supported |
| Gateway | gateway.networking.k8s.io/v1 | Supported |
| HTTPRoute | gateway.networking.k8s.io/v1 | Supported |
| GRPCRoute | gateway.networking.k8s.io/v1 | Supported — see GRPCRoute |
| TCPRoute | gateway.networking.k8s.io/v1alpha2 | Not supported |
| TLSRoute | gateway.networking.k8s.io/v1alpha2 | Not supported |
| UDPRoute | gateway.networking.k8s.io/v1alpha2 | Not supported |
Sections¶
-
Supported Resources
Detailed feature support matrix for each Gateway API resource.
-
HTTPRoute
HTTP routing examples and configuration patterns.
-
ReferenceGrant
Cross-namespace backend references and security.
-
Limitations
Known limitations and workarounds.
How It Works¶
flowchart TB
subgraph Kubernetes["Kubernetes Cluster"]
GW[Gateway]
HR[HTTPRoute]
SVC[Services]
CTRL[Controller]
PROXY[Proxy Pod<br/>embedded cloudflared transport]
end
subgraph Cloudflare["Cloudflare Edge"]
API[Cloudflare API]
EDGE[Edge Network]
end
GW -->|watch| CTRL
HR -->|watch| CTRL
SVC -->|resolve| CTRL
CTRL -->|configure| API
CTRL -->|sync routes| PROXY
API -->|tunnel config| PROXY
PROXY -->|tunnel| EDGE
EDGE -->|traffic| PROXY
PROXY -->|route| SVC Key Concepts¶
TLS Termination
Cloudflare Tunnel terminates TLS at Cloudflare's edge network; in-cluster TLS termination settings on Gateway listeners have no effect. Listener port and protocol still govern route binding per the Gateway API spec.
Full Sync
Any change to an HTTPRoute or GRPCRoute triggers a full desired-state rebuild. The merged config is pushed to the proxy replicas (via PUT /config) only when its content or the replica set changed, and the tunnel ingress document is rewritten only when the resulting ingress document differs from the deployed one — steady-state reconciles skip both writes. See Full Sync Behavior.