envoy ne se connecte pas à VerneMQ pour MQTT sur websockets, code d'erreur 503
Quelques informations de base pour tous ceux qui rencontrent les mêmes problèmes, et comment les déboguer.
Code d'erreur 503
Voici le code d'erreur que je reçois :
Erreur pendant l'échange de données WebSocket : Code de réponse inattendu : 503.
Définir la journalisation d'Envoy à déboguer
Voici mon docker-compose.yaml pour envoy :
version : " 3.7 ".
services :
envoyé :
construire :
contexte : ./
dockerfile : Dockerfile
nom_du_conteneur : penvoyage-morpheus-envoy
ports :
– “80:1080”
– “443:1443”
volumes :
- type : volume
source : penvoyage_volume
cible : /etc/envoy
réseaux :
- envoy_net
utilisateur : "2000:2000"
#user : "root:root"
redémarrage : à moins qu'il ne s'agisse d'un arrêt
l'environnement :
loglevel : debugvolumes :
penvoyage_volume :
externe :
nom : penvoyage_volumeréseaux :
envoy_net :
externe :
nom : my-bridge-network
Montrer les écouteurs VerneMQ
sur le conteneur VerneMQ, montrer les listeners et les ip's :
vmq-admin listener show
ip -4 addr show
Remarquez comment mqttws est lié à 172.21.0.2 sur le port 8080.
Il y a deux IPs présents dans le système :
- 172.21.0.2
- 172.18.0.7
cela est dû au fait que le conteneur VerneMQ fait partie de deux réseaux docker internes.
Regardez la sortie du journal d'envoi
Voici quelques extraits pour illustrer une demande d'ouverture de websocket à partir du client MQTT :
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][http] [source/common/http/conn_manager_impl.cc:210] [C85] nouveau flux
penvoyage-morpheus-envoy | ":authority", "picockpit.local".
penvoyage-morpheus-envoy | ':path', '/mqtt
penvoyage-morpheus-envoy | ':method', 'GET
penvoyage-morpheus-envoy | 'connexion', 'Mise à jour'.
[C85][S10028475751570510266] Le cluster 'target_verne' correspond à l'URL '/mqtt'.
[C85][S10028475751570510266] routeur décodant les en-têtes :
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] création d'une nouvelle connexion
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][client] [source/common/http/codec_client.cc:26] [C86] connexion
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connexion] [source/common/network/connection_impl.cc:638] [C86] se connectant à 172.18.0.7:8080
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connexion] [source/common/network/connection_impl.cc:647] [C86] connexion en cours
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][pool] [source/common/http/conn_pool_base.cc:20] mise en file d'attente de la demande en raison de l'absence de connexions disponibles
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connexion] [source/common/network/connection_impl.cc:525] [C86] erreur de connexion différée : 111
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connection] [source/common/network/connection_impl.cc:183] [C86] fermeture de la 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] client déconnecté
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][router] [source/common/router/router.cc:532] [C85][S10028475751570510266] réinitialisation amont
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][http] [source/common/http/conn_manager_impl.cc:1234] [C85][S10028475751570510266] encodage des en-têtes via le codec (end_stream=false) :
penvoyage-morpheus-envoy | ':status', '503'
La raison de l'erreur 503
Dans ce cas, la raison de l'erreur 503 est que envoy n'est pas capable d'atteindre VerneMQ sur l'IP 172.18.0.7 port 8080 - VerneMQ écoute sur l'autre IP !
Par conséquent, envoy renvoie 503, indiquant que le serveur en amont n'est pas disponible - et que cette condition pourrait être corrigée une fois que le serveur en amont sera à nouveau disponible.