You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 043d4d1
Browse filesBrowse the repository at this point in the historyBrowse files
docs(gateway): describe how the passthrough services are published
Covers gateway.passthroughMode, what each mode costs, the second
Gateway, the BackendTLSPolicy CA copy and the GatewayClass feature
check. It also corrects the prose the series made false: the
native-port section still placed the service listeners on port 443
beside the HTTPS-terminate ones, had the wildcard modes refuse
tlsPassthroughListeners and carry the same-port pair, and said the
chart writes no entry of that field; the edge-class guide still had
every passthrough endpoint published by a TLSRoute matching nothing.
Assisted-by: LLM
Signed-off-by: Aleksei Sviridkin <[email protected]>
Copy file name to clipboardExpand all lines: docs/gateway-classes.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -54,7 +54,7 @@ The set a tenant may name is `gateway.tenantSelectableClasses` plus the current
54
54
| `publishing.certificates.solver: dns01` | `dns01` | one wildcard `Certificate` per tenant |
55
55
| otherwise | `http01` | one `Certificate` per published hostname, except the passthrough names below |
56
56
57
-
Under `http01` a hostname held by a TLS-passthrough listener is the exception to the per-hostname rule. Once a `TLSRoute` is served on that listener and forwards to a backend, the hostname earns neither an HTTPS-terminate listener nor a `Certificate`, because the backend presents its own certificate and the Gateway never holds a key for the name. The shipped `tlsPassthroughServices` defaults put `api`, `vm-exportproxy` and `cdi-uploadproxy` in that position on the publishing tenant, and the `Certificate` objects that covered them are collected on upgrade; `packages/extra/gateway/README.md` carries what that changes and the ways forward.
57
+
Under `http01` a hostname held by a TLS-passthrough listener is the exception to the per-hostname rule. Once a `TLSRoute` is served on that listener and forwards to a backend, the hostname earns neither an HTTPS-terminate listener nor a `Certificate`, because the backend presents its own certificate and the Gateway never holds a key for the name. Which of the platform's own names sit in that position on the publishing tenant turns on `gateway.passthroughMode`: under `singleAddress` only `api`, passed through on port 6443, while `vm-exportproxy` and `cdi-uploadproxy` are terminated by `HTTPRoute`s and keep a `Certificate` each; under `separateAddress` all three, passed through on the second Gateway. A `Certificate` that covered a name now in that position is collected on upgrade; `packages/extra/gateway/README.md` carries what that changes and the ways forward.
58
58
59
59
Edge therefore wins over an operator-supplied wildcard Secret, which wins over the solver. In edge mode the solver, DNS-01 provider and issuer-name inputs are not read at all, so an unsupported value in any of them does not fail the tenant's release. `existingSecret` skips the same validations; only `http01` and `dns01` reject a bad solver, provider or issuer name.
60
60
@@ -63,10 +63,10 @@ Edge therefore wins over an operator-supplied wildcard Secret, which wins over t
63
63
- The Gateway serves port 80 only. Its listeners are `edge` for `*.<apex>`, `edge-apex` for `<apex>`, and one `edge-child-*` per inheriting child tenant carrying that child's `*.<child-apex>`. There is no port-443 listener, and no hostname-less port-80 listener either.
64
64
- No per-tenant ACME `Issuer` and no `Certificate` are created.
65
65
- No http-to-https redirect `HTTPRoute` is created. The edge is expected to perform that redirect.
66
-
- `tlsPassthroughServices`is not written onto the `TenantGateway` and no passthrough listener is rendered, so the tenant Kubernetes API, VM export and CDI upload endpoints are not published through such a Gateway. The packages that own those endpoints still create their `TLSRoute` objects, which then match no listener on that Gateway.
66
+
- Neither `tlsPassthroughServices` nor the `api` entry of `tlsPassthroughListeners` is written onto the `TenantGateway`, and no passthrough listener is rendered, so the tenant Kubernetes API is not published through such a Gateway. The VM export and CDI upload endpoints depend on `gateway.passthroughMode`: under `singleAddress` they are `HTTPRoute`s and attach to the edge listeners like any application, while under `separateAddress` their `TLSRoute`s, and the API's, name a passthrough Gateway that is never created and so match no listener. Under `singleAddress` no route for the API is rendered at all.
67
67
- Application `HTTPRoute`s attach by hostname exactly as in the other modes — the edge listeners carry the same namespace selector the HTTPS listeners carry elsewhere.
68
68
69
-
That last point has a blast radius worth stating on its own, and it applies only where those endpoints are published through the Gateway at all. Each of them renders its `TLSRoute` only when `gateway.enabled` is on and its name is still in `publishing.exposedServices`; at the default `gateway.enabled: false` there is no such route and nothing to lose. Where both hold, setting `gateway.className` to an edge-terminated class puts the publishing tenant on it too, and then the endpoints that go unpublished are the platform's own: the `TLSRoute` for `api.<root-host>` is pinned to a `tls-api` listener, an edge Gateway has no such listener, so the tenant Kubernetes API stops being served — VM export and CDI upload go the same way. Nothing fails at render time, and the loss surfaces only on the routes themselves, which the controller flips to `Accepted=False` with reason `NoMatchingParent`. Putting only child tenants on the edge class avoids it, because the platform's routes keep pointing at the publishing tenant's Gateway.
69
+
The passthrough point has a blast radius worth stating on its own, and it applies only where those endpoints are published through the Gateway at all. Each of them renders its route only when `gateway.enabled` is on and its name is still in `publishing.exposedServices`; at the default `gateway.enabled: false` there is no such route and nothing to lose. Where both hold, setting `gateway.className` to an edge-terminated class puts the publishing tenant on it too, and then the endpoints that go unpublished are the platform's own: the tenant Kubernetes API in either `passthroughMode`, since an edge Gateway has no `tls-api` listener, and VM export and CDI upload as well under `separateAddress`. Nothing fails at render time. Under `separateAddress` the loss surfaces only on the routes themselves, which the controller flips to `Accepted=False` with reason `NoMatchingParent`; under `singleAddress` the gateway chart renders no route for the API, so nothing reports it and `api.<root-host>` simply stops answering. Putting only child tenants on the edge class avoids it, because the platform's routes keep pointing at the publishing tenant's Gateway.
70
70
71
71
Listing a class in `gateway.edgeTerminatedClasses` is an assertion about that class, and nothing verifies it. Put the bundled `cilium` class in the list and its Gateways serve every application hostname over plain HTTP on a public address, with no redirect and no certificate. Only list a class whose provider really does terminate TLS in front of the Gateway.
0 commit comments