слушать mqtt-ssl
bind *:8883 ssl no-sslv3 crt /my.pem проверить требуемый ca-файл /my/pem/all_cas.pem crl-file /my/pem/all_crls.pem
режим TCP
опция tcplog
журнал глобальный
максконн 50000
tcp-запрос проверка-задержка 30 с
use_backend pki, если только { req.payload(0,0),mqtt_is_valid}
default_backend emqx_k8s_svc
бэкенд pki
режим http
сервер pki.my.domain someIP: 443 ssl проверить нет
серверная часть emqx_k8s_svc
режим TCP
журнал глобальный
сервер emqx1 emqx-ee.emqx:1883 проверить между 30s downinter 30s падение 1 повышение 1
Учитывая приведенный выше фрагмент haproxy.cfg, я подтверждаю следующую проблему:
Когда я делаю curl/wget на адресе прослушивания, запрос обычно перенаправляется на бэкенд pki
, как это должно. Но, в то же время, при попытке подключения к серверная часть emqx_k8s_svc
клиент Mosquitto остается заблокированным при «отправке CONNECT», и соединение не устанавливается.
Как я могу иметь условие, что если полезная нагрузка запроса имеет тип MQTT, то перенаправить ее в default_backend
, и если соединение НЕ MQTT (скажем, http-клиент), переадресовать его на бэкенд pki
.
Я также пробовал следующее, без разрешения:
tcp-запрос проверка-задержка 30 с
use_backend pki, если !{req.payload(0,0),mqtt_is_valid}
use_backend emqx_k8s_svc, если {req.payload(0,0),mqtt_is_valid}
default_backend emqx_k8s_svc
------------------------------
tcp-запрос проверка-задержка 10 с
use_backend pki, если { ssl_fc }
use_backend emqx_k8s_svc, если {req.payload(0,0),mqtt_is_valid}
default_backend emqx_k8s_svc
ПРИМЕЧАНИЕ: все работает в среде Kubernetes, за исключением бэкенд pki
который находится в другом месте (но доступен) - версия HAProxy: 2.5