apisix四层路由

所属:网络层,转发的是 TCP 或 UDP 连接本身,不解析应用层协议内容。
可用于 MySQL、Redis、MQTT、DNS 等非 HTTP 协议服务。
不关心 HTTP 方法、路径、Header,只看 IP、端口、SNI 等。

可以使用TLS / SNI 路由
TLS / SNI 路由是指:在传输层(L4)使用 TLS 握手时的 SNI 字段(Server Name Indication) 来进行多租户或域名级别的流量分发,而不需要解密 TLS 内容。该机制常用于 加密 TCP 流量的透明转发。
{ "id": "mysql-a", "server_port": 9443, "sni": "mysql.a.com", // 👈 匹配握手中的 SNI "upstream": { "type": "roundrobin", "nodes": { "10.0.0.1:3306": 1 } } }
config.yaml模板:

config.yaml

四层路由配置:TCP/UDP 代理监听器

stream_proxy:
  tcp:
    # 非 TLS(纯 TCP)监听端口
    - addr: 9100                 # APISIX 将在该端口接收 TCP 请求
    # - addr: 9200               # 如需监听多个端口,可继续添加

    # 启用 TLS(可用于基于 SNI 的 TCP 路由)
    - addr: 9443
      tls: true                  # 启用 TLS,可结合路由中的 `sni` 字段使用

  udp:
    - addr: 5300                 # 可选:监听 UDP 协议,如 DNS 转发等

注册模板:

{
  "id": "mysql-tcp-proxy",              // 可自定义的唯一 ID
  "server_port": 9100,                  // APISIX 监听端口,client 连这个端口
  "protocol": "tcp",                    // 协议:"tcp" 或 "udp"

  "sni": "mysql.example.com",           // 可选,TLS SNI 匹配(需启用 tls)
  "remote_addr": "192.168.1.100",       // 可选,来源 IP 限制(也支持 CIDR)

  "upstream": {
    "type": "roundrobin",
    "nodes": {
      "192.168.10.100:3306": 1          // 后端服务地址和端口
    }
  }
}

请求地址:

POST http://{APISIX_ADMIN_API}:9180/apisix/admin/stream_routes
posted @ 2025-05-21 15:58  落尘1011  阅读(101)  评论(0)    收藏  举报