TCP 路由
实验性频道
下面描述的 TCPRoute
资源目前仅包含在网关 API 的“实验性”频道中。有关发布频道的更多信息,请参阅我们的 版本控制指南。
网关 API 旨在与多种协议一起使用,而 TCPRoute 是一种允许管理 TCP 流量的路由。
在此示例中,我们有一个网关资源和两个 TCPRoute 资源,它们使用以下规则分配流量
- 网关上端口 8080 的所有 TCP 流量都被转发到
my-foo-service
Kubernetes 服务的端口 6000。 - 网关上端口 8090 的所有 TCP 流量都被转发到
my-bar-service
Kubernetes 服务的端口 6000。
在此示例中,将对 网关 应用两个 TCP
侦听器,以便将它们路由到两个独立的后端 TCPRoutes
,请注意,Gateway
上的 listeners
设置的 protocol
为 TCP
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: my-tcp-gateway
spec:
gatewayClassName: my-tcp-gateway-class
listeners:
- name: foo
protocol: TCP
port: 8080
allowedRoutes:
kinds:
- kind: TCPRoute
- name: bar
protocol: TCP
port: 8090
allowedRoutes:
kinds:
- kind: TCPRoute
---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TCPRoute
metadata:
name: tcp-app-1
spec:
parentRefs:
- name: my-tcp-gateway
sectionName: foo
rules:
- backendRefs:
- name: my-foo-service
port: 6000
---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TCPRoute
metadata:
name: tcp-app-2
spec:
parentRefs:
- name: my-tcp-gateway
sectionName: bar
rules:
- backendRefs:
- name: my-bar-service
port: 6000
在上面的示例中,我们使用 parentRefs
中的 sectionName
字段来分离两个独立的后端 TCP 服务 的流量
spec:
parentRefs:
- name: my-tcp-gateway
sectionName: foo
这直接对应于 Gateway
中 listeners
的 name
listeners:
- name: foo
protocol: TCP
port: 8080
- name: bar
protocol: TCP
port: 8090
通过这种方式,每个 TCPRoute
“附加”到 Gateway
上的不同端口,以便服务 my-foo-service
接收来自集群外部的端口 8080
的流量,而 my-bar-service
接收端口 8090
的流量。
请注意,您可以通过使用 parentRefs
中的 port
字段将路由绑定到网关侦听器来实现相同的结果
spec:
parentRefs:
- name: my-tcp-gateway
port: 8080
使用 port
字段而不是 sectionName
进行附加,缺点是网关与其关联路由之间的关系耦合性更强。有关更多详细信息,请参阅 附加到网关。