listen mqtt-ssl
bind *:8883 ssl no-sslv3 crt /my.pem verify required ca-file /my/pem/all_cas.pem crl-file /my/pem/all_crls.pem
mode tcp
option tcplog
log global
maxconn 50000
tcp-request inspect-delay 30s
use_backend pki unless { req.payload(0,0),mqtt_is_valid }
default_backend emqx_k8s_svc
backend pki
mode http
server pki.my.domain someIP:443 ssl verify none
backend emqx_k8s_svc
mode tcp
log global
server emqx1 emqx-ee.emqx:1883 check inter 30s downinter 30s fall 1 rise 1
鉴于上述 haproxy.cfg 代码片段,我确认以下问题:
当我在监听地址上执行 curl/wget 时,请求通常会转发到backend pki
,这是理所当然的。但与此同时,当尝试连接到 时,backend emqx_k8s_svc
Mosquitto 客户端停留在“发送连接”处,并且未建立任何连接。
我怎样才能有这样的条件:如果请求负载是 MQTT 类型,则将其转发到default_backend
,如果连接不是 MQTT(例如,http 客户端),则将其转发到backend pki
。
我也尝试了以下方法,但没有解决:
tcp-request inspect-delay 30s
use_backend pki if !{ req.payload(0,0),mqtt_is_valid }
use_backend emqx_k8s_svc if { req.payload(0,0),mqtt_is_valid }
default_backend emqx_k8s_svc
------------------------------
tcp-request inspect-delay 10s
use_backend pki if { ssl_fc }
use_backend emqx_k8s_svc if { req.payload(0,0),mqtt_is_valid }
default_backend emqx_k8s_svc
注意:所有内容都在 Kubernetes 环境中运行,除了在backend pki
其他地方(但可访问)的 - HAProxy 版本:2.5