envoy无法通过websockets连接到VerneMQ的MQTT,错误代码503
为遇到同样问题的人提供一些快速的背景信息,以及如何调试它们。
错误代码503
这是我得到的错误代码。
在WebSocket握手过程中出错。意外的响应代码。503.
设置envoy日志为调试状态
这是我为envoy设计的docker-compose.yaml。
版本: '3.7
服务。
使者。
建立。
背景:./
dockerfile。Dockerfile
container_name: penvoyage-morpheus-envoy
港口。
– “80:1080”
– “443:1443”
量。
- 类型:体积
来源:《笔仙》_卷宗
目标。/etc/envoy
网络。
- 使者网
用户。"2000:2000"
#user。"root:root"
重新开始:除非停止
环境。
日志级别: debug量。
penvoyage_volume。
外部。
名称:笔仙_卷网络。
envoy_net。
外部。
名称:我的桥梁网络
显示VerneMQ监听器
在VerneMQ容器上,显示监听器和IP。
vmq-admin listener show
ip -4 addr 显示
注意到mqttws是如何被绑定到 172.21.0.2 在8080端口。
系统中存在两个IP。
- 172.21.0.2
- 172.18.0.7
这是由于VerneMQ容器是两个内部docker网络的一部分。
看一下envoy的日志输出
下面是一些摘录,说明来自MQTT客户端的websocket打开请求。
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][http] [source/common/http/conn_manager_impl.cc:210] [C85] 新流
penvoyage-morpheus-envoy | ':authority', 'picockpit.local' 。
penvoyage-morpheus-envoy | ':path', '/mqtt' 。
penvoyage-morpheus-envoy | ':method', 'GET' 。
penvoyage-morpheus-envoy | '连接', '升级'。
[C85][S10028475751570510266]集群'target_verne'匹配URL'/mqtt'。
[C85][S10028475751570510266] 路由器解码头文件。
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] 创建一个新连接
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] 连接到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] 连接中
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][pool] [source/common/http/conn_pool_base.cc:20] 由于没有可用的连接而排队的请求
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connection] [source/common/network/connection_impl.cc:525] [C86] 延迟的连接错误。111
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][connection] [source/common/network/connection_impl.cc:183] [C86] 关闭socket。0
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][client] [source/common/http/codec_client.cc:82] [C86] 断开连接。重置 0 个待处理请求
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][pool] [source/common/http/http1/conn_pool.cc:123] [C86] 客户端断开连接
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][router] [source/common/router/router.cc:532] [C85][S10028475751570510266] 上游重置
penvoyage-morpheus-envoy | [2019-05-19 11:14:33.024][22][debug][http] [source/common/http/conn_manager_impl.cc:1234] [C85][S100284751570510266] 通过codec(end_stream=false)编码头文件。
penvoyage-morpheus-envoy | ':status', '503' 。
503错误的原因
在这种情况下,503错误的原因是envoy无法到达IP 172.18.0.7端口8080的VerneMQ--VerneMQ在另一个IP上监听。
因此,envoy返回503,说上游服务器不可用--而且一旦上游服务器再次可用,这种情况可能会被修复。