envoy verbindet sich nicht mit VerneMQ für MQTT über Websockets, Fehlercode 503
Einige kurze Hintergrundinformationen für alle, die auf dieselben Probleme stoßen, und wie man sie behebt.
Fehlercode 503
Dies ist der Fehlercode, den ich erhalte:
Fehler beim WebSocket-Handshake: Unerwarteter Antwortcode: 503.
Envoy-Protokollierung auf Debuggen einstellen
Hier ist meine docker-compose.yaml für envoy:
Version: '3.7'
Dienstleistungen:
Gesandter:
bauen:
Kontext: ./
Dockerfile: Dockerfile
container_name: penvoyage-morpheus-envoy
Häfen:
– “80:1080”
– “443:1443”
Volumen:
- Typ: Volumen
Quelle: penvoyage_volume
Ziel: /etc/envoy
Netzwerke:
- envoy_net
Benutzer: "2000:2000"
1TP3Benutzer: "root:root"
Neustart: wenn nicht gestoppt
Umwelt:
Loglevel: DebugVolumen:
penvoyage_volume:
extern:
name: penvoyage_volumeNetzwerke:
envoy_net:
extern:
Name: Mein-Brücken-Netz
Anzeigen der VerneMQ-Listener
auf dem VerneMQ-Container die Listener und die IP's anzeigen:
vmq-admin listener show
ip -4 addr show
Beachten Sie die Bindung von mqttws an 172.21.0.2 auf Port 8080.
Es gibt zwei IPs im System:
- 172.21.0.2
- 172.18.0.7
Das liegt daran, dass der VerneMQ-Container Teil von zwei internen Docker-Netzwerken ist.
Schauen Sie sich die envoy-Log-Ausgabe an
Hier sind einige Auszüge zur Veranschaulichung einer Websocket-Öffnungsanforderung vom MQTT-Client:
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][http] [source/common/http/conn_manager_impl.cc:210] [C85] neuer Strom
penvoyage-morpheus-envoy | ':authority', 'picockpit.local'
penvoyage-morpheus-envoy | ':path', '/mqtt'
penvoyage-morpheus-envoy | ':method', 'GET'
penvoyage-morpheus-envoy | 'Verbindung', 'Upgrade'
[C85][S10028475751570510266] cluster 'target_verne' Übereinstimmung für URL '/mqtt'
[C85][S10028475751570510266] Router dekodiert Kopfzeilen:
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] erstellt eine neue Verbindung
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] Verbindung zu 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] Verbindung in Arbeit
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][pool] [source/common/http/conn_pool_base.cc:20] Anfrage in der Warteschlange, da keine Verbindungen verfügbar sind
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connection] [source/common/network/connection_impl.cc:525] [C86] verzögerter Verbindungsfehler: 111
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connection] [source/common/network/connection_impl.cc:183] [C86] Socket schließen: 0
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][client] [source/common/http/codec_client.cc:82] [C86] disconnect. 0 anstehende Anfragen zurücksetzen
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][pool] [source/common/http/http1/conn_pool.cc:123] [C86] Kunde nicht verbunden
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][S10028475751570510266] Verschlüsselung von Headern über Codec (end_stream=false):
penvoyage-morpheus-envoy | ':status', '503'
Der Grund für den 503-Fehler
In diesem Fall ist der Grund für den 503-Fehler, dass envoy nicht in der Lage ist, VerneMQ auf der IP 172.18.0.7 Port 8080 zu erreichen - VerneMQ hört auf der anderen IP!
Daher gibt envoy 503 zurück, dass der Upstream-Server nicht verfügbar ist - und dass dieser Zustand behoben werden kann, sobald der Upstream-Server wieder verfügbar ist.