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
Copy file name to clipboardExpand all lines: geps/gep-2645/index.md
+172-6Lines changed: 172 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -235,14 +235,171 @@ spec:
235
235
port: 53
236
236
```
237
237
238
-
## Conformance
238
+
## Conformance Details
239
239
240
-
UDPRoute will be part of the Gateway API conformance suite with the following requirements:
240
+
The following Gateway Conformance features will be added:
241
241
242
-
- Implementations MUST support routing UDP traffic to Kubernetes Service backends
243
-
- Implementations MUST respect backend weights for traffic distribution
244
-
- Implementations MUST properly handle invalid backend references
245
-
- Implementations MUST update route status conditions appropriately
242
+
```
243
+
// SupportUDPRoute option indicates support for UDPRoute
244
+
SupportUDPRoute FeatureName = "UDPRoute"
245
+
```
246
+
247
+
They will validate the following scenarios:
248
+
249
+
1. UDPRoute attaches to a UDP listener by port specified
250
+
- A Gateway has a UDP listener on port 5300
251
+
- A UDPRoute specifies a `parentRef` with `port: 5300`
252
+
253
+
- The UDPRoute is accepted with the following status:
254
+
255
+
```
256
+
parents:
257
+
- parentRef:
258
+
group: gateway.networking.k8s.io
259
+
kind: Gateway
260
+
name: udp-gateway
261
+
port: 5300
262
+
conditions:
263
+
- type: Accepted
264
+
status: "True"
265
+
reason: Accepted
266
+
```
267
+
268
+
- UDP traffic sent to port 5300 is forwarded to the backend.
269
+
270
+
1. UDPRoute attaches to a UDP listener by sectionName
271
+
- A Gateway has a UDP listener named `coredns` on port 5300
272
+
- A UDPRoute specifies a `parentRef` with `sectionName: coredns`
273
+
274
+
- The UDPRoute is accepted with the following status:
275
+
276
+
```
277
+
parents:
278
+
- parentRef:
279
+
group: gateway.networking.k8s.io
280
+
kind: Gateway
281
+
name: udp-gateway
282
+
sectionName: coredns
283
+
conditions:
284
+
- type: Accepted
285
+
status: "True"
286
+
reason: Accepted
287
+
```
288
+
289
+
- UDP traffic sent to the `coredns` listener is forwarded to the backend.
290
+
291
+
1. UDPRoute attaches to a UDP listener by sectionName and port
292
+
- A Gateway has a UDP listener named `coredns` on port 5300
293
+
- A UDPRoute specifies a `parentRef` with `sectionName: coredns` and `port: 5300`
294
+
295
+
- The UDPRoute is accepted with the following status:
296
+
297
+
```
298
+
parents:
299
+
- parentRef:
300
+
group: gateway.networking.k8s.io
301
+
kind: Gateway
302
+
name: udp-gateway
303
+
sectionName: coredns
304
+
port: 5300
305
+
conditions:
306
+
- type: Accepted
307
+
status: "True"
308
+
reason: Accepted
309
+
```
310
+
311
+
- UDP traffic sent to port 5300 on the `coredns` listener is forwarded to the backend.
312
+
313
+
1. UDPRoute attaches to all UDP listeners in a Gateway when sectionName and port are omitted
314
+
- A Gateway has multiple UDP listeners: `dns` on port 5300 and `game` on port 7777
315
+
- A UDPRoute specifies a `parentRef` with only the Gateway name (no `sectionName` or `port`)
316
+
317
+
- The UDPRoute is accepted with the following status:
318
+
319
+
```
320
+
parents:
321
+
- parentRef:
322
+
group: gateway.networking.k8s.io
323
+
kind: Gateway
324
+
name: udp-gateway
325
+
conditions:
326
+
- type: Accepted
327
+
status: "True"
328
+
reason: Accepted
329
+
```
330
+
331
+
- The UDPRoute attaches to all UDP listeners on the Gateway.
332
+
333
+
1. UDPRoute fails attachment to a non-UDP listener when port or sectionName is specified
334
+
- A Gateway has a TCP listener named `tcp-listener` on port 5300 and no UDP listeners on that port/name
335
+
- A UDPRoute specifies a `parentRef` targeting the TCP listener via `sectionName: tcp-listener`
336
+
337
+
- The UDPRoute is not accepted with the following status:
338
+
339
+
```
340
+
parents:
341
+
- parentRef:
342
+
group: gateway.networking.k8s.io
343
+
kind: Gateway
344
+
name: mixed-gateway
345
+
sectionName: tcp-listener
346
+
conditions:
347
+
- type: Accepted
348
+
status: "False"
349
+
reason: NotAllowedByListeners
350
+
```
351
+
352
+
- No UDP traffic is routed through the TCP listener.
353
+
354
+
1. UDPRoute references a backend Service that does not exist
355
+
- A Gateway has a UDP listener named `coredns` on port 5300
356
+
- A UDPRoute specifies a `parentRef` with `sectionName: coredns` and a `backendRef` pointing to a Service `nonexistent-service` that does not exist
357
+
358
+
- The UDPRoute has the following status:
359
+
360
+
```
361
+
parents:
362
+
- parentRef:
363
+
group: gateway.networking.k8s.io
364
+
kind: Gateway
365
+
name: udp-gateway
366
+
sectionName: coredns
367
+
conditions:
368
+
- type: Accepted
369
+
status: "False"
370
+
reason: BackendNotFound
371
+
- type: ResolvedRefs
372
+
status: "False"
373
+
reason: BackendNotFound
374
+
```
375
+
376
+
- No UDP traffic is forwarded for this route.
377
+
378
+
1. UDPRoute with multiple weighted backends distributes flows according to configured weights
379
+
- A Gateway has a UDP listener named `game` on port 7777
380
+
- A UDPRoute specifies a `parentRef` with `sectionName: game` and multiple `backendRefs`:
381
+
- `game-server-1` with `weight: 70`
382
+
- `game-server-2` with `weight: 30`
383
+
384
+
- The UDPRoute is accepted with the following status:
385
+
386
+
```
387
+
parents:
388
+
- parentRef:
389
+
group: gateway.networking.k8s.io
390
+
kind: Gateway
391
+
name: udp-gateway
392
+
sectionName: game
393
+
conditions:
394
+
- type: Accepted
395
+
status: "True"
396
+
reason: Accepted
397
+
- type: ResolvedRefs
398
+
status: "True"
399
+
reason: ResolvedRefs
400
+
```
401
+
402
+
- UDP flows are sent to port 7777 is distributed across backends respecting the configured weights (approximately 70% to `game-server-1` and 30% to `game-server-2`).
0 commit comments