Ermitteln von OPC UA-Servern mit Akri
Akri ist eine Kubernetes-Ressourcenschnittstelle, mit der Sie heterogene Blattgeräte (z. B. IP-Kameras und USB-Geräte) einfach als Ressourcen in einem Kubernetes-Cluster verfügbar machen können. Akri erkennt kontinuierlich Knoten, die Zugriff auf diese Geräte haben, um Workloads basierend darauf zu planen. Akri ist ein CNCF-Sandboxprojekt, das für den Rand erstellt wurde und das dynamische Aussehen und Das Verschwinden von Blattgeräten behandelt. Derzeit werden OPC UA-, ONVIF- und udev-Protokolle unterstützt, Sie können aber auch benutzerdefinierte Protokollhandler implementieren, die von der Vorlage bereitgestellt werden. Weitere Informationen zu Akri finden Sie hier.
In diesem Artikel wird beschrieben, wie Sie Beispielcontainer für OPC PLC-Server in Azure bereitstellen und ermitteln können, indem Sie Akri in Ihrem AKS Edge Essentials-Cluster bereitstellen. OPC UA ist ein Kommunikationsprotokoll für die industrielle Automatisierung. Es handelt sich um eine Client/Server-Technologie, die mit einem Sicherheits- und Kommunikationsframework verfügt. Wenn Sie zu irgendeinem Zeitpunkt in der Demo tiefer in OPC UA eintauchen oder einen Begriff klären möchten, lesen Sie die OPC UA-Onlinespezifikationen.
Diese Demo hilft Ihnen, mit Akri zu beginnen, OPC UA-Server zu ermitteln und sie über einen Broker zu verwenden, der einen OPC UA-Client enthält. Insbesondere wurde für dieses Szenario eine Akri-Konfiguration namens OPC UA Monitoring erstellt. Diese Konfiguration zeigt, wie Sie Akri verwenden können, um Anomaliewerte einer bestimmten OPC UA-Variablen zu erkennen. Dazu abonnieren die OPC UA-Clients in den Brokern diese Variable und nutzen ihren Wert gegenüber gRPC, um eine Webanwendung zur Anomalieerkennung zu nutzen. Sie können diese Konfiguration verwenden, um ein Barometer, einen CO-Detektor usw. zu überwachen. In diesem Beispiel stellt die OPC UA-Variable jedoch die SPS-Werte (Programmable Logic Controller) für die Temperatur eines Thermostats dar. Jeder Wert außerhalb des Bereichs von 70-80 Grad ist eine Anomalie. Wenn Sie Zertifikate für die Sicherheit verwenden möchten, fahren Sie außerdem mit dem Abschnitt am Ende fort.
Voraussetzungen
- Der AKS Edge Essentials-Cluster wird ausgeführt.
- Azure-Abonnement und eine Ressourcengruppe, für die OPC PLC-Server bereitgestellt werden sollen.
- Akri funktioniert nur unter Linux: Verwenden Sie für diese Übung Linux-Knoten.
Erstellen von OPC UA-Servern
Erstellen Sie nun einige OPC UA PLC-Server, die Sie ermitteln möchten. Anstatt von Grund auf neu zu beginnen, stellen Sie OPC PLC-Servercontainer bereit. Weitere Informationen zu den Containern und ihren Parametern finden Sie hier. In dieser Demo wird die bereitgestellte Vorlage verwendet, um OPC PLC-Servercontainerinstanzen in Azure bereitzustellen.
Navigieren Sie zur Infodatei des Beispiels azure IoT Edge OPC PLC, und wählen Sie In Azure bereitstellen aus.
Wählen Sie Vorlage bearbeiten aus, und navigieren Sie zu Zeile 172. Ersetzen Sie die gesamte Zeile durch den folgenden Code, um die erforderlichen Flags für die Bereitstellung der gewünschten OPC PLC-Server hinzuzufügen:
"[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')]"
Weitere Informationen zu den Parametern finden Sie in der Infodatei.
Speichern Sie die Vorlage, und geben Sie das Projekt und instance Details ein. Geben
Number of Simulations
Sie2
für an, um zwei OPC PLC-Server auszuführen.Wählen Sie Überprüfen und Erstellen und dann Erstellen aus , um Ihre Server in Azure bereitzustellen.
Sie haben nun erfolgreich zwei OPC UA PLC-Server mit jeweils einem schnellen PLC-Knoten erstellt, der eine ganze Zahl ohne Vorzeichen mit unterer Grenze = 65 und Obergrenze = 85 mit einer Rate von 1 generiert.
Ausführen von Akri
Stellen Sie sicher, dass Ihre OPC UA-Server ausgeführt werden, indem Sie überprüfen, ob die Containerinstanzen auf Ihrem Azure-Portal gestartet wurden.
Damit Akri die Server ordnungsgemäß ermitteln kann, geben Sie bei der Installation von Akri die richtigen Ermittlungs-URLs an.
Ermittlungs-URLs werden als
opc.tcp://<FQDN>:50000/
angezeigt. Um die FQDNs Ihrer OPC PLC-Server abzurufen, navigieren Sie zu Ihren Bereitstellungen in Azure, und Sie sehen den FQDN. Kopieren Sie den FQDN, und fügen Sie ihn in Ihre Ermittlungs-URLs für jeden Server ein.Fügen Sie die Akri-Helmdiagramme hinzu, falls Noch nicht geschehen:
helm repo add akri-helm-charts https://project-akri.github.io/akri/
Wenn Sie bereits ein Akri Helm-Diagramm hinzugefügt haben, aktualisieren Sie Ihr Repository für den neuesten Build:
helm repo update
Installieren Sie Akri mithilfe von Helm. Wenn Sie Akri installieren, geben Sie an, dass Sie die OPC UA-Ermittlungshandler bereitstellen möchten, indem Sie den helm-Wert
opcua.discovery.enabled=true
festlegen.Geben Sie in diesem Szenario das
Identifier
undNamespaceIndex
der NodeID an, die von den Brokern überwacht werden soll. In diesem Fall ist dies die zuvor erstellte Temperaturvariable, die einenIdentifier
vonFastUInt1
undNamespaceIndex
enthält2
.Ersetzen Sie unbedingt die
opcua.configuration.discoveryDetails.discoveryUrls
durch die URLs, die Sie im vorherigen Schritt erhalten haben: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/" `
Hinweis
FastUInt1
ist der Bezeichner des sich schnell ändernden Knotens , der vom OPC PLC-Server bereitgestellt wird.Weitere Informationen zu den OPC UA-Konfigurationseinstellungen finden Sie hier.
Nach der Installation von Akri ermittelt der Akri-Agent die beiden Server und erstellt eine instance für jeden Server. Beobachten Sie, wie zwei Brokerpods gestartet werden, einen für jeden Server:
kubectl get pods -o wide --watch
Sie können auch sicherstellen, dass der Überwachungspod von Akri erfolgreich eine Verbindung mit dem OPC UA-Server hergestellt hat:
kubectl logs <name of OPC UA monitoring pod>
So überprüfen Sie weitere Elemente von Akri:
- Führen Sie aus
kubectl get crd
, und die CRDs sollten aufgeführt werden. - Führen Sie aus
kubectl get akric
, und Sie sollten sehenakri-opcua-monitoring
. - Wenn die OPC PLC-Server ermittelt und Pods ausgegliedert wurden, können Sie die Instanzen anzeigen, indem Sie ausführen
kubectl get akrii
, und Sie können weitere Überprüfungen durchführen, indem Sie ausführenkubectl get akrii akri-opcua-monitoring-<ID> -o yaml
.
- Führen Sie aus
Bereitstellen einer Webanwendung zur Erkennung von Anomalien als Endbenutzer der Broker
Für diese End-to-End-Demo wurde eine Beispielwebanwendung zur Erkennung von Anomalien erstellt. Es verfügt über einen gRPC-Stub, der die gRPC-Dienste der Broker aufruft und den neuesten Temperaturwert erhält. Anschließend wird mithilfe der Strategie Lokaler Ausreißerfaktor ermittelt, ob es sich bei diesem Wert um einen Ausreißer im Dataset handelt. Das Dataset ist einfach eine CSV-Datei, in der die Zahlen zwischen 70 und 80 mehrmals wiederholt werden. Daher wird jeder Wert, der erheblich außerhalb dieses Bereichs liegt, als Ausreißer angesehen. Die Webanwendung dient als Protokoll, in dem alle Temperaturwerte und die Adresse des OPC UA-Servers angezeigt werden, der die Werte gesendet hat. Die Anomaliewerte werden rot angezeigt. Die Anomalien haben immer den Wert 120, da die DoSimulation
Funktion auf den OPC UA-Servern eingerichtet ist.
Stellen Sie die Anomalieerkennungs-App bereit, und watch sie einen Pod für die App starten:
kubectl apply -f https://raw.githubusercontent.com/project-akri/akri/main/deployment/samples/akri-anomaly-detection-app.yaml
kubectl get pods -o wide --watch
Nachdem die Pods ausgeführt werden, rufen Sie Ihre Knoten-IP-Adresse und die Dienstportnummer der App ab:
Get-AKSEdgeNodeAddr
kubectl get svc
Navigieren Sie zu
http://<NODE IP>:<SERVICE PORT NUM>/
. Es dauert einige Sekunden, bis die Website geladen ist. Dann sollte ein Protokoll der Temperaturwerte angezeigt werden, das alle paar Sekunden aktualisiert wird. Beachten Sie, dass die Werte von zwei verschiedenen Ermittlungs-URLs stammen, insbesondere von den Werten für jeden der beiden OPC UA-Server.
Optional: Zertifikate für den OPC UA-Server und -Broker
Dies ist ein optionales Verfahren, das Sie verwenden können, um Akri mit Zertifikaten für zusätzliche Sicherheit auszuprobieren. Führen Sie diese Schritte aus, um OPC PLC-Server mit Sicherheit bereitzustellen und ein Kubernetes-Geheimnis zu erstellen, das zum Authentifizieren des Servers und Brokers verwendet werden kann.
Erstellen von OPC UA-Servern mit Sicherheit
Navigieren Sie zur Infodatei des Beispiels azure IoT Edge OPC PLC, und wählen Sie In Azure bereitstellen aus.
Wählen Sie Vorlage bearbeiten aus, und navigieren Sie zu Zeile 172. Ersetzen Sie die gesamte Zeile durch den folgenden Code, um die erforderlichen Flags für die Bereitstellung der gewünschten OPC PLC-Server hinzuzufügen:
"[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')]"
Fügen Sie unter dem
resources
Abschnitt den folgenden Code im drittenproperties
Abschnitt (Zeile 167) hinzu (gleiche Ebene wieimage
,command
,ports
usw.):"volumeMounts": [ { "name": "filesharevolume", "mountPath": "/app/pki" } ],
Fügen Sie dann den folgenden Code im zweiten Abschnitt "eigenschaften" (Zeile 163) hinzu (gleiche Ebene wie
containers
):"volumes": [ { "name": "filesharevolume", "azureFile": { "shareName": "acishare", "storageAccountName": "<storageAccName>", "storageAccountKey": "<storageAccKey>" } } ]
Speichern Sie die Vorlage, und geben Sie das Projekt und instance Details ein. Geben
Number of Simulations
Sie2
für an, um zwei OPC PLC-Server auszuführen.Wählen Sie Überprüfen und Erstellen und dann Erstellen aus, um Ihre Server in Azure bereitzustellen.
Sie haben nun erfolgreich zwei OPC UA PLC-Server mit jeweils einem schnellen PLC-Knoten erstellt, der eine ganze Zahl ohne Vorzeichen mit unterer Grenze = 65 und Obergrenze = 85 mit einer Rate von 1 generiert.
Erstellen von X.509 v3-Zertifikaten
Erstellen Sie drei OPC UA-kompatible X.509v3-Zertifikate (eines für den Broker und eines für jeden Server), und stellen Sie sicher, dass das Zertifikat die erforderlichen Komponenten enthält, z. B. einen Anwendungs-URI.
Anforderungen für Zertifikate:
- Sie sollten alle von einer gemeinsamen Zertifizierungsstelle signiert werden, und die Signaturalgorithmen für alle Zertifikate sollten sein
SHA256
. - Die Schlüsselgröße muss auch größer oder gleich
2048
Bits sein. - Das DNS der Serverzertifikate und des AkriBroker-Zertifikats sollte den FQDN des OPC UA-Servercontainers enthalten, der erstellt instance (navigieren Sie zu Schritt 3 der Ausführung von Akri, um zu erfahren, wie Sie den FQDN abrufen).
- Das OPC UA-Serverzertifikat sollte (in zertifikatgenerierenden Begriffen
CN=OpcPlc
) undOpcPlc
das Akri-Brokerzertifikat den Namen (CN=AkriBroker
) erhaltenAkriBroker
(es gibt keine Anforderungen für den Zertifizierungsstellennamen).
Es gibt viele Tools zum Generieren ordnungsgemäßer Zertifikate für OPC UA, z. B. den Zertifikatgenerator der OPC Foundation oder OpenSSL. Der Zertifikatgenerator der OPC Foundation kann eine bequemere Option sein, während OpenSSL mehr Spielraum für die Anpassung bietet.
Wenn Sie den Zertifikatgenerator von OPC Foundation verwenden möchten, führen Sie die folgenden Schritte aus, um zu erstellen:
Installieren Sie Perl.
Laden Sie die .zip-Datei herunter, oder klonen Sie das Repository des Zertifikatgenerators (Misc-Tools) der OPC Foundation.
Führen Sie
build_certificate-generator.bat
an der Visual Studio-Entwicklereingabeaufforderung aus (Visual Studio 2022 wird empfohlen).Erstellen einer
Opc.Ua.CertificateGenerator
Projektmappe aus Visual Studio 2022.Überprüfen Sie, ob
Opc.Ua.CertificateGenerator.exe
dasbuild/Debug/Opc.Ua.CertificateGenerator
Verzeichnis erfolgreich erstellt wurde.Verwenden Sie die folgenden Beispielbefehle, um Zertifikate zu erstellen. Weitere Optionen finden Sie unter Misc-Tools :
- Self-Signed Zertifizierungsstelle:
.\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -sn CN=<CA name e.g. MyCA> -ca true -pw <password>
- OPC UA-Serverzertifikat:
.\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -an OpcPlc -ikf '.\private\MyCA [hash].pfx' -ikp <password>-dn <DNS separated by commas>
- Akri-Brokerzertifikat:
.\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -an AkriBroker -ikf '.\private\MyCA [hash].pfx' -ikp <password>-dn <DNS separated by commas>
Erstellen Sie eine Datei für die
.crl
Zertifizierungsstelle mit OpenSSL (nur, wenn Sie die Zertifizierungsstelle über den Generator erstellt haben, was die.crl
Datei fehlen würde).
Wenn Sie OpenSSL verwenden möchten, finden Sie hier eine Liste von Verweisen:
Erstellen eines Kubernetes-Geheimnisses opcua-broker-credentials
Das OPC UA-Clientzertifikat wird als Kubernetes-Geheimnis, das als Volume eingebunden ist, an den OPC UA-Überwachungsbroker übergeben.
Erstellen Sie ein Kubernetes-Geheimnis, und projizieren Sie jedes Zertifikat/crl/private Schlüssel mit dem erwarteten Schlüsselnamen (client_certificate
, , client_key
ca_certificate
und ca_crl
). Geben Sie die Dateipfade an, damit sie auf die im vorherigen Abschnitt erstellten Anmeldeinformationen verweisen:
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
Das Zertifikat wird in das Volume credentials
unter mountPath
/etc/opcua-certs/client-pki eingebunden, wie in der OPC UA-Konfigurations-Helmvorlage gezeigt. In diesem Pfad erwarten die Broker, die Zertifikate zu finden.
Einbinden des Zertifikatordners in die ACI
Befolgen Sie diese Anweisungen , um eine Azure-Dateifreigabe zu erstellen.
Laden Sie nach dem Erstellen der Azure-Dateifreigabe und -Zertifikate die Zertifizierungsstellen- und OPC UA-Serverzertifikate wie beschrieben in die Dateifreigabe hoch.
├── own
│ ├── certs
│ │ └── OpcPlc [hash].der
│ └── private
│ └── OpcPlc [hash].pfx
└── trusted
├── certs
│ └── CA.der
└── crl
└── CA.crl
Hinweis
Da wir der Vorlage ein Flag für die Sicherheit hinzugefügt haben, wird ein beliebiges Zertifikat in der Dateifreigabe generiert. Sie können alle nicht identifizierten Zertifikate in der Dateifreigabe löschen (die Ordnerpfade sollten genau wie im vorherigen Diagramm aussehen).
Nachdem Sie diese Schritte zur Sicherheit ausgeführt haben, klicken Sie auf Neu starten in Ihrem Container instance, um ihn zu aktualisieren und mit den eingebundenen Zertifikaten auszuführen.
Ausführen von Akri und Bereitstellen einer Web-App
Folgen Sie dem vorherigen Abschnitt, um Akri auszuführen und Ihre Server zu ermitteln. Fügen Sie nun eine Zeile --set opcua.configuration.mountCertificates='true'
am Ende des Befehls hinzu. Ersetzen Sie durch opcua.configuration.discoveryDetails.discoveryUrls
die URLs aus dem Azure-Portal:
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'
Hier können Sie dem Abschnitt über die Bereitstellung einer Webanwendung zur Anomalieerkennung als Endbenutzer der Broker folgen, um Ihre OPC PLC-Werte auf Ihrer Webseite anzuzeigen.
Bereinigung
Löschen Sie die Anwendung zur Erkennung von Anomalien:
kubectl delete -f https://raw.githubusercontent.com/project-akri/akri/main/deployment/samples/akri-anomaly-detection-app.yaml
Deinstallieren Sie Akri aus Ihrem Cluster.
helm delete akri
Löschen Sie die OPC UA-Serverbereitstellung, indem Sie zu Ihrem Container instance navigieren, und wählen Sie dann löschen im Azure-Portal aus.