你当前正在访问 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 可能相同。 作为临时解决方法,将随机性添加到部署模板中的数据流名称。