IngressRouteUDP
IngressRouteUDP 是 Traefik UDP 路由器的 CRD 实现。
创建 IngressRouteUDP 对象前,需要将 Traefik Kubernetes CRD 应用到 Kubernetes 集群。
这会注册 IngressRouteUDP 类型及其他 Traefik 专用资源。
配置示例¶
apiVersion: traefik.io/v1alpha1
kind: IngressRouteUDP
metadata:
name: ingressrouteudpfoo
namespace: apps
spec:
ingressClassName: traefik-lb
entryPoints:
- fooudp # The entry point where Traefik 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.配置选项¶
| 字段 | 说明 | 默认值 | 必填 |
|---|---|---|---|
ingressClassName |
指定使用的集群级 IngressClass 资源,取代已弃用的 kubernetes.io/ingress.class 注解。spec 字段的优先级高于注解。 |
否 | |
entryPoints |
入口点名称列表。 | 否 | |
routes |
路由列表。 | 是 | |
routes[n].services |
Kubernetes 服务定义列表。ExternalName Service 的配置见 ExternalName 服务。 |
否 | |
routes[n].services[n].name |
定义 Kubernetes 服务名称。 | 是 | |
routes[n].services[n].port |
定义 Kubernetes 服务端口,也可以引用命名端口。 | 是 | |
routes[n].services[n].weight |
定义服务器负载均衡使用的权重。 | 1 | 否 |
routes[n].services[n].nativeLB |
创建负载均衡器时,控制其子节点是各 Pod IP,还是唯一的 Kubernetes Service clusterIP。 | false | 否 |
routes[n].services[n].nodePortLB |
创建负载均衡器时,控制在服务类型为 NodePort 时是否直接以节点内部 IP 和 nodePort 作为子节点。这样,当 Traefik 运行在 Kubernetes 集群外部、但与节点位于同一网络时,仍能访问服务。详见 NativeLB。 | false | 否 |
ExternalName 服务¶
Traefik 创建后端时必须指定端口,但 Kubernetes 的 ExternalName Service 可以不定义端口。因此,Traefik 支持以下两种端口定义方式:
- 仅在
IngressRouteUDP的服务中定义 - 在两端都定义;如果端口不匹配,会发出警告,并使用
IngressRouteUDP服务中的端口
因此,在两端都定义端口时,Traefik 期望它们相互匹配。
apiVersion: traefik.io/v1alpha1
kind: IngressRouteUDP
metadata:
name: test.route
namespace: apps
spec:
entryPoints:
- foo
routes:
- services:
- name: external-svc
port: 80apiVersion: v1
kind: Service
metadata:
name: external-svc
namespace: apps
spec:
externalName: external.domain
type: ExternalNameapiVersion: traefik.io/v1alpha1
kind: IngressRouteUDP
metadata:
name: test.route
namespace: apps
spec:
entryPoints:
- foo
routes:
- services:
- name: external-svcapiVersion: v1
kind: Service
metadata:
name: external-svc
namespace: apps
spec:
externalName: external.domain
type: ExternalName
ports:
- port: 80apiVersion: traefik.io/v1alpha1
kind: IngressRouteUDP
metadata:
name: test.route
namespace: apps
spec:
entryPoints:
- foo
routes:
- services:
- name: external-svc
port: 80apiVersion: v1
kind: Service
metadata:
name: external-svc
namespace: apps
spec:
externalName: external.domain
type: ExternalName
ports:
- port: 80NativeLB¶
如果希望直接使用 Kubernetes Service 的 clusterIP,而不是根据 Pod IP 创建服务器负载均衡器,应将 NativeLB 设为 true。默认情况下,NativeLB 为 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: trueapiVersion: v1
kind: Service
metadata:
name: svc
namespace: default
spec:
type: ClusterIP
...