前置准备

  1. Higress 安装在 K8s 内的 higress-system 命名空间下,网关的 Service 名称为 higress-gateway;
  2. 目标是为 default 命名空间下的 tcp-echo 服务配置一个四层路由,服务监听的端口为 9000,网关监听的端口也为 9000;
  3. 路由使用 Gateway API CRD 进行配置,需要提前配置 Higress 使其支持监听 Gateway API。参考文档:文档

配置步骤

1. 创建 GatewayClass

  1. 创建 gatewayclass.yaml 文件,并写入以下内容:

    1. apiVersion: gateway.networking.k8s.io/v1
    2. kind: GatewayClass
    3. metadata:
    4. name: higress-gateway
    5. spec:
    6. controllerName: higress.io/gateway-controller
  2. 执行命令,将以上配置写入 K8s 集群:

    1. kubectl apply -f gatewayclass.yaml

2. 创建 Gateway

  1. 创建 gateway.yaml 文件,并写入以下内容:

    1. apiVersion: gateway.networking.k8s.io/v1
    2. kind: Gateway
    3. metadata:
    4. name: higress-gateway
    5. namespace: higress-system
    6. spec:
    7. gatewayClassName: higress-gateway
    8. listeners:
    9. - name: default-tcp
    10. protocol: TCP
    11. port: 9000
    12. allowedRoutes:
    13. namespaces:
    14. from: All
    15. kinds:
    16. - kind: TCPRoute
  2. 执行命令,将以上配置写入 K8s 集群:

    1. kubectl apply -f gateway.yaml

3. 修改 higress-gateway Service

  1. 执行命令,进度 higress-gateway Service 的编辑状态:

    1. kubectl edit service higress-gateway -n higress-system
  2. spec.ports 列表中增加对 9000 的端口的描述信息。增加后的配置如下所示:

    1. ports:
    2. - name: http2
    3. port: 80
    4. protocol: TCP
    5. targetPort: 80
    6. - name: https
    7. port: 443
    8. protocol: TCP
    9. targetPort: 443
    10. # —- 此处为增加的配置 —-
    11. - name: tcp
    12. port: 9000
    13. protocol: TCP
    14. targetPort: 9000
    15. # ———————————
  3. 保存编辑内容并退出编辑器。

4. 创建 TCPRoute

  1. 创建 tcproute.yaml 文件,并写入以下内容:

    1. apiVersion: gateway.networking.k8s.io/v1alpha2
    2. kind: TCPRoute
    3. metadata:
    4. name: tcp-echo
    5. namespace: default
    6. spec:
    7. parentRefs:
    8. - name: higress-gateway
    9. namespace: higress-system
    10. port: 9000
    11. rules:
    12. - backendRefs:
    13. - name: tcp-echo
    14. port: 9000
  2. 执行命令,将以上配置写入 K8s 集群:

    1. kubectl apply -f tcproute.yaml

5. 配置验证

配置完成。我们可以通过 telnet higress-gateway service 的 9000 端口等方式验证路由是否能够正常工作。