Поделиться через


Обнаружение серверов OPC UA с помощью Akri

Akri — это интерфейс ресурсов Kubernetes, который позволяет легко выявлять разнородные периферийные устройства (например, IP-камеры и USB-устройства) в качестве ресурсов в кластере Kubernetes. Akri постоянно обнаруживает узлы, имеющие доступ к этим устройствам для планирования рабочих нагрузок на основе них. Akri — это проект песочницы CNCF, созданный для периферии, обрабатывающий динамическое появление и исчезновение периферийных устройств. В настоящее время она поддерживает протоколы OPC UA, ONVIF и udev, но вы также можете реализовать пользовательские обработчики протоколов, предоставляемые шаблоном. Дополнительные сведения об Akri см. здесь.

В этой статье описывается, как развернуть примеры контейнеров серверов OPC PLC в Azure и обнаружить их, развернув Akri в кластере AKS Edge Essentials. OPC UA — это протокол связи для промышленной автоматизации. Это технология клиента или сервера, которая поставляется с платформой безопасности и коммуникации. Если в любой момент в демонстрации вы хотите более глубоко ознакомиться с OPC UA или уточнить термин, см. сведения о спецификациях OPC UA в Интернете.

Эта демонстрация поможет вам приступить к работе с Akri для обнаружения серверов OPC UA и использования их с помощью брокера, содержащего клиент OPC UA. В частности, для этого сценария была создана конфигурация Akri с именем OPC UA Monitoring . В этой конфигурации показано, как можно использовать Akri для обнаружения аномалий определенной переменной OPC UA. Для этого клиенты OPC UA в брокерах подписываются на эту переменную и передают её значение через gRPC для потребления веб-приложением для обнаружения аномалий. Эту конфигурацию можно использовать для мониторинга барометра, детектора co и т. д. Однако в этом примере переменная OPC UA представляет значения PLC (программируемого контроллера логики) для температуры термостата. Любое значение за пределами диапазона от 70 до 80 градусов является аномалией. Кроме того, если вы хотите использовать сертификаты для безопасности, перейдите к разделу в конце.

Диаграмма, показывающая последовательность работы демо-версии Akri OPC UA.

Предпосылки

  • Кластер AKS Edge Essentials запущен и функционирует.
  • Подписка Azure и группа ресурсов для развертывания серверов OPC PLC.
  • Akri работает только в Linux: используйте узлы Linux для этого упражнения.

Создание серверов OPC UA

Теперь создайте некоторые серверы OPC UA PLC для обнаружения. Вместо того чтобы начинать с нуля, разверните контейнеры серверов OPC PLC. Дополнительные сведения о контейнерах и их параметрах см. здесь. В этой демонстрации используется шаблон, предоставленный для развертывания экземпляров контейнеров сервера OPC PLC в Azure.

  1. Перейдите к файлу readme примера OPC PLC для Azure IoT Edge и выберите "Развернуть в Azure".

  2. Выберите "Изменить шаблон " и перейдите к строке 172. Замените всю строку следующим кодом, чтобы добавить необходимые флаги для развертывания нужных серверов OPC PLC:

    "[concat('./opcplc --pn=50000 --sph --fn=1 --fr=1 --ft=uint --ftl=65 --ftu=85 --ftr=True --aa --sph --ftl=65 --ftu=85 --ftr=True --ut', ' --ph=', variables('aciPlc'), add(copyIndex(), 1), '.', resourceGroup().location, '.azurecontainer.io')]"
    

    Дополнительные сведения о параметрах см. в файле readme.

  3. Сохраните шаблон и заполните сведения о проекте и экземпляре. Для запуска двух серверов OPC PLC укажите 2.

  4. Выберите "Рецензирование" и "Создать", а затем создайте серверы в Azure.

Теперь вы успешно создали два сервера OPC UA PLC, каждый из которых имеет один быстрый узел PLC, который создает целое число без знака с нижней границой = 65 и верхняя граница = 85 в частоте 1.

Запуск Akri

  1. Убедитесь, что серверы OPC UA запущены, проверив, что экземпляры контейнеров запущены на портале Azure.

  2. Чтобы Akri правильно обнаруживать серверы, укажите правильные URL-адреса обнаружения при установке Akri.

    URL-адреса обнаружения отображаются как opc.tcp://<FQDN>:50000/. Чтобы получить FQDN ваших серверов OPC PLC, перейдите к вашим развертываниям в Azure, и там будет отображаться FQDN. Скопируйте и вставьте полное доменное имя в URL-адреса обнаружения для каждого сервера.

    Снимок экрана, показывающий FQDN экземпляра контейнера на портале Azure.

  3. Добавьте диаграммы Akri helm, если у вас еще нет:

    helm repo add akri-helm-charts https://project-akri.github.io/akri/
    

    Если вы уже добавили Akri helm chart ранее, обновите репозиторий, чтобы получить последнюю сборку.

    helm repo update
    
  4. Установите Akri с помощью Helm. При установке Akri укажите, что необходимо развернуть обработчики обнаружения OPC UA, задав значение helm opcua.discovery.enabled=true.

    В этом сценарии укажите Identifier NodeID NamespaceIndex, который вы хотите, чтобы брокеры отслеживали. В этом случае это переменная температуры, созданная ранее, которая имеет Identifier из FastUInt1 и NamespaceIndex из 2.

    Обязательно замените opcua.configuration.discoveryDetails.discoveryUrls на URL-адреса, которые вы получили на предыдущем шаге.

    helm install akri akri-helm-charts/akri `
       --set opcua.discovery.enabled=true `
       --set opcua.configuration.enabled=true `
       --set opcua.configuration.name=akri-opcua-monitoring `
       --set opcua.configuration.brokerPod.image.repository="ghcr.io/project-akri/akri/opcua-monitoring-broker" `
       --set opcua.configuration.brokerPod.image.tag="latest-dev" `
       --set opcua.configuration.brokerProperties.IDENTIFIER='FastUInt1' `
       --set opcua.configuration.brokerProperties.NAMESPACE_INDEX='2' `
       --set opcua.configuration.discoveryDetails.discoveryUrls[0]="opc.tcp://<FQDN of 1st container instance>:50000/" `
       --set opcua.configuration.discoveryDetails.discoveryUrls[1]="opc.tcp://<FQDN of 2nd container instance>:50000/" `
    

    Замечание

    FastUInt1 — это идентификатор быстро изменяющегося узла , предоставленного сервером OPC PLC.

    Дополнительные сведения о параметрах конфигурации OPC UA см. здесь.

  5. После установки Akri агент Akri обнаруживает два сервера и создает экземпляр для каждого сервера. Проследите за запуском двух подов брокера, по одному для каждого сервера:

    kubectl get pods -o wide --watch
    

    Вы также можете убедиться, что модуль мониторинга Akri успешно подключен к серверу OPC UA:

    kubectl logs <name of OPC UA monitoring pod>
    

    Чтобы проверить больше элементов Akri, выполните следующие действия.

    • Выполните команду kubectl get crd, и вы увидите список CRD.
    • Запустите kubectl get akric, и вы должны увидеть akri-opcua-monitoring.
    • Если серверы OPC PLC были обнаружены и модули pod были запущены, вы можете просмотреть экземпляры, выполнив kubectl get akrii, и вы можете дополнительно проверить с помощью kubectl get akrii akri-opcua-monitoring-<ID> -o yaml.

Развертывание веб-приложения обнаружения аномалий в качестве конечного потребителя брокеров

Для этой комплексной демонстрации был создан пример веб-приложения для обнаружения аномалий. Он имеет шаблон gRPC, вызывая службы gRPC брокеров и получая последнее значение температуры. Затем он определяет, является ли это значение выбросом по отношению к набору данных с помощью стратегии Local Outlier Factor. Набор данных — это просто CSV-файл с числами в диапазоне от 70 до 80, повторяющимися несколько раз; таким образом, любое значение значительно за пределами этого диапазона будет рассматриваться как выброс. Веб-приложение служит журналом, отображая все значения температуры и адрес сервера OPC UA, отправляющего значения. В нем отображаются значения аномалий красным цветом. Аномалии всегда имеют значение 120, поскольку так настроена функция в серверах OPC UA.

  1. Разверните приложение для обнаружения аномалий и наблюдайте, как для этого приложения создается pod:

    kubectl apply -f https://raw.githubusercontent.com/project-akri/akri/main/deployment/samples/akri-anomaly-detection-app.yaml
    
    kubectl get pods -o wide --watch
    
  2. После запуска подов получите IP-адрес узла и номер порта приложения:

    Get-AKSEdgeNodeAddr
    
    kubectl get svc
    
  3. Перейдите по адресу http://<NODE IP>:<SERVICE PORT NUM>/. Для загрузки сайта требуется несколько секунд, после чего вы увидите журнал значений температуры, которые обновляются каждые несколько секунд. Обратите внимание, что значения приходят из двух разных URL-адресов обнаружения, в частности, для каждого из двух серверов OPC UA.

    Снимок экрана: приложение обнаружения аномалий в браузере.

Необязательный: сертификаты для сервера OPC UA и брокера

Эта необязательная процедура может быть использована для обкатки Akri с сертификатами, чтобы повысить безопасность. Выполните следующие действия, чтобы развернуть серверы OPC PLC с безопасностью и создать секрет Kubernetes, который можно использовать для проверки подлинности сервера и брокера.

Создание серверов OPC UA с безопасностью

  1. Перейдите к руководству по проекту OPC PLC на Azure IoT Edge и выберите Развернуть в Azure.

  2. Выберите "Изменить шаблон " и перейдите к строке 172. Замените всю строку следующим кодом, чтобы добавить необходимые флаги для развертывания нужных серверов OPC PLC:

    "[concat('./opcplc --pn=50000 --sph --fn=1 --fr=1 --ft=uint --ftl=65 --ftu=85 --ftr=True --aa --sph --ftl=65 --ftu=85 --ftr=True', ' --ph=', variables('aciPlc'), add(copyIndex(), 1), '.', resourceGroup().location, '.azurecontainer.io')]"
    
  3. В разделе resources добавьте следующий код в третий properties (строка 167) на том же уровне, что и image, command, ports и т. д.

    "volumeMounts": [
                      {
                      "name": "filesharevolume",
                      "mountPath": "/app/pki"
                      }
                    ],
    

    Затем добавьте следующий код во второй раздел "Properties" (строка 163) (тот же уровень, что и containers):

    "volumes": [
                   {
                      "name": "filesharevolume",
                      "azureFile": {
                            "shareName": "acishare",
                            "storageAccountName": "<storageAccName>",
                            "storageAccountKey": "<storageAccKey>"
                      }
                   }
               ]
    
  4. Сохраните шаблон и заполните сведения о проекте и экземпляре. Для Number of Simulations укажите 2, чтобы запустить два сервера OPC PLC.

  5. Выберите «Обзор и создание», затем выберите «Создать», чтобы развернуть серверы в Azure.

Теперь вы успешно создали два сервера OPC UA PLC, каждый из которых имеет один быстрый узел PLC, который создает целое число без знака с нижней границой = 65 и верхняя граница = 85 в частоте 1.

Создание сертификатов X.509 версии 3

Создайте три сертификата, совместимые с OPC UA X.509v3 (один для брокера и по одному для каждого сервера), гарантируя, что сертификат содержит необходимые компоненты, такие как URI приложения.

Требования к сертификатам:

  • Все они должны быть подписаны общим центром сертификации (ЦС), а алгоритмы подписывания для всех сертификатов должны быть SHA256.
  • Размер ключа также должен быть больше или равен 2048 битам.
  • DNS сертификатов сервера и сертификат AkriBroker должны содержать полное доменное имя (FQDN) экземпляра контейнера сервера OPC UA, созданного (перейдите к шагу 3 запуска Akri, чтобы узнать, как получить полное доменное имя).
  • Сертификат сервера OPC UA должен называться OpcPlc (в терминах создания сертификатов, CN=OpcPlc), а сертификат брокера Akri должен называться AkriBroker (CN=AkriBroker) (нет требований к имени ЦС).

Существует множество средств для создания соответствующих сертификатов для OPC UA, таких как генератор сертификатов OPC Foundation или OpenSSL. Генератор сертификатов OPC Foundation может быть более удобным вариантом, в то время как OpenSSL предоставляет больше места для настройки.

Если вы решили использовать генератор сертификатов OPC Foundation, выполните следующие действия, чтобы выполнить сборку:

  1. Установите Perl.

  2. Скачайте файл .zip или клонируйте репозиторий генератора сертификатов OPC Foundation (Misc-Tools).

  3. Запустите build_certificate-generator.bat из командной строки разработчика Visual Studio (рекомендуется использовать Visual Studio 2022).

  4. Создание Opc.Ua.CertificateGenerator решения из Visual Studio 2022.

  5. Проверьте, была ли сборка в каталоге build/Debug/Opc.Ua.CertificateGenerator выполнена успешно для Opc.Ua.CertificateGenerator.exe.

  6. Используйте следующие примеры команд для создания сертификатов. Дополнительные варианты см. в разделе Misc-Tools :

    • Самоподписанный центр сертификации
    .\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -sn CN=<CA name e.g. MyCA> -ca true -pw <password>
    
    • Сертификат сервера OPC UA:
    .\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -an OpcPlc -ikf '.\private\MyCA [hash].pfx' -ikp <password>-dn <DNS separated by commas>
    
    • Сертификат брокера Akri:
    .\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -an AkriBroker -ikf '.\private\MyCA [hash].pfx' -ikp <password>-dn <DNS separated by commas>
    
  7. .crl Сгенерируйте файл для УЦ с помощью OpenSSL (только если вы создали УЦ из генератора, в котором отсутствует файл .crl).

Если вы решили использовать OpenSSL, ниже приведен список ссылок:

Создайте секрет Kubernetes opcua-broker-credentials

Сертификат клиента OPC UA передается брокеру мониторинга OPC UA в качестве секрета Kubernetes, подключенного в виде тома.

Создайте секрет Kubernetes, проецируя каждый сертификат/crl/закрытый ключ с ожидаемым именем ключа (client_certificate, client_key, ca_certificate и ca_crl). Укажите пути к файлам, чтобы они указывали на учетные данные, созданные в предыдущем разделе:

kubectl create secret generic opcua-broker-credentials `
--from-file=client_certificate=/path/to/AkriBroker/own/certs/AkriBroker\ \[<hash>\].der `
--from-file=client_key=/path/to/AkriBroker/own/private/AkriBroker\ \[<hash>\].pfx `
--from-file=ca_certificate=/path/to/ca/certs/SomeCA\ \[<hash>\].der `
--from-file=ca_crl=/path/to/ca/crl/SomeCA\ \[<hash>\].crl

Сертификат монтирован на объем credentials в каталоге mountPath /etc/opcua-certs/client-pki, как показано в шаблоне конфигурации OPC UA. Этот путь — это место, где брокеры ожидают найти сертификаты.

Подключение папки сертификатов к ACI

Следуйте этим инструкциям , чтобы создать общую папку Azure.

После создания файлового хранилища Azure и сертификатов, загрузите сертификаты ЦСУ и сервера OPC UA в файловое хранилище, как это описано.

├── own
│   ├── certs
│   │   └── OpcPlc [hash].der
│   └── private
│       └── OpcPlc [hash].pfx
└── trusted
    ├── certs
    │   └── CA.der
    └── crl
        └── CA.crl

Замечание

Так как мы добавили флаг безопасности в шаблоне, это приводит к созданию произвольного сертификата в общей папке. Вы можете удалить все неопознанные сертификаты в общей папке (пути к папкам должны выглядеть точно так же, как на предыдущей схеме).

После выполнения этих действий по обеспечению безопасности щелкните "Перезапустить" на вашем экземпляре контейнера, чтобы обновить его и запустить с монтированными сертификатами.

Запуск Akri и развертывание веб-приложения

Выполните предыдущий раздел, чтобы запустить Akri и обнаружить серверы, но теперь добавьте строку --set opcua.configuration.mountCertificates='true' в конец команды. Убедитесь, что заменили opcua.configuration.discoveryDetails.discoveryUrls на URL-адреса, найденные на портале Azure.

helm install akri akri-helm-charts/akri `
   --set opcua.discovery.enabled=true `
   --set opcua.configuration.enabled=true `
   --set opcua.configuration.name=akri-opcua-monitoring `
   --set opcua.configuration.brokerPod.image.repository="ghcr.io/project-akri/akri/opcua-monitoring-broker" `
   --set opcua.configuration.brokerPod.image.tag="latest-dev" `
   --set opcua.configuration.brokerProperties.IDENTIFIER='FastUInt1' `
   --set opcua.configuration.brokerProperties.NAMESPACE_INDEX='2' `
   --set opcua.configuration.discoveryDetails.discoveryUrls[0]="opc.tcp://<FQDN of 1st container instance>:50000/" `
   --set opcua.configuration.discoveryDetails.discoveryUrls[1]="opc.tcp://<FQDN of 2nd container instance>:50000/" `
   --set opcua.configuration.mountCertificates='true'

Здесь вы можете следовать инструкциям в разделе о развертывании веб-приложения для обнаружения аномалий, чтобы, как клиент брокеров, просмотреть значения OPC PLC на веб-странице.

Очистка

  1. Удалите приложение обнаружения аномалий:

    kubectl delete -f https://raw.githubusercontent.com/project-akri/akri/main/deployment/samples/akri-anomaly-detection-app.yaml
    
  2. Удалите Akri из кластера.

    helm delete akri
    
  3. Удалите развертывание сервера OPC UA, перейдя к экземпляру контейнера, а затем выберите "Удалить " на портале Azure.

Дальнейшие шаги

Обзор AKS Edge Essentials