TCP 路由
实验性频道
下面描述的 TCPRoute 资源目前仅包含在网关 API 的“实验性”频道中。有关发布频道的更多信息,请参阅我们的 版本控制指南。
网关 API 旨在与多种协议一起使用,而 TCPRoute 是一种允许管理 TCP 流量的路由。
在此示例中,我们有一个网关资源和两个 TCPRoute 资源,它们使用以下规则分配流量
- 网关上端口 8080 的所有 TCP 流量都被转发到
my-foo-serviceKubernetes 服务的端口 6000。 - 网关上端口 8090 的所有 TCP 流量都被转发到
my-bar-serviceKubernetes 服务的端口 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 进行附加,缺点是网关与其关联路由之间的关系耦合性更强。有关更多详细信息,请参阅 附加到网关。