envoy no se conecta a VerneMQ para MQTT sobre websockets, código de error 503
Algunos antecedentes rápidos para cualquiera que se encuentre con los mismos problemas, y cómo depurarlos.
Código de error 503
Este es el código de error que recibo:
Error durante el handshake de WebSocket: Código de respuesta inesperado: 503.
Establecer el registro de envoy a la depuración
Aquí está mi docker-compose.yaml para envoy:
versión: '3.7'
servicios:
enviado:
construir:
contexto: ./
archivo docker: Dockerfile
nombre_contenedor: penvoyage-morpheus-envoy
puertos:
– “80:1080”
– “443:1443”
volúmenes:
- tipo: volumen
fuente: penvoyage_volume
objetivo: /etc/envoy
redes:
- envoy_net
usuario: "2000:2000"
#user: "root:root"
reinicio: a menos que se detenga
ambiente:
nivel de registro: depuraciónvolúmenes:
penvoyage_volume:
externo:
nombre: penvoyage_volumeredes:
envoy_net:
externo:
nombre: mi-red-puente
Mostrar los oyentes de VerneMQ
en el contenedor VerneMQ, muestra los listeners y las ip's:
vmq-admin listener show
ip -4 addr show
Observe que mqttws está vinculado a 172.21.0.2 en el puerto 8080.
Hay dos IPs presentes en el sistema:
- 172.21.0.2
- 172.18.0.7
esto se debe a que el contenedor VerneMQ forma parte de dos redes docker internas.
Mira la salida del registro de envoy
A continuación se muestran algunos extractos para ilustrar una solicitud de apertura de websocket desde el cliente MQTT:
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][http] [source/common/http/conn_manager_impl.cc:210] [C85] nuevo flujo
penvoyage-morpheus-envoy | ':authority', 'picockpit.local'
penvoyage-morpheus-envoy | ':path', '/mqtt'
penvoyage-morpheus-envoy | ':method', 'GET'
penvoyage-morpheus-envoy | 'connection', 'Upgrade'
[C85][S10028475751570510266] cluster 'target_verne' match for URL '/mqtt'
[C85][S10028475751570510266] router decodificando cabeceras:
penvoyage-morpheus-envoy | ':authority', 'picockpit.local'
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][pool] [source/common/http/http1/conn_pool.cc:82] creando una nueva conexión
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][client] [source/common/http/codec_client.cc:26] [C86] connecting
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connection] [source/common/network/connection_impl.cc:638] [C86] conectando con 172.18.0.7:8080
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connection] [source/common/network/connection_impl.cc:647] [C86] conexión en curso
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][pool] [source/common/http/conn_pool_base.cc:20] solicitud de cola debido a que no hay conexiones disponibles
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connection] [source/common/network/connection_impl.cc:525] [C86] error de conexión retrasado: 111
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connection] [source/common/network/connection_impl.cc:183] [C86] cerrando socket: 0
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][client] [source/common/http/codec_client.cc:82] [C86] disconnect. resetting 0 pending requests
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][pool] [source/common/http/http1/conn_pool.cc:123] [C86] cliente desconectado
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][router] [source/common/router/router.cc:532] [C85][S10028475751570510266] upstream reset
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][http] [source/common/http/conn_manager_impl.cc:1234] [C85][S100284751570510266] codificando cabeceras a través del códec (end_stream=false):
penvoyage-morpheus-envoy | ':status', '503'
El motivo del error 503
En este caso la razón del error 503 es que envoy no es capaz de alcanzar VerneMQ en la IP 172.18.0.7 puerto 8080 - ¡VerneMQ está escuchando en la otra IP!
Por lo tanto, envoy devuelve 503, que el servidor upstream no está disponible - y que esta condición podría ser arreglada una vez que el servidor upstream vuelva a estar disponible.