Replies: 10 comments 17 replies
-
I've been collaborating with a client on a project that focuses on secure video meetings. The service leverages WebRTC for real-time communication and incorporates the STUNner project as a WebRTC media gateway, running seamlessly in Kubernetes. STUNner uses Gateway API with UDPRoute for efficient traffic management, which has significantly enhanced scalability and reliability. It's been a fascinating experience working on such cutting-edge technologies to deliver secure and high-performing video communication solutions running natively in Kubernetes. |
Beta Was this translation helpful? Give feedback.
-
I investigated Gateway API with TCP and UDP routes for a potential implementation of a Kubernetes Load-Balancer for Telco use-cases. The first thing I noticed is the port and protocol that must be written in listener (Gateway), ParentReds (Route), BackendRef (Route) and Service. I have had a hard time to understand how the For my use case on telco load-balancer, I would probably also need some kind of SCTP Route. But, in my opinion, a Layer 3 and 4 Route would probably make more sense. The route would match based on Src/Dst IPs and Ports + Protocol, and use some kind of service as a backend which would define the actual endpoints. Few month ago, I made a PoC in this area, I would be happy to demo what I have to the community if there is an interest: https://github.com/LionelJouin/l-3-4-gateway-api-poc
Probably what I said is also related to this discussion: #3351 |
Beta Was this translation helpful? Give feedback.
-
Linkerd uses TCPRoute in managing egress. We added an EgressNetwork CRD to be a There's more detail in the Linkerd egress documentation. |
Beta Was this translation helpful? Give feedback.
-
I worked on 2 use cases where UDPRoute was needed.
|
Beta Was this translation helpful? Give feedback.
-
At CircleCI, we make use of Our customers have had success with both the Envoy and Istio implementations of this resource. |
Beta Was this translation helpful? Give feedback.
-
Does anyone here have an implementation using I have https://github.com/kubernetes-sigs/blixt which isn't far from being able to do this, but it would help if we had a few allies coming together to do this. |
Beta Was this translation helpful? Give feedback.
-
As @pamelia mentioned, we use UDPRoutes in STUNner to ingest WebRTC traffic into Kubernetes clusters transparently. WebRTC is special though as media servers (the backends) typically expose tens of thousands of UDP ports and clients need to be able to reach any of these ports via a single UDPRoute. Thus STUNner ignores the Service/UDPRoute port all together, which has become terribly confusing to our users once the port in *Routes became mandatory. To minimize confusion we ended up forking the Gateway API to provide our own UDPRoute that tries to mimic the [port:endPort] semantics from this age-old issue. Eventually I arrived to the conclusion that it is maybe better for us to provide our own UDPRoute rather than forcing WebRTC's braindead port handling semantics to all Gateway API users. |
Beta Was this translation helpful? Give feedback.
-
Folks implementing TCPRoute and UDPRoute today, does your implementation do layer 4 forwarding or proxying? Proxying is where the Layer 4 packets are received by the Gateway implementation, and then new connections or sessions are sent to the backend. For TCP sessions, this means that the TCP sessions are terminated by the Gateway implementation (the Gateway handles the SYN/ACK/FIN/RST etc), and a separate TCP connection to the backend is built. For UDP packets, the backend will see the Gateway implementation as the source IP of the packets. Forwarding is where the packets are forwarded on to their recipients while only doing a maximum of some form of NAT. No termination of sessions (for TCP) or crafting new packets (for UDP) takes place. This is super important in my mind, because proxying implementations can't easily do Client IP address visibility without networking in the cluster supporting some form of DSR. This is not an issue for protocols like HTTP that have higher-layer mechanisms for passing the actual client IP address through proxies (like So, my questions for implementations that support TCPRoute and UDPRoute are this:
I think at a minimum, any conformance tests we add for these features should include at least an Extended feature called |
Beta Was this translation helpful? Give feedback.
-
We have hundreds of IIoT devices that send UDP packets at around 50Hz. These packets are sent to our ingress ip address and then routed to the associated Service that is running within the cluster. Packets are routed based on the receiving port, but we would prefer to route them based on a header on the binary payload. This is kind of a stretch goal, though. We currently do this with ingress-nginx. We do not need to respond to a device for it to send packets, so it's purely passive listening. |
Beta Was this translation helpful? Give feedback.
-
We would like to move some Kafka TCP stuff to TCPRoute from ingress-nginx, but there are few implementations with TCPRoute support. (Proxying is fine for that use case) (currently strimzi, previously the Bitnami Kafka chart) (Ingress / Gateway API makes certificate management a LOT easier with cert-manager) Other possible use-cases include MQTT. (HTTP is used for Kafka-UI on the same hostname) UDP is sometimes used as well, currently mostly proxied through a custom nginx-based pod. (Where UDPRoute would make a nice replacement) (Protocols used include CoAP and SNMP (trap reception mostly)) (proxying is used) The main reason to use it is to share a hostname / IP with HTTP(S) services (and sometimes using those to automate certificates with cert-manager) (A specific class for the PROXY protocol might be useful as well for preserving IP information if the destination service supports it) (It would probably need a standard way to enable it on LoadBalancer services though...) |
Beta Was this translation helpful? Give feedback.
-
This discussion is for folks who are actively using TCPRoute and UDPRoute. The community would like to know what you're using them for, and how you find the experience?
Beta Was this translation helpful? Give feedback.
All reactions