enviado não conectado à VerneMQ para MQTT por meio de websockets, código de erro 503
Algumas informações rápidas para qualquer pessoa que se depare com os mesmos problemas, e como depurá-los.
Código de erro 503
Este é o código de erro que estou a receber:
Erro durante o aperto de mão do WebSocket: Código de resposta inesperado: 503.
Definir o registo do enviado para depuração
Aqui está o meu docker-compose.yaml para o enviado:
versão: '3.7'.
serviços:
Enviado:
construir:
contexto: ./
Arquivo de docas: Arquivo de doca
container_name: penvoyage-morpheus-envoy
portos:
– “80:1080”
– “443:1443”
volumes:
- tipo: volume
fonte: penvoyage_volume
alvo: /etc/envoy
redes:
- envoy_net
usuário: “2000:2000”
#user: "raiz:raiz"
reinício: a não ser que seja parado
ambiente:
nível de registo: debugvolumes:
penvoyage_volume:
externo:
nome: penvoyage_volumeredes:
envoy_net:
externo:
nome: my-bridge-network
Mostrar os ouvintes do VerneMQ
no contentor VerneMQ, mostra os ouvintes e os IP's:
vmq-admin show de ouvintes
ip -4 addr show
Observe como o mqttws está vinculado a 172.21.0.2 no porto 8080.
Há dois IPs presentes no sistema:
- 172.21.0.2
- 172.18.0.7
isto deve-se ao facto de o contentor VerneMQ fazer parte de duas redes internas de estivadores.
Veja a saída do diário de bordo do enviado
Aqui estão alguns excertos para ilustrar um pedido de abertura de websocket do cliente MQTT:
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][http] [source/common/http/conn_manager_implpl.cc:210] [C85] novo fluxo
penvoyage-morpheus-envoy | ':autoridade', 'picockpit.local'.
penvoyage-morpheus-envoy | ':caminho', '/mqtt'.
penvoyage-morpheus-envoy | ':método', 'GET'.
penvoyage-morpheus-envoy | 'conexão', 'Upgrade'.
[C85][S100284757515705105266] combinação de cluster 'target_verne' para URL '/mqtt'.
[C85][S10028475751570510266] cabeçalhos decodificadores de roteador:
penvoyage-morpheus-envoy | ':autoridade', 'picockpit.local'.
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][pool] [source/common/http/http1/conn_pool.cc:82] criando uma nova conexão
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][debug][connection] [source/common/network/connection_impl.cc:638] [C86] conectando a 172.18.0.7:8080
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][debug][connection] [source/common/network/connection_impl.cc:647] [C86] conexão em andamento
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][pool] [source/common/http/conn_pool_base.cc:20] pedido de enfileiramento devido à falta de ligações disponíveis
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][debug][connection] [source/common/network/connection_impl.cc:525] [C86] erro de conexão atrasada: 111
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][debug][connection] [source/common/network/connection_impl.cc:183] [C86] soquete de fechamento: 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][S10028475751570510510266] upstream reset
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][http] [source/common/http/conn_manager_implpl.cc:1234] [C85][S100284757515705105266] encoding headers via codec (end_stream=false):
penvoyage-morpheus-envoy | ':status', '503'
A razão para o erro 503
Neste caso, o motivo do erro 503 é que o enviado não consegue chegar à VerneMQ no IP 172.18.0.7 porta 8080 - VerneMQ está ouvindo no outro IP!
Portanto, o envoy retorna 503, que o servidor upstream não está disponível - e que esta condição pode ser corrigida quando o servidor upstream ficar disponível novamente.