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


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

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

В этой статье описывается, как развернуть примеры контейнеров серверов 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. Перейдите к файлу сведений примера 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')]"
    

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

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

  4. Выберите Просмотр и создание, а затем Создать , чтобы развернуть серверы в Azure.

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

Запуск Akri

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

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

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

    Снимок экрана: полное доменное имя экземпляра контейнера на портале Azure.

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

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

    Если вы уже добавили диаграмму Akri helm ранее, обновите репозиторий для последней сборки:

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

    В этом сценарии укажите Identifier и NamespaceIndex NodeID, которые должны отслеживать брокеры. В этом случае это созданная ранее переменная температуры, которая имеет значение IdentifierFastUInt1 и 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 обнаруживает два сервера и создает экземпляр для каждого сервера. Наблюдайте за запуском двух модулей pod брокера, по одному для каждого сервера:

    kubectl get pods -o wide --watch
    

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

    kubectl logs <name of OPC UA monitoring pod>
    

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

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

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

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

  1. Разверните приложение обнаружения аномалий и watch для этого приложения.

    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. После запуска модулей pod получите 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

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

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

  • Все они должны быть подписаны общим центром сертификации (ЦС), а алгоритмы подписывания для всех сертификатов должны иметь значение SHA256.
  • Размер ключа также должен быть больше или равен битам 2048 .
  • DNS сертификатов сервера и AkriBroker должны содержать полное доменное имя созданного экземпляра контейнера сервера 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. Проверьте, успешно ли Opc.Ua.CertificateGenerator.exe выполнена сборка в каталоге build/Debug/Opc.Ua.CertificateGenerator .

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

    • Self-Signed ЦС:
    .\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 helm. По этому пути брокеры должны найти сертификаты.

Подключение папки сертификатов к 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