Skip to content

Commit 033815b

Browse files
committed
Update TLSRoute GEP with more information
1 parent 066499d commit 033815b

File tree

1 file changed

+26
-11
lines changed

1 file changed

+26
-11
lines changed

geps/gep-2643/index.md

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ balanced backends
2121

2222
## Longer Term Goals
2323
* Implement capabilities for [ESNI](https://www.cloudflare.com/learning/ssl/what-is-encrypted-sni/)
24+
* Implement matchers on TLSRoute rules like [ALPN](https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation)
2425

2526
## Non-Goals
2627
* Provide an interface for users to define different listeners or ports for the
@@ -71,6 +72,7 @@ type TLSRouteSpec struct {
7172
// 2. A hostname may be prefixed with a wildcard label (`*.`). The wildcard
7273
// label must appear by itself as the first label.
7374
//
75+
// <gateway:util:excludeFromCRD>
7476
// If a hostname is specified by both the Listener and TLSRoute, there
7577
// must be at least one intersecting hostname for the TLSRoute to be
7678
// attached to the Listener. For example:
@@ -85,20 +87,27 @@ type TLSRouteSpec struct {
8587
// match.
8688
//
8789
// If both the Listener and TLSRoute have specified hostnames, any
88-
// TLSRoute hostnames that do not match the Listener hostname MUST be
90+
// TLSRoute hostnames that do not match any Listener hostname MUST be
8991
// ignored. For example, if a Listener specified `*.example.com`, and the
9092
// TLSRoute specified `test.example.com` and `test.example.net`,
9193
// `test.example.net` must not be considered for a match.
9294
//
9395
// If both the Listener and TLSRoute have specified hostnames, and none
94-
// match with the criteria above, then the TLSRoute is not accepted. The
96+
// match with the criteria above, then the TLSRoute is not accepted for that
97+
// Listener. If the TLSRoute does not match any Listener on the parent, the
9598
// implementation must raise an 'Accepted' Condition with a status of
9699
// `False` in the corresponding RouteParentStatus.
100+
//
101+
// A Listener MUST be of type TLS when a TLSRoute attaches to it. The
102+
// impolementation MUST raise an 'Accepted' Condition with a status of
103+
// `False` in the corresponding RouteParentStatus with the reason
104+
// of "UnsupportedValue" in case a Listener of the wrong type is used.
105+
// </gateway:util:excludeFromCRD>
97106
// +required
98107
// +kubebuilder:validation:MinItems=1
99108
// +kubebuilder:validation:MaxItems=16
100109
Hostnames []Hostname `json:"hostnames,omitempty"`
101-
// Rules are a list of actions.
110+
// Rules is a list of TLS matchers and actions.
102111
//
103112
// +required
104113
// +kubebuilder:validation:MinItems=1
@@ -173,14 +182,13 @@ i.e. `Service`, in the cluster based on `backendRefs` rules of the `TLSRoute`.
173182

174183
The following conflict situations are covered by TLSRoute and TLS passthrough cases:
175184

176-
* When a Gateway contains a listener with `protocol=TLS`, the Gateway MUST NOT
177-
allow any other kind of listener on the same port and the Gateway SHOULD be
178-
marked as `Accepted=False` in case there are different kinds of listeners on
179-
the same port.
180-
* When a Gateway contains a listener with `protocol=TLS` and `tls.mode=Passthrough`,
181-
the `Gateway` MUST NOT allow another listener on the same port with a different
182-
`tls.mode` and the `Gateway` SHOULD be marked as `Accepted=False`.
183-
* Any violating Listener should have a Condition `Conflicted=True`.
185+
* When a Gateway supports [Multiplexing](#multiplexing-support) it CAN allow multiple
186+
listeners on the same port, as soon as they have different protocols (TLS or HTTPS),
187+
and the related `tls.mode`, and different hostnames.
188+
* When a Gateway does not support [Multiplexing](#multiplexing-support) and contains
189+
a listener with `protocol=TLS`, the Gateway MUST NOT allow any other kind of
190+
listener on the same port, and any violating Listener should have a Condition `OverlappingTLSConfig=True`
191+
with the reason `OverlappingProtocols`.
184192
* If a hostname is specified by both the `Listener` and `TLSRoute`, there must
185193
be at least one intersecting hostname for the `TLSRoute` to be attached to the
186194
`Listener`.
@@ -225,11 +233,18 @@ With the specification above, any request to hostnames on `*.example.tld` should
225233
attached to `TLSRoutes` while requests to `*.anotherexample.tld` are terminated
226234
on the `Gateway` and attached to a `HTTPRoute`.
227235

236+
The support for Multiplexing on TLS is `Implementation Specific`, and implementations
237+
that support this feature MUST announce it on `GatewayClass.Status.SupportedFeatures`.
238+
239+
Implementations that don't support multiplexing SHOULD mark the violating listeners with
240+
a Condition `Conflicted=True`.
241+
228242
## Conformance Details
229243

230244
### Feature Names
231245

232246
* TLSRoute
247+
* TLSMultiplexing
233248

234249
### Conformance tests
235250

0 commit comments

Comments
 (0)