Skip to main content

Version: 3.8.x

Proxy TCP Traffic

API7 Gateway can handle transport layer (L4) TCP and UDP traffic dedicated or in addition to handling application layer (L7) traffic.

This tutorial walks through configuring a stream route within a published service to proxy L4 traffic between clients and a MySQL server.

Prerequisites

  1. Install API7 Enterprise.
  2. Have at least one gateway instance in your gateway group.
  3. Install a MySQL client to validate the stream route.

Start a MySQL Server

Start a MySQL server:

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

Enable Transport Layer (L4) Proxy

By default, API7 Gateway (data plane) only has application layer (L7) proxy enabled. To also accept transport layer (L4) traffic, expose the TCP service port and configure stream_proxy.

If you have installed the gateway instance in Docker and use Dashboard or ADC for configurations, before you can proceed to the verification steps, make sure to expose the server port 2000 to the host machine (-p2000:2000).

If a gateway instance is already running in Docker, remove it and start a new instance with 2000 port mapped. Your command should look similar to the following:

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

Append the following configuration to your gateway's configuration file:

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"

Reload API7 Gateway container for configuration changes to take effect:

docker exec $container_name apisix reload

Add a Service with Stream Routes

  1. Select the Published Services of your gateway group from the side navigation bar, then click Add Service.
  2. Select Add Manually.
  3. From the dialog box, do the following:
  • In the Name field, enter MySQL.
  • In the Service Type field, choose Stream(Layer 4 Proxy).
  • In the Upstream Scheme field, choose TCP.
  • In the How to find the upstream field, choose Use Nodes.
  • Click Add Node.
  • In the Add Node dialog box, do the following:
    • In the Host field, enter your private IP address, such as 192.168.2.103.
    • In the Port field, enter 3306.
    • In the Weight field, use the default value 100.
    • Click Add. This will create a new service in the 'No Version' state.
  1. Inside the service, click Add Stream Route.
  2. From the dialog box, do the following:
  • In the Name field, enter stream-route-mysql.
  • In the Gateway Port field, enter 2000.
  • Click Add.

Validate the Stream Route

Establish a connection with the MySQL server through API7 Gateway using the MySQL client. Connect as root using the password configured before:

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

You should see the MySQL prompt as shown below:

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>

Additional Resources

API7.ai Logo

The digital world is connected by APIs,
API7.ai exists to make APIs more efficient, reliable, and secure.

Sign up for API7 newsletter

Product

API7 Gateway

SOC2 Type IIISO 27001HIPAAGDPRRed Herring

Copyright © APISEVEN PTE. LTD 2019 – 2025. Apache, Apache APISIX, APISIX, and associated open source project names are trademarks of the Apache Software Foundation