Azure IoT 操作的内置本地 MQTT 代理

重要

本页包含使用 Kubernetes 部署清单(目前为预览版)管理 Azure IoT 操作组件的说明。 此功能存在若干限制,不应该用于生产工作负载。

有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款

Azure IoT 操作包括一个企业级且符合标准的 MQTT 代理。 MQTT 代理是可扩展的、高度可用且原生 Kubernetes 的。 它提供 IoT 运营的消息传送平台,支持边缘到云的双向通信,并在边缘支持 事件驱动的应用程序

MQTT 合规性

MQTT 是 IoT 空间中的常见协议。 其简单设计使单个经纪人能够同时为数千个客户端提供服务,并轻量级地创建和管理发布-订阅主题。 许多 IoT 设备原生支持 MQTT。 下游转换网关将各种 IoT 协议转换为 MQTT。

MQTT 代理支持 IoT作中的消息传送层,并与 MQTT v3.1.1 和 MQTT v5 兼容。 有关支持的 MQTT 功能的详细信息,请参阅 MQTT 代理中的 MQTT 功能支持

体系结构

MQTT 代理有两个主要层:

  • 无状态前端层
  • 有状态和分片后端层

前端层处理客户端连接和请求,并将其路由到后端。 后端层按键对数据进行分区,例如客户端会话的客户端 ID 和主题消息的主题名称。 后端层使用链复制来复制每个分区中的数据。

体系结构的目标包括:

  • 容错和隔离:即使后端 Pod 发生故障,消息发布仍会继续,并且故障不会传播到系统的其余部分。
  • 故障恢复:自动故障恢复,无需操作员干预。
  • 无消息丢失:如果分区中至少有一个前端 Pod 和一个后端 Pod 正在运行,则会传递消息。
  • 弹性缩放:发布和订阅吞吐量的水平缩放支持边缘和云部署。
  • 大规模一致的性能:由于链复制,限制消息延迟开销。
  • 作简单性:减少对外部组件的依赖,以简化维护和复杂性。

配置

对于配置,MQTT 代理使用多个 Kubernetes 自定义资源来定义代理的行为和功能的不同方面:

  • 主要资源是代理,用于定义全局设置,例如基数、内存使用量配置文件和诊断设置。
  • 一个代理资源最多可以有三个 BrokerListener,每个侦听指定服务类型(NodePortLoadBalancerClusterIP)上的传入 MQTT 连接。 每个 BrokerListener 资源可以有多个端口。
  • BrokerListener 资源中的每个端口都可以与 BrokerAuthentication 资源和 BrokerAuthorization 资源相关联。 这些身份验证和授权策略确定哪些客户端可以连接到端口,以及他们可以在代理上执行的操作。

代理与 BrokerListener 之间的关系是“一对多”,而 BrokerListener 与 BrokerAuthentication/BrokerAuthorization 之间的关系是“多对多”。 这些资源的实体关系图为:

显示代理资源模型的关系图。

默认情况下,IoT 操作部署默认代理默认 BrokerListener默认 BrokerAuthentication。 所有这些资源都命名为 default。 这些资源共同提供了 IoT 操作正常运行所需的基本 MQTT 代理设置。 默认设置为:

显示默认代理资源和它们之间的关系的关系图。

重要

为了避免中断 IoT作内部组件之间的通信,请不要修改任何默认配置。

若要自定义 MQTT 中转站部署,请将新资源(如 BrokerListeners、BrokerAuthentication 和 BrokerAuthorization)添加到默认中转站。

Broker 资源不可变,在部署后无法修改,但仅在高级方案中需要自定义。 若要详细了解如何自定义代理资源,请参阅自定义默认代理

在完整部署中,可以有多个 BrokerListener,每个都有多个端口,每个端口可以具有与之关联的不同 BrokerAuthentication 和 BrokerAuthorization 资源。

例如,从默认设置开始,可以添加:

  • 一个名为 example-lb-listener 的 LoadBalancer BrokerListener,其包含两个端口 1883 和 8883
  • 一个名为 example-nodeport-listener 的 NodePort BrokerListener,其包含单个端口 1884 ( 31884)nodePort
  • 一个名为 example-authn 的 BrokerAuthentication 资源,其使用自定义身份验证方法
  • 一个名为 example-authz 的 BrokerAuthorization 资源,其使用自定义授权设置

如果使用相同的 BrokerAuthentication 和 BrokerAuthorization 资源配置所有新端口,则安装程序如下所示:

显示完整的自定义代理部署和每个代理之间的关系的关系图。

此方法让默认设置保持不变,并允许添加新资源以自定义 MQTT 代理服务器部署。

默认代理资源

每个 IoT 操作部署只能有一个 broker,并且必须将其命名为 default。 要使物联网操作正常运行,需要默认代理资源。 它是不可变的,在部署后无法修改。

注意

请勿删除默认代理资源。 这样做会中断 IoT 操作内部组件之间的通信,并且部署将停止运行。

自定义默认代理

大多数设置不需要自定义默认代理资源。 需要自定义的设置包括:

只能在初始部署期间使用 Azure CLI 或 Azure 门户自定义默认中转站。 如果需要不同的代理配置设置,则需要新的部署。

若要在部署期间自定义默认代理,请执行以下操作:

按照以下指南部署 IoT 操作时,请在“配置”部分的“MQTT 代理配置”下进行查看。 在这里,可以自定义基数和内存配置文件设置。 若要配置其他设置(包括磁盘支持的消息缓冲区)和高级 MQTT 客户端选项,请使用 Azure CLI。

重要

在初始部署后,无法更新代理资源。 部署后不允许对基数、内存配置文件或磁盘缓冲区进行配置更改。

解决方法是,在使用 az iot ops init 命令部署 Azure IoT 操作时,可以将 --broker-config-file 参数与 MQTT 中转站的 JSON 配置文件一起添加。 有关详细信息,请参阅高级 MQTT 代理配置配置核心 MQTT 代理设置

查看默认代理设置

若要查看默认代理的设置:

  1. 在 Azure 门户中,转到 IoT 操作实例。
  2. 在“组件”下,选择“MQTT 代理”
  3. 在“代理详细信息”下,选择“JSON 视图”