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][defug]

[source/common/http/codec_client.cc:26] [C86] 正在连接。

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][defug]

[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,说上游服务器不可用--而且一旦上游服务器再次可用,这种情况可能会被修复。