跳到主要内容
版本:3.9.x

代理 TCP 流量

API7 网关可以专门处理传输层 (四层) 的 TCP 和 UDP 流量,也可以在处理应用层 (七层) 流量之外处理这些流量。

本教程将引导你完成在发布服务中配置四层代理路由 (stream route) 的过程,以代理客户端和 MySQL 服务器之间的四层流量。

前提条件

  1. 安装 API7 企业版
  2. 在你的网关组中至少有一个网关实例
  3. 安装一个 MySQL 客户端以验证四层代理路由。

启动 MySQL 服务器

启动一个 MySQL 服务器:

docker run -d \
--name mysql \
--network host \
-e MYSQL_ROOT_PASSWORD=password \
mysql:8.4 \
mysqld --mysql-native-password=ON

启用传输层 (四层) 代理

默认情况下,API7 网关(数据面)仅启用了应用层 (七层) 代理。为了也能够接收传输层 (四层) 流量,请暴露 TCP 服务端口并配置 stream_proxy

如果你在 Docker 中安装了网关实例,并使用控制台或 ADC 进行配置,在进入验证步骤之前,请确保将服务器端口 2000 暴露给主机 (-p2000:2000)。

如果网关实例已经在 Docker 中运行,请将其移除,并启动一个新的实例,同时映射 2000 端口。你的命令应该类似于以下内容:

docker run -d -e API7_DP_MANAGER_ENDPOINTS='["https://{HOST_ADDR}:7943"]' \
-e API7_GATEWAY_GROUP_SHORT_ID=default \
-e API7_DP_MANAGER_CERT="-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----" \
-e API7_DP_MANAGER_KEY="-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----" \
-e API7_CONTROL_PLANE_CA="-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----" \
-e API7_DP_MANAGER_SNI="api7ee3-dp-manager" \
-p 9080:9080 \
-p 9443:9443 \
-p 2000:2000 \
--name $container_name \
-h api7-gateway \
api7/api7-ee-3-gateway:$TAG

将以下配置追加到你的网关配置文件中:

container_name=your-gateway-container-name
docker exec $container_name /bin/sh -c "echo '
apisix:
stream_proxy:
only: false
tcp:
- 2000
' >> /usr/local/apisix/conf/config.yaml"

重新加载 API7 网关容器以使配置更改生效:

docker exec $container_name apisix reload

添加带有四层代理路由的服务

  1. 从侧边导航栏选择你网关组的 已发布服务 (Published Services),然后点击 添加服务 (Add Service)。
  2. 选择 手动添加 (Add Manually)。
  3. 在对话框中,执行以下操作:
  • 名称 (Name) 字段中,输入 MySQL
  • 服务类型 (Service Type) 字段中,选择 TCP/UDP (四层代理) (Stream(Layer 4 Proxy))。
  • 上游协议 (Upstream Scheme) 字段中,选择 TCP
  • 如何查找上游 (How to find the upstream) 字段中,选择 使用节点 (Use Nodes)。
  • 点击 添加节点 (Add Node)。
  • 在添加节点对话框中,执行以下操作:
    • 主机 (Host) 字段中,输入你的私有 IP 地址,例如 192.168.2.103
    • 端口 (Port) 字段中,输入 3306
    • 权重 (Weight) 字段中,使用默认值 100
    • 点击 添加 (Add)。这将创建一个状态为“无版本”(No Version) 的新服务。
  1. 在服务内部,点击 添加四层代理路由 (Add Stream Route)。
  2. 在对话框中,执行以下操作:
  • 名称 (Name) 字段中,输入 stream-route-mysql
  • 网关端口 (Gateway Port) 字段中,输入 2000
  • 点击 添加 (Add)。

验证四层代理路由

使用 MySQL 客户端,通过 API7 网关建立与 MySQL 服务器的连接。使用之前配置的密码以 root 身份连接:

mysql --host=127.0.0.1 --port=2000 -u root -p

你应该会看到如下所示的 MySQL 提示符:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.4.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

附加资源