使用 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) 规范的资产生成 AssetTypeAsset 自定义资源。

先决条件

  • 安装 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 服务器添加资产参数。

  1. 要创建 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
    
  2. 若要应用配置,请运行以下命令:

    kubectl apply -f opcua-configuration.yaml -n azure-iot-operations
    

提示

在默认的 Azure IoT 操作部署中,OPC UA 发现处理程序已配置为发现模拟 PLC 服务器。 如果要发现连接到其他 OPC UA 服务器的资产,可以将其添加到配置文件中。

验证配置

若要确认资产发现容器是否已配置并正在运行,请运行以下命令:

  1. 使用以下命令检查 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 分钟重复一次发现,以检测服务器上的任何更改。

  2. 若要查看发现的 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 连接器可观测性设置)来修改资产自定义资源。

  3. 若要确认 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\"……