Skip to content

快速创建TCP/SSL虚拟服务

简介

TCP/SSL 虚拟服务在 TCP 四层转发的基础上增加了 TLS 加密——客户端与负载均衡之间建立安全的 TLS 通道后,再以 TCP 方式转发给后端。适合需要加密传输但不是 HTTP 协议的场景。

如果您熟悉 NGINX,TCP/SSL 对应 stream {} 块中配置了 SSL 证书的 server 指令。

典型场景:

  • 加密的数据库连接(如需要 TLS 的 MySQL、PostgreSQL)
  • 自定义 TCP 协议需要传输层加密
  • MQTT、gRPC 等非 HTTP 协议的 TLS 加密代理

与 TCP / HTTPS 的区别

维度TCPTCP/SSLHTTPS
工作层次L4L4 + TLSL7 + TLS
加密传输
解析 HTTP
基于 URL 路由
SSL 证书不需要需要需要
SSL 策略不需要需要需要
支持国密
会话保持源地址源地址 / SSL Session ID六种方式

操作步骤概览

第一步:创建转发引擎        →  同 TCP
第二步:上传 SSL 证书        →  证书与私钥同名配对上传
第三步:创建 SSL 策略        →  定义加密套件、协议版本、会话复用
第四步:创建健康检查策略    →  TCP 或 SslClientHello
第五步:创建服务器池        →  同 TCP
第六步:创建虚拟服务        →  选择 TCP/SSL 类型,关联 SSL 策略
第七步:变更执行并验证      →  验证 TLS 握手成功

下面以将 10.1.9.117:3307 的加密 TCP 流量分发到后端两个 MySQL 节点为例。

第一步:创建转发引擎

与 TCP 虚拟服务完全一致。参见 快速创建TCP虚拟服务 - 创建转发引擎

第二步:上传 SSL 证书

入口:【平台系统 → SSL 证书管理】,点击"新增"。

SSL证书配置

配置项说明
证书名称自定义,如 mysql-tls-cert私钥名称填相同值
证书内容粘贴完整的证书链(服务器证书 + 中间 CA)
私钥名称与证书名称一致,如 mysql-tls-cert
私钥内容粘贴私钥文件内容

详细说明参见 快速创建HTTPS虚拟服务 - 上传证书

第三步:创建 SSL 客户端策略

入口:【SLB 本地负载 → 策略配置 → SSL 策略 → 客户端 SSL 策略】,点击"新增"。

客户端SSL策略配置

配置项建议
服务器证书选择第二步上传的证书
服务器私钥选择第二步上传的私钥
支持 SSL 协议勾选 TLS 1.2 和 TLS 1.3
Session 缓存开启(减少重复握手)
Session Ticket集群部署时开启
安全套件保持默认,或自定义(用冒号分隔)

各字段的详细解释参见 快速创建HTTPS虚拟服务 - SSL策略SSL 策略用户手册

第四步:创建健康检查策略

TCP/SSL 场景推荐以下健康检查方式:

协议适用场景
TCP通用,三次握手成功即判健康
SslClientHello验证后端能正确响应 TLS ClientHello(适用于后端也开启了 TLS 的场景)

入口:【SLB 本地负载 → 健康检查】,配置与 TCP 虚拟服务一致。参见 快速创建TCP虚拟服务 - 健康检查

第五步:创建服务器池

与 TCP 虚拟服务完全一致。入口:【SLB 本地负载 → 服务器池】。

配置项示例值
服务器池名称mysql-tls-backend-pool
负载均衡算法最小连接数(数据库长连接推荐)
健康检查选择第四步创建的策略
转发引擎engine117
目标节点10.1.9.114:3306, 10.1.9.117:3306

参见 快速创建TCP虚拟服务 - 创建服务器池

第六步:创建虚拟服务

入口:【SLB 本地负载 → 虚拟服务】,点击"新增"。

配置项示例值说明
名称mysql-tls-proxy
对象类型转发引擎 或 流量组
协议TCP/SSL关键区别
监听地址10.1.9.117
端口3307对外暴露的加密端口
SSL 客户端策略选择第三步创建的 SSL 策略仅 TCP/SSL 和 HTTPS 需配置

默认分发规则

配置项示例值
处理方式TCP SSL 代理
服务器池mysql-tls-backend-pool
TCP 策略选择系统内置的"TCP 策略模板"(或自定义)

四层 TCP 策略中可配置 SNAT、会话保持、溯源等。参见 快速创建TCP虚拟服务 - 四层策略

第七步:变更执行并验证

变更执行

点击"变更执行"使配置生效。

验证 TLS 握手

bash
# 验证 TLS 握手成功,查看证书信息
openssl s_client -connect 10.1.9.117:3307 -servername mysql.example.com

# 使用 mysql 客户端(需要支持 TLS)
mysql -h 10.1.9.117 -P 3307 -u username -p --ssl-mode=REQUIRED

如果 openssl 输出中显示了证书信息和 Verify return code: 0,表示 TLS 握手成功。curl 不适用于验证 TCP/SSL(因为不是 HTTP 协议)。


SSL 策略完整配置参见 SSL 策略用户手册。国密算法支持参见 国密配置与验证