安全性和可伸缩性是部署 Azure IoT 操作的首要任务。 本文概述了在为生产环境设置 Azure IoT 操作时应考虑的准则。
在考虑适当的配置之前,决定是要将 Azure IoT 操作部署到单节点群集还是多节点群集。 本文中的许多准则无论群集类型如何都适用,但当存在差异时,将会特别指出。
平台
目前,Ubuntu 24.04 上的 K3s 是可用于在生产环境中部署 Azure IoT 操作的唯一正式发布平台。
群集设置
确保硬件设置足以满足你的应用场景,并从安全环境开始。
系统配置
创建满足系统要求的已启用 Arc 的 K3s 群集。
- 使用 Azure IoT 操作支持的环境。
- 根据文档配置群集。
- 如果预计群集会出现间歇性连接,请确保为群集处于脱机状态时的群集缓存数据和消息分配了足够的磁盘空间。
- 如果可能,在部署到主要生产群集之前,将第二个群集用作测试新更改的暂存区域。
- 关闭 Azure Arc 的自动升级,以完全控制何时将新更新应用到群集。 改为根据需要手动升级代理。
- 对于多节点群集:配置具有边缘卷的群集,以便为在部署期间实现容错做好准备。
安全性
请考虑以下措施,在部署之前确保群集设置是安全的。
- 验证映像以确保它们已由 Microsoft 签名。
- 执行 TLS 加密时,自带颁发者并与企业 PKI 集成。
- 使用机密进行本地身份验证。
- 使用用户分配的托管标识进行云连接。
- 使用最新的修补程序和次要版本获取所有可用的安全和 bug 修复,使群集和 Azure IoT 操作部署保持最新状态。
网络
如果使用企业防火墙或代理,请将 Azure IoT 操作终结点添加到允许列表。
可观察性
对于生产部署,在部署 Azure IoT 操作之前,先在群集上部署可观测性资源。 我们还建议在 Azure Monitor 中设置 Prometheus 警报。
部署
对于生产就绪型部署,请在 Azure IoT 操作部署期间包括以下配置。
MQTT 中转站
在 Azure 门户部署向导中,代理资源是在“配置”选项卡中设置的。
根据内存配置文件以及对处理连接和消息的需求配置基数设置。 例如,以下设置可能支持单节点或多节点群集:
设置 单节点 多节点 frontendReplicas 1 5 frontendWorkers 4 8 backendRedundancyFactor 2 2 backendWorkers 1 4 backendPartitions 1 5 内存配置文件 低 高 为磁盘支持的消息缓冲区设置可防止 RAM 溢出的最大大小。
架构注册表和存储
在 Azure 门户部署向导中,架构注册表及其所需的存储帐户是在“依赖项管理”选项卡中设置的。
- 存储帐户必须启用分层命名空间。
- 架构注册表的托管标识必须具有存储帐户的参与者权限。
- 仅当启用了公用网络访问时,才支持存储帐户。
对于生产部署,将存储帐户的公共网络访问权限限定为仅允许来自受信任 Azure 服务的流量。 例如:
- 在 Azure 门户中,导航到架构注册表使用的存储帐户。
- 从导航菜单中选择 “安全性 + 网络 > 网络 ”。
- 对于公用网络访问设置,请选择 “从所选虚拟网络和 IP 地址启用”。
- 在“网络”页的 “例外 ”部分中,确保已选择 “允许受信任的Microsoft服务访问此资源 ”选项。
- 选择保存以应用更改。
有关详细信息,请参阅 配置 Azure 存储防火墙和虚拟网络 > ,授予对受信任 Azure 服务的访问权限。
容错
多节点群集:可以在 Azure 门户部署向导的“依赖项管理”选项卡中启用容错。 它仅在多节点群集上受支持,建议将其用于生产部署。
安全设置
在部署期间,可以选择使用测试设置或安全设置。 对于生产部署,请选择安全设置。 如果要升级用于生产的现有测试设置部署,请按照启用安全设置中的步骤操作。
后期部署
部署 Azure IoT 操作后,为生产应用场景提供以下配置。
MQTT 中转站
部署后,可以编辑 BrokerListener 资源:
- 为侦听器使用自动证书管理配置 TLS。
还可以编辑 BrokerAuthentication 资源。
- 使用 X.509 证书或 Kubernetes 服务帐户令牌进行身份验证。
- 请勿使用无身份验证。
创建新资源时,管理其授权:
- 创建 BrokerAuthorization 资源并提供主题资产所需的最低权限。
OPC UA 代理
要在生产时连接到资产,请配置 OPC UA 身份验证:
数据流
在生产环境中使用数据流时:
- 对 MQTT 代理使用服务帐户令牌 (SAT) 身份验证(默认)。
- 始终使用托管标识身份验证。 如果可能,在数据流终结点中使用用户分配的托管标识,以实现灵活性和可审核性。
- 缩放数据流配置文件,以提高吞吐量并实现高可用性。
- 将多个数据流分组到数据流配置文件中,并相应地自定义每个配置文件的缩放。