使用 Akri 服务发现 OPC UA 数据源
重要
Azure IoT 操作预览版(由 Azure Arc 启用)当前处于预览状态。 不应在生产环境中使用此预览版软件。
当正式版可用时,需要部署新的 Azure IoT Operations 安装,你将无法升级预览版安装。
有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款。
在本文中,你将了解如何自动发现 OPC UA 数据源。 部署 Azure IoT 操作预览版后,配置 Akri 服务,以在边缘发现 OPC UA 数据源。 Akri 服务在 Kubernetes 群集中创建自定义资源来表示它所发现的数据源。 有了发现 OPC UA 数据源的这种能力,就无需再使用操作体验 Web UI 手动配置数据源。
重要
目前,无法使用 Azure 设备注册表来管理 Akri 服务发现和创建的资产。
借助 Akri 服务,就可以在 OPC UA 服务器的地址空间中检测和创建资产。 OPC UA 资产检测会为符合 OPC UA 设备集成 (DI) 规范的资产生成 AssetType
和 Asset
自定义资源。
先决条件
安装 Azure IoT 操作预览版
运行以下命令验证是否正确配置了 Akri 服务 Pod:
kubectl get pods -n azure-iot-operations
输出中包括的行显示 Akri 代理和发现 Pod 正在运行:
NAME READY STATUS RESTARTS AGE aio-akri-agent-daemonset-hwpc7 1/1 Running 0 17mk0s aio-opc-asset-discovery-wzlnj 1/1 Running 0 8m28s
配置 OPC UA 发现处理程序
若要配置用来检测资产的 OPC UA 发现处理程序,请先使用本部分中所述的值创建一个 YAML 配置文件。
名称 | 必需 | Datatype | 默认值 | 注释 |
---|---|---|---|---|
EndpointUrl |
是 | 字符串 | Null | 用于资产发现的 OPC UA 终结点 URL |
AutoAcceptUntrustedCertificates |
true ¹ | 布尔 | false | 客户端是否应当自动接受不受信任的证书? 仅当链验证期间未发生不可抑制的错误时,证书才能被自动接受为受信任的证书。 例如,具有不完整链的证书不会被接受。 |
UseSecurity |
true ¹ | 布尔 | 是 | 客户端是否应当使用安全连接? |
UserName |
false | 字符串 | Null | 用户身份验证的用户名。 ² |
Password |
false | 字符串 | Null | 用于用户身份验证的密码。 ² |
¹ 当前版本的发现处理程序仅支持 UseSecurity=false
并需要 autoAcceptUntrustedCertificates=true
。
² 在 Akri 服务可以传递 Kubernetes 机密之前应用的一个临时实现。
以下示例演示了 OPC PLC 服务器的发现。 你可以为多个 OPC PLC 服务器添加资产参数。
要创建 YAML 配置文件,请将以下内容复制粘贴到新文件中,并将其另存为
opcua-configuration.yaml
:如果使用通过 Azure IoT 操作快速入门部署的模拟 PLC 服务器,则无需更改
endpointUrl
。 如果你自己的 OPC UA 服务器正在运行或使用 Azure 上部署的模拟 PLC 服务器,请相应地添加你的终结点 URL。 发现终结点 URL 类似于opc.tcp://<FQDN>:50000/
。 若要查找 OPC PLC 服务器的 FQDN,请在 Azure 门户中转到你的部署。 对于每个服务器,请将 FQDN 值复制粘贴到终结点 URL 中。apiVersion: akri.sh/v0 kind: Configuration metadata: name: aio-akri-opcua-asset spec: discoveryHandler: name: opcua-asset discoveryDetails: "opcuaDiscoveryMethod:\n - asset:\n endpointUrl: \" opc.tcp://opcplc-000000:50000\"\n useSecurity: false\n autoAcceptUntrustedCertificates: true\n" brokerProperties: {} capacity: 1
若要应用配置,请运行以下命令:
kubectl apply -f opcua-configuration.yaml -n azure-iot-operations
提示
在默认的 Azure IoT 操作部署中,OPC UA 发现处理程序已配置为发现模拟 PLC 服务器。 如果要发现连接到其他 OPC UA 服务器的资产,可以将其添加到配置文件中。
验证配置
若要确认资产发现容器是否已配置并正在运行,请运行以下命令:
使用以下命令检查 Pod 日志:
kubectl logs <insert aio-opc-asset-discovery pod name> -n azure-iot-operations
aio-opc-asset-discovery
Pod 中的日志显示,几秒钟后,发现处理程序已向 Akri 服务注册:2024-08-01T15:04:12.948Z aio-opc-asset-discovery-4nsgs - OPC UA SDK 1.5.374.70 from 07/20/2024 07:37:16 2024-08-01T15:04:12.973Z aio-opc-asset-discovery-4nsgs - OPC UA SDK informational version: 1.5.374.70+1ee3beb87993019de4968597d17cb54d5a4dc3c8 2024-08-01T15:04:12.976Z aio-opc-asset-discovery-4nsgs - Akri agent registration enabled: True 2024-08-01T15:04:13.475Z aio-opc-asset-discovery-4nsgs - Hosting starting 2024-08-01T15:04:13.547Z aio-opc-asset-discovery-4nsgs - Overriding HTTP_PORTS '8080' and HTTPS_PORTS ''. Binding to values defined by URLS instead 'http://+:8080'. 2024-08-01T15:04:13.774Z aio-opc-asset-discovery-4nsgs - Now listening on: http://:8080 2024-08-01T15:04:13.774Z aio-opc-asset-discovery-4nsgs - Application started. Press Ctrl+C to shut down. 2024-08-01T15:04:13.774Z aio-opc-asset-discovery-4nsgs - Hosting environment: Production 2024-08-01T15:04:13.774Z aio-opc-asset-discovery-4nsgs - Content root path: /app 2024-08-01T15:04:13.774Z aio-opc-asset-discovery-4nsgs - Hosting started 2024-08-01T15:04:13.881Z aio-opc-asset-discovery-4nsgs - Registering with Agent as HTTP endpoint using own IP from the environment variable POD_IP: 10.42.0.245 2024-08-01T15:04:14.875Z aio-opc-asset-discovery-4nsgs - Registered with the Akri agent with name opcua-asset for http://10.42.0.245:8080 with type Network and shared True 2024-08-01T15:04:14.877Z aio-opc-asset-discovery-4nsgs - Successfully re-registered OPC UA Asset Discovery Handler with the Akri agent 2024-08-01T15:04:14.877Z aio-opc-asset-discovery-4nsgs - Press CTRL+C to exit
大约一分钟后,Akri 服务会根据配置发出第一个发现请求:
2024-08-01T15:04:15.280Z aio-opc-asset-discovery-4nsgs [opcuabroker@311 SpanId:6d3db9751eebfadc, TraceId:e5594cbaf3993749e92b45c88c493377, ParentId:0000000000000000 ConnectionId:0HN5I7CQJPJL0 RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HN5I7CQJPJL0:00000001] - Reading message. 2024-08-01T15:04:15.477Z aio-opc-asset-discovery-4nsgs [opcuabroker@311 SpanId:6d3db9751eebfadc, TraceId:e5594cbaf3993749e92b45c88c493377, ParentId:0000000000000000 ConnectionId:0HN5I7CQJPJL0 RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HN5I7CQJPJL0:00000001] - Received discovery request from ipv6:[::ffff:10.42.0.241]:48638 2024-08-01T15:04:15.875Z aio-opc-asset-discovery-4nsgs [opcuabroker@311 SpanId:6d3db9751eebfadc, TraceId:e5594cbaf3993749e92b45c88c493377, ParentId:0000000000000000 ConnectionId:0HN5I7CQJPJL0 RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HN5I7CQJPJL0:00000001] - Start asset discovery 2024-08-01T15:04:15.882Z aio-opc-asset-discovery-4nsgs [opcuabroker@311 SpanId:6d3db9751eebfadc, TraceId:e5594cbaf3993749e92b45c88c493377, ParentId:0000000000000000 ConnectionId:0HN5I7CQJPJL0 RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HN5I7CQJPJL0:00000001] - Discovering OPC UA opc.tcp://opcplc-000000:50000 using Asset Discovery 2024-08-01T15:04:15.882Z aio-opc-asset-discovery-4nsgs [opcuabroker@311 SpanId:6d3db9751eebfadc, TraceId:e5594cbaf3993749e92b45c88c493377, ParentId:0000000000000000 ConnectionId:0HN5I7CQJPJL0 RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HN5I7CQJPJL0:00000001] - Selected AutoAcceptUntrustedCertificates mode: False
在发现完成后,发现处理程序会将结果发送回 Akri 服务,以创建包含资产信息和可观测变量的 Akri 实例自定义资源。 发现处理程序每隔 10 分钟重复一次发现,以检测服务器上的任何更改。
若要查看发现的 Akri 实例,请运行以下命令:
kubectl get akrii -n azure-iot-operations
上一命令的输出如以下示例所示。 可能需要等待几秒钟才能创建 Akri 实例:
NAME CONFIG SHARED NODES AGE akri-opcua-asset-dbdef0 akri-opcua-asset true ["k3d-k3s-default-server-0"] 24h
OPC UA 连接器监督程序会监视
opc-ua-asset
类型的新 Akri 实例自定义资源,并为其生成初始资产类型和资产自定义资源。 你可以通过添加设置(例如更多数据点的扩展发布或 OPC UA 连接器可观测性设置)来修改资产自定义资源。若要确认 Akri 实例是否已正确连接到 OPC UA 连接器,请运行以下命令。 将占位符替换为上一命令的输出中包含的 Akri 实例的名称:
kubectl get akrii <AKRI_INSTANCE_NAME> -n azure-iot-operations -o json
命令输出包括如以下示例所示的一个部分。 此代码片段显示了 Akri 实例
brokerProperties
值,并确认 OPC UA 连接器已连接。"spec": { "brokerProperties": { "ApplicationUri": "Boiler #2", "AssetEndpointProfile": "{\"spec\":{\"uuid\":\"opc-ua-broker-opcplc-000000-azure-iot-operation\"……