跳到正文
Træfɪk

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: 80
apiVersion: v1
kind: Service
metadata:
  name: external-svc
  namespace: apps

spec:
  externalName: external.domain
  type: ExternalName
apiVersion: traefik.io/v1alpha1
kind: IngressRouteUDP
metadata:
  name: test.route
  namespace: apps

spec:
  entryPoints:
    - foo
  routes:
  - services:
    - name: external-svc
apiVersion: v1
kind: Service
metadata:
  name: external-svc
  namespace: apps

spec:
  externalName: external.domain
  type: ExternalName
  ports:
    - port: 80
apiVersion: traefik.io/v1alpha1
kind: IngressRouteUDP
metadata:
  name: test.route
  namespace: apps

spec:
  entryPoints:
    - foo
  routes:
  - services:
    - name: external-svc
      port: 80
apiVersion: v1
kind: Service
metadata:
  name: external-svc
  namespace: apps

spec:
  externalName: external.domain
  type: ExternalName
  ports:
    - port: 80

NativeLB

如果希望直接使用 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: true
apiVersion: v1
kind: Service
metadata:
  name: svc
  namespace: default
spec:
  type: ClusterIP
  ...

版权所有 © 头文件软件工作室

文档由 HeadFile Studio 翻译。

Traefik v3.7 中文快照 · 原文版权归 Traefik Labs 及贡献者所有 · MIT 许可证