asculta mqtt-ssl
bind *:8883 ssl no-sslv3 crt /my.pem verifica fișierul ca necesar /my/pem/all_cas.pem fișierul crl /my/pem/all_crls.pem
modul tcp
opțiunea tcplog
jurnal global
maxconn 50000
tcp-request inspect-delay 30s
use_backend pki cu excepția cazului în care { req.payload(0,0),mqtt_is_valid }
default_backend emqx_k8s_svc
backend pki
modul http
server pki.my.domain someIP:443 ssl verifica niciunul
backend emqx_k8s_svc
modul tcp
jurnal global
server emqx1 emqx-ee.emqx:1883 verifica inter 30s downinter 30s cade 1 crestere 1
Având în vedere fragmentul haproxy.cfg de mai sus, confirm următoarea problemă:
Când fac un curl/wget pe adresa de ascultare, solicitarea este în mod normal redirecționată către backend pki
, așa cum ar trebui. Dar, în același timp, atunci când încercați o conexiune la backend emqx_k8s_svc
clientul Mosquitto rămâne blocat la „trimiterea CONNECT” și nu se stabilește nicio conexiune.
Cum pot avea condiția ca, dacă sarcina utilă a cererii este de tip MQTT, să o trimită către default_backend
, iar dacă conexiunea NU este MQTT (să zicem, un client http), redirecționați-o către backend pki
.
De asemenea, am încercat următoarele, fără rezolvare:
tcp-request inspect-delay 30s
use_backend pki if !{ req.payload(0,0),mqtt_is_valid }
use_backend emqx_k8s_svc dacă { 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 dacă { req.payload(0,0),mqtt_is_valid }
default_backend emqx_k8s_svc
NOTĂ: totul rulează într-un mediu Kubernetes, cu excepția backend pki
care este în altă parte (dar accesibilă) - versiunea HAProxy: 2.5