Skip to main content

IngressRouteUDP

IngressRouteUDP is the CRD implementation of a Traefik UDP router.

Before creating IngressRouteUDP objects, you need to apply the Traefik Kubernetes CRDs to your Kubernetes cluster.

This registers the IngressRouteUDP kind and other Traefik-specific resources.

Configuration Examples

ingressroute-udp.yaml
apiVersion: traefik.io/v1alpha1
kind: IngressRouteUDP
metadata:
name: ingressrouteudpfoo
namespace: apps
spec:
entryPoints:
- fooudp # The entry point where Traefik Hub listens for incoming traffic
routes:
- services:
- name: foo # The name of the Kubernetes Service to route to
port: 8080
weight: 10
nativeLB: true # Enables native load balancing between pods
nodePortLB: true

Configuration Options

FieldDescriptionDefaultRequired
entryPointsList of entrypoints namesNo
routesList of routesYes
routes[n].servicesList of Kubernetes service definitions (See below for ExternalName Service setup)No
services[n].nameDefines the name of a Kubernetes service""Yes
routes[n].services[n].portDefines the port of a Kubernetes service. This can be a reference to a named port.""No
routes[n].services[n].weightDefines the weight to apply to the server load balancing""No
routes[n].services[n].nativeLBControls, when creating the load-balancer, whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.falseNo
routes[n].services[n].nodePortLBControls, when creating the load-balancer, whether the LB's children are directly the nodes internal IPs using the nodePort when the service type isfalseNo

ExternalName Service

Traefik backends creation needs a port to be set, however Kubernetes ExternalName Service could be defined without any port. Accordingly, Traefik supports defining a port in two ways:

  • only on IngressRouteUDP service
  • on both sides, you'll be warned if the ports don't match, and the IngressRouteUDP service port is used

Thus, in case of two sides port definition, Traefik expects a match between ports.

apiVersion: traefik.io/v1alpha1
kind: IngressRouteUDP
metadata:
name: test.route
namespace: default
spec:
entryPoints:
- foo
routes:
- services:
- name: external-svc
port: 80

---
apiVersion: v1
kind: Service
metadata:
name: external-svc
namespace: default
spec:
externalName: external.domain
type: ExternalName

NativeLB

To avoid creating the server load-balancer with the pods IPs and use Kubernetes Service clusterIP directly, one should set the UDP service NativeLB option to true. By default, NativeLB is false.

apiVersion: traefik.io/v1alpha1
kind: IngressRouteUDP
metadata:
name: test.route
namespace: default
spec:
entryPoints:
- foo
routes:
- services:
- name: svc
port: 80
# Here, nativeLB instructs to build the servers load balancer with the Kubernetes Service clusterIP only.
nativeLB: true