HAProxy负载均衡listen块正常但frontend/backend配置报错排查
配置错误原因及解决方案
核心错误点
- backend块缺失
mode tcp配置
listen块中的mode tcp会同时对前端流量接收、后端流量转发逻辑生效。拆分为frontend/backend结构后,frontend的mode仅作用于前端侧,backend未显式指定mode时会默认继承defaults段的配置,HAProxy默认配置的defaults段通常为mode http。
用HTTP模式转发K8s APIServer的四层TLS流量时,HAProxy会尝试将HTTPS流量解析为HTTP协议,解析失败后返回HTTP格式的错误响应,客户端预期HTTPS响应因此触发报错:Unable to connect to the server: http: server gave HTTP response to HTTPS client。 - 配置参数归属错误
option log-health-checks属于后端健康检查相关参数,需配置在backend段而非frontend段timeout server属于后端服务器连接超时参数,需配置在backend段而非frontend段
修正后的完整配置
frontend k8s mode tcp bind *:8383 default_backend k8s timeout client 3h backend k8s mode tcp option log-health-checks timeout server 3h balance roundrobin server lab11 lab11.mydomain.com:6443 check check-ssl verify none inter 10000 server lab13 lab13.mydomain.com:6443 check check-ssl verify none inter 10000 server lab15 lab15.mydomain.com:6443 check check-ssl verify none inter 10000
补充说明
listen块本质是frontend和backend的合并简写,二者功能完全对等,拆分时只要保证参数归属正确、前后端模式一致即可实现完全相同的转发效果。
内容的提问来源于stack exchange,提问作者gbt
相关产品推荐
相关产品推荐

