IngressRouteTCP
IngressRouteTCP 是 Traefik TCP 路由器的 CRD 实现。
创建 IngressRouteTCP 对象前,需要将 Traefik Kubernetes CRD 应用到 Kubernetes 集群。
这会注册 IngressRouteTCP 类型及其他 Traefik 专用资源。
通用说明
如果 HTTP 路由器和 TCP 路由器连接到同一个入口点,会先应用 TCP 路由器。如果 TCP 路由器未找到匹配路由,再交给 HTTP 路由器处理。
配置示例¶
可以按以下方式声明 IngressRouteTCP:
apiVersion: traefik.io/v1alpha1
kind: IngressRouteTCP
metadata:
name: ingressroutetcpfoo
namespace: apps
spec:
ingressClassName: traefik-lb
entryPoints:
- footcp
routes:
- match: HostSNI(`*`)
priority: 10
middlewares:
- name: middleware1
namespace: default
services:
- name: foo
port: 8080
weight: 10
serversTransport: transport
nativeLB: true
nodePortLB: true
tls:
secretName: supersecret
options:
name: opt
namespace: default
certResolver: foo
domains:
- main: example.net
sans:
- a.example.net
- b.example.net
passthrough: false配置选项¶
ExternalName 服务¶
Traefik 使用域名和端口连接后端,但 Kubernetes 的 ExternalName Service 可以不定义端口。因此,Traefik 支持以下两种端口定义方式:
- 仅在
IngressRouteTCP的服务中定义 - 在两端都定义;如果端口不匹配,会发出警告,并使用
IngressRouteTCP服务中的端口
因此,在两端都定义端口时,Traefik 期望它们相互匹配。
apiVersion: traefik.io/v1alpha1
kind: IngressRouteTCP
metadata:
name: test.route
namespace: apps
spec:
entryPoints:
- foo
routes:
- match: Host(`example.net`)
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: IngressRouteTCP
metadata:
name: test.route
namespace: apps
spec:
entryPoints:
- foo
routes:
- match: Host(`example.net`)
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: IngressRouteTCP
metadata:
name: test.route
namespace: apps
spec:
entryPoints:
- foo
routes:
- match: Host(`example.net`)
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: IngressRouteTCP
metadata:
name: test.route
namespace: default
spec:
entryPoints:
- foo
routes:
- match: HostSNI(`*`)
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
...