envoy maakt geen verbinding met VerneMQ voor MQTT over websockets, foutcode 503
Wat achtergrondinformatie voor iedereen die tegen dezelfde problemen aanloopt, en hoe ze te debuggen.
Foutcode 503
Dit is de foutcode die ik krijg:
Fout tijdens WebSocket handshake: Onverwachte antwoordcode: 503.
Stel envoy logging in op debug
Hier is mijn docker-compose.yaml voor envoy:
versie: '3.7'
diensten:
gezant:
bouwen:
context: ./
dockerfile: Dockerfile
container_naam: penvoyage-morpheus-envoy
havens:
– “80:1080”
– “443:1443”
volumes:
- type: volume
bron: penvoyage_volume
doelwit: /etc/envoy
netwerken:
- gezantschap_net
gebruiker: "2000:2000"
#user: "root:root"
herstarten: tenzij-gestopt
omgeving:
loglevel: debugvolumes:
penvoyage_volume:
uitwendig:
naam: penvoyage_volumenetwerken:
envoy_net:
uitwendig:
naam: mijn-brug-netwerk
Toon de VerneMQ luisteraars
op de VerneMQ container, toon de luisteraars en de ip's:
vmq-admin listener show
ip -4 addr show
Merk op hoe mqttws gebonden is aan 172.21.0.2 op poort 8080.
Er zijn twee IP's aanwezig in het systeem:
- 172.21.0.2
- 172.18.0.7
dit komt doordat de VerneMQ container deel uitmaakt van twee interne docker netwerken.
Kijk naar de envoy log output
Hier zijn enkele fragmenten ter illustratie van een websocket openingsverzoek van de MQTT client:
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][http] [source/common/http/conn_manager_impl.cc:210] [C85] nieuwe stroming
penvoyage-morpheus-envoy | ':authority', 'picockpit.local'
penvoyage-morpheus-envoy | ':path', '/mqtt'
penvoyage-morpheus-envoy | ':methode', 'GET'
penvoyage-morpheus-envoy | "verbinding", "Upgrade
[C85][S100284751570510266] cluster 'target_verne' match voor URL '/mqtt'
[C85][S100284751570510266] router die headers decodeert:
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] een nieuwe verbinding maken
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] verbinden met 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] verbinding in uitvoering
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][pool] [source/common/http/conn_pool_base.cc:20] verzoek in wachtrij wegens geen beschikbare verbindingen
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connection] [source/common/network/connection_impl.cc:525] [C86] vertraagde verbindingsfout: 111
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connection] [source/common/network/connection_impl.cc:183] [C86] socket sluiten: 0
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][client] [source/common/http/codec_client.cc:82] [C86] disconnect. resetten 0 in behandeling zijnde verzoeken
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][pool] [source/common/http/http1/conn_pool.cc:123] [C86] cliënt verbroken
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] coderen van headers via codec (end_stream=false):
penvoyage-morpheus-envoy | ':status', '503'
De reden voor de 503 fout
In dit geval is de reden voor de 503 fout dat envoy niet in staat is om VerneMQ te bereiken op IP 172.18.0.7 poort 8080 - VerneMQ luistert op het andere IP!
Daarom geeft envoy 503 terug, dat de upstream server niet beschikbaar is - en dat deze toestand hersteld zou kunnen worden zodra de upstream server weer beschikbaar wordt.