envoy non si connette a VerneMQ per MQTT su websockets, codice di errore 503
Alcune rapide informazioni di base per chiunque si imbatta negli stessi problemi, e come debuggarli.
Codice di errore 503
Questo è il codice di errore che sto ricevendo:
Errore durante l'handshake WebSocket: Codice di risposta inaspettato: 503.
Impostare la registrazione di envoy su debug
Ecco il mio docker-compose.yaml per envoy:
versione: '3.7'
servizi:
inviato:
costruire:
contesto: ./
dockerfile: Dockerfile
nome_contenitore: penvoyage-morpheus-envoy
porti:
– “80:1080”
– “443:1443”
volumi:
- tipo: volume
fonte: penvoyage_volume
obiettivo: /etc/envoy
reti:
- envoy_net
utente: "2000:2000"
#user: "root:root"
riavvio: a meno che non si sia fermato
ambiente:
livello di log: debugvolumi:
penvoyage_volume:
esterno:
nome: penvoyage_volumereti:
envoy_net:
esterno:
nome: my-bridge-network
Mostra gli ascoltatori di VerneMQ
sul contenitore VerneMQ, mostra gli ascoltatori e gli ip:
vmq-admin listener show
ip -4 addr show
Notate come mqttws è legato a 172.21.0.2 sulla porta 8080.
Ci sono due IP presenti nel sistema:
- 172.21.0.2
- 172.18.0.7
questo è dovuto al fatto che il contenitore VerneMQ fa parte di due reti docker interne.
Guarda l'output del log di envoy
Ecco alcuni estratti per illustrare una richiesta di apertura di websocket dal client MQTT:
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][http] [source/common/http/conn_manager_impl.cc:210] [C85] nuovo flusso
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 per URL '/mqtt'
[C85][S10028475751570510266] router che decodifica le intestazioni:
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 nuova connessione
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][connessione] [source/common/network/connection_impl.cc:638] [C86] connessione a 172.18.0.7:8080
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connessione] [source/common/network/connection_impl.cc:647] [C86] connessione in corso
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][pool] [source/common/http/conn_pool_base.cc:20] richiesta in coda a causa di nessuna connessione disponibile
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connessione] [source/common/network/connection_impl.cc:525] [C86] errore di connessione in ritardo: 111
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connessione] [source/common/network/connection_impl.cc:183] [C86] chiusura socket: 0
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][client] [source/common/http/codec_client.cc:82] [C86] disconnessione. azzerare 0 richieste in sospeso
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][pool] [source/common/http/http1/conn_pool.cc:123] [C86] cliente disconnesso
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][router] [source/common/router/router.cc:532] [C85][S100284751570510266] upstream reset
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][http] [source/common/http/conn_manager_impl.cc:1234] [C85][S10028475751570510266] codifica intestazioni tramite codec (end_stream=false):
penvoyage-morpheus-envoy | ':status', '503'
Il motivo dell'errore 503
In questo caso la ragione dell'errore 503 è che envoy non è in grado di raggiungere VerneMQ sull'IP 172.18.0.7 porta 8080 - VerneMQ è in ascolto sull'altro IP!
Quindi envoy restituisce 503, che il server upstream non è disponibile - e che questa condizione potrebbe essere risolta una volta che il server upstream diventa nuovamente disponibile.