如何使用Istio在Kubernetes上运行Mosquitto?

如何使用Istio在Kubernetes上运行Mosquitto?,kubernetes,istio,mosquitto,Kubernetes,Istio,Mosquitto,我在订阅和发布运行在Kubernetes群集上的Mosquetto服务器时遇到问题 我知道我的服务和吊舱在工作。我可以使用我的MOSQUITO服务作为主机从集群内部进行订阅和发布 我也有一个工作的HTTPS网关,所以我可以从外面访问,我可以看到它到达我的mosquitto容器上的端口1883。容器日志: New connection from 127.0.0.1 on port 1883. Client <unknown> disconnected due to protocol e

我在订阅和发布运行在Kubernetes群集上的Mosquetto服务器时遇到问题

我知道我的服务和吊舱在工作。我可以使用我的MOSQUITO服务作为主机从集群内部进行订阅和发布

我也有一个工作的HTTPS网关,所以我可以从外面访问,我可以看到它到达我的mosquitto容器上的端口1883。容器日志:

New connection from 127.0.0.1 on port 1883.
Client <unknown> disconnected due to protocol error.
端口1883上127.0.0.1的新连接。
由于协议错误,客户端已断开连接。
我猜这是预期的行为。因为我是通过https而不是mqtt访问它的

现在,我无法使用以下方式连接到容器:

$ mosquitto_pub --url mqtt://mosquittourl.com.br:<port>/test
$mosquitto\u pub——urlmqtt://mosquittourl.com.br:/test

如何正确设置Istio资源,以便订阅并发布到MOSQUITO服务器?有没有办法将Istio配置为接受mqtt请求并将它们重定向到我的MOSQUITO服务?

我最近能够获得Istio设置,以将TLS加密的mqtt连接路由到 Mosquitto在Kubernetes上的一个集装箱里跑步。您应该使用TLS作为中端口的
协议。最终,Istio可能会像支持gRPC和Mongo一样支持MQTT选项,但现在您需要使用TCP实现未加密的MQTT流量,使用TLS实现安全的MQTT连接

要确保正确配置以使其正常工作,您几乎不需要做什么

  • Istio运算符配置文件yaml文件

    对于为Istio配置主负载平衡器的
    IstioOperator
    ,您需要确保设置正确的端口。对于安全的MQTT流量,这是8883(从技术上讲,您可以使用任何端口,但8883是默认端口)

  • apiVersion:install.istio.io/v1alpha1 种类:IstioOperator 规格: 网格配置: accessLogFile:/dev/stdout 组件: 出口通道: -名称:istio出口网关 已启用:true k8s: 资源: 请求: 中央处理器:10米 内存:40Mi 入口通道: -姓名:istio ingressgateway 已启用:true k8s: 资源: 请求: 中央处理器:10米 内存:40Mi 服务: 端口: -港口:15021 目标港:15021 名称:状态端口 -港口:31400 目标港:31400 名称:tcp #这是发生sni路由的端口 -港口:15443 目标港:15443 名称:tls -港口:8883 目标港:8883 名称:mqtt-secure 飞行员: k8s: 环境: -名称:导频跟踪采样 值:“100” 资源: 请求: 中央处理器:10米 内存:100Mi 价值观: 全球的: 代理: 资源: 请求: 中央处理器:10米 内存:40Mi 飞行员: 自动缩放已启用:false 网关: istio出口网关: 自动缩放已启用:false istio ingressgateway: 自动缩放已启用:false runAsRoot:对
  • Istio网关yaml文件
  • 这里的重要部分是确保指定Kubernetes secrets中已有的SSL证书的名称,并使用在IstioOperator中使用的相同端口,并确保协议为TLS。
    tls:
    块告诉网关使用指定的SSL证书终止tls

    apiVersion:networking.istio.io/v1alpha3 种类:网关 元数据: 名称:我的mqtt ssl网关 规格: 选择器: istio:ingressgateway#使用istio默认控制器 服务器: -端口: 电话:8883 名称:mqtt-secure 协议:TLS 主持人: - "*" tls: 证书名称:cert-my.certname.com 模式:简单 私钥:sds 服务器证书:sds
  • Istio虚拟服务yaml文件
  • 最后一步是设置一个Istio虚拟服务,从Istio网关获取流量并将其路由到正确的pod。在目的地更新您的pod名称。另一方面是匹配端口8883,并将流量重新路由到端口1883上的MOSQUITO,因为流量已在Istio网关中TLS终止

    apiVersion:networking.istio.io/v1alpha3 种类:虚拟服务 元数据: 名称:我的mqtt vs 规格: 主持人: - "*" 网关: -我的mqtt ssl网关 tcp: -匹配: -港口:8883 路线: -目的地: 主机:我的mqtt代理pod名称 端口: 电话:1883
    我是否正确理解您正在使用HTTPS代理连接到MQTT客户端?如果是这样的话,你认为这会起什么作用?为什么您认为将MQTT客户机连接到HTTPS服务器会有任何用处?我理解问题描述中的情况是这样的,它不应该起作用。我在寻求一种解决方法。例如,如何设置Istio以接受mqtt请求并将它们重定向到MOSQUITO服务。如果可能的话。或者我猜在你的情况下应该是TCP。你能加上你的YAML吗?你是istio网格中的MOSQUITO服务器?您是否如@ashu所述,将入口网关上的1883端口添加并配置为TCP?还有一篇关于这个的帖子,也许你会在这里找到一些有用的东西。