Traefik替代HAProxy实现FTPS负载均衡的TLS卸载问题求助
问题分析
日志中的错误 tls: client requested unsupported application protocols ([ftp]) 是因为隐式FTPS连接时,Filezilla客户端会在TLS握手阶段通过ALPN扩展声明要使用ftp应用层协议,但Traefik默认的TCP TLS配置未启用该协议支持,导致握手失败。
修复步骤
1. 修正动态配置的语法错误
ftps_dynamic_config.yml 里的 hi_ftps_connect:* 存在语法错误,多余的星号需要删除,同时为TLS配置添加ALPN协议支持:
hi_ftps_connect: rule: "HostSNI(``)" entryPoints: - "ftps" service: "ssl_hi_ftps_connect" tls: alpnProtocols: ["ftp"]
2. 为所有FTPS相关TCP路由器添加ALPN支持
对控制端口和所有数据端口的TCP路由器,在tls块中添加alpnProtocols: ["ftp"],以匹配客户端的协议请求。示例数据端口路由器修改后:
hi_ftps_passive_1: rule: "HostSNI(`*`)" entryPoints: - "ftps_data_1" service: "ssl_hi_ftps_passive_1" tls: alpnProtocols: ["ftp"]
所有7个数据端口的路由器都需要做此修改。
3. 确认证书配置有效性
检查tls.yml中的证书路径是否正确,Traefik容器已通过挂载获得/etc/letsencrypt的只读权限,确保证书文件能被正常读取。
配置优化建议
如果后续需要调整数据端口范围,可简化配置避免重复代码:
- 在静态配置
traefik.yml中合并数据端口为范围:
entryPoints: ftps: address: ":1413" ftps_data: address: ":1414-1420"
- 动态配置中用单个路由器匹配整个端口范围:
tcp: routers: hi_ftps_data: rule: "HostSNI(`*`)" entryPoints: - "ftps_data" service: "ssl_hi_ftps_data" tls: alpnProtocols: ["ftp"] services: ssl_hi_ftps_data: loadBalancer: servers: - address: "172.20.49.6:1414" - address: "172.20.49.6:1415" - address: "172.20.49.6:1416" - address: "172.20.49.6:1417" - address: "172.20.49.6:1418" - address: "172.20.49.6:1419" - address: "172.20.49.6:1420"
内容的提问来源于stack exchange,提问作者abdBou
相关产品推荐
相关产品推荐

