Skip to main content

Version: 3.2.14.6

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

If you have installed the gateway instance in Docker and use Dashboard or ADC for configurations, start a MySQL server in the default API7 Enterprise network api7-ee_api7:

docker run -d \
--name mysql \
--network=api7-ee_api7 \
-p 3306:3306 \
-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, configure proxy_mode and stream_proxy in config.yaml configuration file as follows:

docker exec {container_name} /bin/sh -c "echo '
apisix:
proxy_mode: http&stream
stream_proxy:
tcp:
- 2000
' > /usr/local/apisix/conf/config.yaml"

proxy_mode: accept both transport layer (L4) and application layer (L7) traffic.

stream_proxy: configure the interface for transport layer (L4) proxy.

Reload API7 Gateway 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 Server Address field, enter 127.0.0.1.
  • In the Server Port filed, enter 2000.
  • Click Add.

Validate the Stream Route

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).

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

API Management for Modern Architectures with Edge, API Gateway, Kubernetes, and Service Mesh.

Product

API7 Cloud

SOC2 Type IRed Herring

Copyright © APISEVEN Ltd. 2019 – 2024. Apache, Apache APISIX, APISIX, and associated open source project names are trademarks of the

Apache Software Foundation