你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

已知问题:Azure IoT 操作

本文列出了 Azure IoT Operations 的已知问题。

部署和卸载问题

  • 如果希望在未经明确同意的情况下不对群集进行任何更新,则应在启用群集时禁用 Arc 更新。 这是因为 Arc 代理会自动更新某些系统扩展。 若要禁用更新,请在 az connectedk8s connect 命令中包含 --disable-auto-upgrade 标志。

  • 如果部署失败并出现 "code":"LinkedAuthorizationFailed" 错误,则表示你对包含你的群集的资源组没有 Microsoft.Authorization/roleAssignments/write 权限。

  • 直接编辑 Kubernetes 群集中的 SecretProviderClass 和 SecretSync 自定义资源可以中断 Azure IoT 操作中的机密流。 对于与机密相关的任何操作,请使用操作体验 UI。

  • 在部署 Azure IoT 操作期间和之后,你可能会在日志和 Kubernetes 事件中看到有关 Unable to retrieve some image pull secrets (regcred) 的警告。 这些警告是如预期的,不会影响 Azure IoT 操作的部署和使用。

  • 如果部署失败并显示消息 Error occurred while creating custom resources needed by system extensions,则表示你遇到了已知的偶发故障,该故障将在未来的版本中予以修复。 解决方法是使用 az iot ops delete 命令和 --include-deps 标志来从群集中删除 Azure IoT 操作。 从群集中删除 Azure IoT 操作及其依赖项后,可重试部署。

MQTT 中转站

  • 使用 Kubernetes 在群集中创建的 MQTT 代理资源不可见 Azure 门户。 这是如预期的,因为目前不支持使用 Kubernetes 管理 Azure IoT 操作组件,且不支持将资源从边缘同步到云。

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

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

  • 如果代理只有一个后端副本(backendChain.redundancyFactor 设置为 1),则升级 Azure IoT 操作可能会失败。 仅当 Broker 具有多个后端副本时,才升级 Azure IoT 操作。

  • 尽管 MQTT 代理的诊断在其自己的主题上生成遥测数据,但在订阅 # 主题时,仍可能从自测试中获取消息。

  • 如果基数和内存配置文件值对于群集来说设置得过大,则部署可能会失败。 若要解决此问题,请将副本计数设置为 1 并使用较小的内存配置文件,例如 low

  • 请勿发布或订阅以 azedge/dmqtt/selftest 开头的诊断探测主题。 发布或订阅这些主题可能会影响探测或自测试检查,从而导致结果无效。 诊断探测日志、指标或仪表板中可能会列出无效的结果。 例如,你可能会在诊断探测日志中看到“发布”操作类型的探测事件的路径验证失败问题。

Azure IoT 分层网络管理(预览版)

  • 如果在 Ubuntu 主机上运行 K3S 时分层网络管理服务未获取 IP 地址,请使用 --disable=traefik 选项重新安装 K3S,而无需 traefik 入口控制器

    curl -sfL https://get.k3s.io | sh -s - --disable=traefik --write-kubeconfig-mode 644
    

    有关详细信息,请参阅网络 | K3s

  • 如果在使用子网络级别上运行的 CoreDNS 服务时 DNS 查询无法解析为预期的 IP 地址,请升级到 Ubuntu 22.04 并重新安装 K3S。

OPC UA 连接器

  • Azure 设备注册表资产定义支持在属性部分中使用数字,而 OPC 监督程序只需要字符串。

  • 将具有新资产终结点配置文件的新资产添加到 OPC UA 代理并触发重新配置时,opc.tcp Pod 的部署会发生更改,以适应用户名和密码的新机密装载。 如果新装载由于某种原因失败,Pod 将不会重启,因此正确配置的资产的旧流也会停止。

  • 使用者名称和应用程序 URI 必须与提供的证书完全匹配。 由于没有交叉验证,因此任何错误都可能导致 OPC UA 服务器拒绝应用程序证书。

  • 成功安装 AIO 后提供新的无效 OPC UA 应用程序实例证书可能会导致连接错误。 若要解决此问题,请删除 Azure IoT 操作实例并重启安装。

OPC PLC 模拟器

如果为 OPC PLC 模拟器创建资产终结点,但 OPC PLC 模拟器没有将数据发送到 MQTT 代理,请运行以下命令,为资产终结点设置 autoAcceptUntrustedServerCertificates=true

ENDPOINT_NAME=<name-of-you-endpoint-here>
kubectl patch AssetEndpointProfile $ENDPOINT_NAME \
-n azure-iot-operations \
--type=merge \
-p '{"spec":{"additionalConfiguration":"{\"applicationName\":\"'"$ENDPOINT_NAME"'\",\"security\":{\"autoAcceptUntrustedServerCertificates\":true}}"}}'

注意

请勿在生产或预生产环境中使用此配置。 在没有正确执行身份验证的情况下将群集暴露在 Internet 中,可能会导致未经授权的访问,甚至导致 DDOS 攻击。

可以使用以下命令修补所有资产终结点:

ENDPOINTS=$(kubectl get AssetEndpointProfile -n azure-iot-operations --no-headers -o custom-columns=":metadata.name")
for ENDPOINT_NAME in `echo "$ENDPOINTS"`; do \
kubectl patch AssetEndpointProfile $ENDPOINT_NAME \
   -n azure-iot-operations \
   --type=merge \
   -p '{"spec":{"additionalConfiguration":"{\"applicationName\":\"'"$ENDPOINT_NAME"'\",\"security\":{\"autoAcceptUntrustedServerCertificates\":true}}"}}'; \
done

如果在你创建新资产后 OPC PLC 模拟器未将数据发送到 MQTT 代理,请重启 OPC PLC 模拟器 Pod。 Pod 名称如下所示:aio-opc-opc.tcp-1-f95d76c54-w9v9c。 若要重启 Pod,请使用 k9s 工具终止 Pod,或运行以下命令:

kubectl delete pod aio-opc-opc.tcp-1-f95d76c54-w9v9c -n azure-iot-operations

数据流

  • 在群集中创建的数据流自定义资源在操作体验 UI 中不可见。 这是如预期的,因为目前不支持使用 Kubernetes 管理 Azure IoT 操作组件,且不支持将资源从边缘同步到云。

  • 尚不支持自定义 Kafka 终结点的 X.509 身份验证。

  • 尚不支持使用架构反序列化和验证消息。 在源配置中指定架构仅允许操作体验门户显示数据点列表,但不会根据架构验证数据点。

  • 在操作体验门户中创建 X.509 机密会导致出现具有错误编码数据的机密。 若要解决此问题,请通过 Azure Key Vault 创建多行机密,然后从操作体验门户中的机密列表中选择它。

  • 将多个 IoT 操作实例连接到同一事件网格 MQTT 命名空间时,可能会由于客户端 ID 冲突而发生连接失败。 客户端 ID 当前派生自数据流资源名称,使用基础结构即代码 (IaC) 模式进行部署时,生成的客户端 ID 可能相同。 作为临时解决方法,将随机性添加到部署模板中的数据流名称。