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 设置的 protocolTCP

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

这直接对应于 Gatewaylistenersname

  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 进行附加,缺点是网关与其关联路由之间的关系耦合性更强。有关更多详细信息,请参阅 附加到网关