@@ -21,6 +21,7 @@ balanced backends
21
21
22
22
## Longer Term Goals
23
23
* 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 )
24
25
25
26
## Non-Goals
26
27
* Provide an interface for users to define different listeners or ports for the
@@ -71,6 +72,7 @@ type TLSRouteSpec struct {
71
72
// 2. A hostname may be prefixed with a wildcard label (`*.`). The wildcard
72
73
// label must appear by itself as the first label.
73
74
//
75
+ // <gateway:util:excludeFromCRD>
74
76
// If a hostname is specified by both the Listener and TLSRoute, there
75
77
// must be at least one intersecting hostname for the TLSRoute to be
76
78
// attached to the Listener. For example:
@@ -85,20 +87,27 @@ type TLSRouteSpec struct {
85
87
// match.
86
88
//
87
89
// 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
89
91
// ignored. For example, if a Listener specified `*.example.com`, and the
90
92
// TLSRoute specified `test.example.com` and `test.example.net`,
91
93
// `test.example.net` must not be considered for a match.
92
94
//
93
95
// 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
95
98
// implementation must raise an 'Accepted' Condition with a status of
96
99
// `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>
97
106
// +required
98
107
// +kubebuilder:validation:MinItems=1
99
108
// +kubebuilder:validation:MaxItems=16
100
109
Hostnames []Hostname ` json:"hostnames,omitempty"`
101
- // Rules are a list of actions.
110
+ // Rules is a list of TLS matchers and actions.
102
111
//
103
112
// +required
104
113
// +kubebuilder:validation:MinItems=1
@@ -173,14 +182,13 @@ i.e. `Service`, in the cluster based on `backendRefs` rules of the `TLSRoute`.
173
182
174
183
The following conflict situations are covered by TLSRoute and TLS passthrough cases :
175
184
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`.
184
192
* If a hostname is specified by both the `Listener` and `TLSRoute`, there must
185
193
be at least one intersecting hostname for the `TLSRoute` to be attached to the
186
194
` Listener` .
@@ -225,11 +233,18 @@ With the specification above, any request to hostnames on `*.example.tld` should
225
233
attached to `TLSRoutes` while requests to `*.anotherexample.tld` are terminated
226
234
on the `Gateway` and attached to a `HTTPRoute`.
227
235
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
+
228
242
# # Conformance Details
229
243
230
244
# ## Feature Names
231
245
232
246
* TLSRoute
247
+ * TLSMultiplexing
233
248
234
249
# ## Conformance tests
235
250
0 commit comments