Zjišťování serverů OPC UA pomocí Akri
Akri je rozhraní prostředků Kubernetes, které umožňuje snadno zveřejnit heterogenní zařízení typu list (jako jsou IP kamery a zařízení USB) jako prostředky v clusteru Kubernetes. Akri průběžně detekuje uzly, které mají k těmto zařízením přístup, a na základě nich plánuje úlohy. Akri je CNCF sandboxový projekt vytvořený pro hranu, který zpracovává dynamický vzhled a zmizení listových zařízení. V současné době podporuje protokoly OPC UA, ONVIF a udev, ale můžete také implementovat vlastní obslužné rutiny protokolu poskytované šablonou. Další informace o Akri najdete tady.
Tento článek popisuje, jak nasadit ukázkové kontejnery serveru OPC PLC v Azure a zjistit je nasazením Akri do clusteru AKS Edge Essentials. OPC UA je komunikační protokol pro průmyslovou automatizaci. Jedná se o technologii klient/server, která je součástí architektury zabezpečení a komunikace. Pokud se chcete kdykoliv v ukázce podrobněji podívat na OPC UA nebo vysvětlit termín, podívejte se na online specifikace OPC UA.
Tato ukázka vám pomůže začít používat Akri ke zjišťování serverů OPC UA a jejich použití prostřednictvím zprostředkovatele, který obsahuje klienta OPC UA. Konkrétně byla pro tento scénář vytvořena konfigurace Akri s názvem Monitorování OPC UA . Tato konfigurace ukazuje, jak můžete pomocí Akri detekovat hodnoty anomálií konkrétní proměnné OPC UA. Za tímto účelem se klienti OPC UA v zprostředkovatelích přihlásí k odběru této proměnné a předá její hodnotu přes gRPC pro webovou aplikaci pro detekci anomálií, kterou má využívat. Tuto konfiguraci můžete použít k monitorování barometru, detektoru CO a dalších. V tomto příkladu však proměnná OPC UA představuje hodnoty PLC (programovatelný logický kontroler) pro teplotu termostatu. Jakákoli hodnota mimo rozsah 70 až 80 stupňů je anomálií. Pokud navíc chcete používat certifikáty pro zabezpečení, přejděte na část na konci.
Požadavky
- Cluster AKS Edge Essentials je spuštěný a spuštěný.
- Předplatné Azure a skupina prostředků, do které se nasazují servery OPC PLC.
- Akri funguje jenom v Linuxu: v tomto cvičení použijte uzly Linuxu.
Vytvoření serverů OPC UA
Teď vytvořte několik serverů PLC OPC UA, které chcete zjistit. Místo toho, abyste začali úplně od začátku, nasaďte kontejnery serverů OPC PLC. Další informace o kontejnerech a jejich parametrech najdete tady. Tato ukázka používá šablonu k nasazení instancí kontejneru serveru OPC PLC do Azure.
Přejděte do souboru readme ukázky Azure IoT Edge OPC PLC a vyberte Nasadit do Azure.
Vyberte Upravit šablonu a přejděte na řádek 172. Nahraďte celý řádek následujícím kódem, který přidá potřebné příznaky pro nasazení požadovaných serverů 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')]"
Uložte šablonu a vyplňte podrobnosti o projektu a instanci. Pro
Number of Simulations
zadejte2
, aby se spustily dva servery OPC PLC.Vyberte Zkontrolovat a vytvořit a pak Vytvořit a nasaďte servery do Azure.
Nyní jste úspěšně vytvořili dva servery OPC UA PLC, z nichž každý má jeden rychlý uzel PLC, který generuje celé číslo bez znaménka s dolní mezí = 65 a horní mez = 85 rychlostí 1.
Spuštění Akri
Ujistěte se, že jsou servery OPC UA spuštěné, a zkontrolujte, jestli se na Azure Portal spustily instance kontejneru.
Pokud chcete, aby Akri správně zjistil servery, zadejte při instalaci Akri správné adresy URL zjišťování.
Adresy URL zjišťování se zobrazují jako
opc.tcp://<FQDN>:50000/
. Pokud chcete získat plně kvalifikované názvy domén serverů OPC PLC, přejděte k nasazením v Azure a uvidíte plně kvalifikovaný název domény. Zkopírujte plně kvalifikovaný název domény a vložte ho do adres URL zjišťování pro každý server.Pokud jste to ještě neudělali, přidejte grafy Akri Helm:
helm repo add akri-helm-charts https://project-akri.github.io/akri/
Pokud jste už dříve přidali chart helmu Akri, aktualizujte úložiště pro nejnovější build:
helm repo update
Nainstalujte Akri pomocí Helmu. Při instalaci Akri určete, že chcete nasadit obslužné rutiny zjišťování OPC UA nastavením hodnoty
opcua.discovery.enabled=true
helm .V tomto scénáři zadejte
Identifier
aNamespaceIndex
Id uzlu, které mají zprostředkovatelé monitorovat. V tomto případě se jedná o proměnnou teploty vytvořenou dříve, která má hodnotuIdentifier
aFastUInt1
NamespaceIndex
2
.Nezapomeňte nahradit
opcua.configuration.discoveryDetails.discoveryUrls
adresami URL, které jste získali v předchozím kroku: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/" `
Poznámka
FastUInt1
je identifikátor rychle se měnícího uzlu , který poskytuje server OPC PLC.Další informace o nastavení konfigurace OPC UA najdete tady.
Jakmile je Akri nainstalován, agent Akri zjistí oba servery a vytvoří instanci pro každý server. Sledujte spuštění dvou zprostředkovatelů podů, jeden pro každý server:
kubectl get pods -o wide --watch
Můžete také zajistit úspěšné připojení monitorovacího podu Akri k serveru OPC UA:
kubectl logs <name of OPC UA monitoring pod>
Chcete-li zkontrolovat více prvků Akri:
- Spusťte
kubectl get crd
příkaz a měli byste vidět uvedené identifikátory CRD. - Spusťte
kubectl get akric
příkaz a měli byste vidětakri-opcua-monitoring
. - Pokud byly zjištěny servery OPC PLC a pody se vytvořily, můžete zobrazit instance spuštěním příkazu
kubectl get akrii
a další kontrolu můžete provést spuštěnímkubectl get akrii akri-opcua-monitoring-<ID> -o yaml
příkazu .
- Spusťte
Nasazení webové aplikace pro detekci anomálií jako koncového uživatele zprostředkovatelů
Pro tuto kompletní ukázku byla vytvořena ukázková webová aplikace pro detekci anomálií. Má zástupný argument gRPC, který volá služby gRPC zprostředkovatelů a získává nejnovější hodnotu teploty. Pak pomocí strategie Local Outlier Factor určí, zda je tato hodnota odliší datovou sadu. Datová sada je jednoduše soubor CSV s čísly mezi 70–80 opakovanými několikrát; proto bude jakákoli hodnota výrazně mimo tento rozsah považována za odlehlejší hodnotu. Webová aplikace slouží jako protokol zobrazující všechny hodnoty teploty a adresu serveru OPC UA, který hodnoty odeslal. Zobrazuje hodnoty anomálií červeně. Anomálie mají vždy hodnotu 120 kvůli DoSimulation
nastavení funkce na serverech OPC UA.
Nasaďte aplikaci pro detekci anomálií a watch spuštění podu pro aplikaci:
kubectl apply -f https://raw.githubusercontent.com/project-akri/akri/main/deployment/samples/akri-anomaly-detection-app.yaml
kubectl get pods -o wide --watch
Po spuštění podů získejte IP adresu uzlu a číslo portu služby aplikace:
Get-AKSEdgeNodeAddr
kubectl get svc
Přejděte na adresu
http://<NODE IP>:<SERVICE PORT NUM>/
. Načtení webu trvá několik sekund. Pak byste měli vidět protokol hodnot teploty, který se aktualizuje každých několik sekund. Všimněte si, že hodnoty pocházejí ze dvou různých adres URL zjišťování, konkrétně ze dvou serverů OPC UA.
Volitelné: certifikáty pro server a zprostředkovatele OPC UA
Tento volitelný postup můžete použít k vyzkoušení Akri s certifikáty pro zvýšení zabezpečení. Pomocí těchto kroků nasaďte servery OPC PLC se zabezpečením a vytvořte tajný klíč Kubernetes, který se dá použít k ověření serveru a zprostředkovatele.
Vytvoření serverů OPC UA se zabezpečením
Přejděte do souboru readme ukázky Azure IoT Edge OPC PLC a vyberte Nasadit do Azure.
Vyberte Upravit šablonu a přejděte na řádek 172. Nahraďte celý řádek následujícím kódem, který přidá potřebné příznaky pro nasazení požadovaných serverů 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')]"
Do oddílu
resources
přidejte následující kód do třetíhoproperties
oddílu (řádek 167) (stejná úroveň jakoimage
,command
,ports
atd.):"volumeMounts": [ { "name": "filesharevolume", "mountPath": "/app/pki" } ],
Pak přidejte následující kód do druhé části "properties" (řádek 163) (stejná úroveň jako
containers
):"volumes": [ { "name": "filesharevolume", "azureFile": { "shareName": "acishare", "storageAccountName": "<storageAccName>", "storageAccountKey": "<storageAccKey>" } } ]
Uložte šablonu a vyplňte podrobnosti o projektu a instanci. Pro
Number of Simulations
zadejte2
, aby se spustily dva servery OPC PLC.Vyberte Zkontrolovat a vytvořit a pak vyberte Vytvořit a nasaďte servery v Azure.
Nyní jste úspěšně vytvořili dva servery OPC UA PLC, z nichž každý má jeden rychlý uzel PLC, který generuje celé číslo bez znaménka s dolní mezí = 65 a horní mez = 85 rychlostí 1.
Vytvoření certifikátů X.509 v3
Vytvořte tři certifikáty X.509v3 kompatibilní s OPC UA (jeden pro zprostředkovatele a jeden pro každý server) a ujistěte se, že certifikát obsahuje potřebné součásti, jako je například identifikátor URI aplikace.
Požadavky na certifikáty:
- Všechny by měly být podepsané společnou certifikační autoritou (CA) a podpisové algoritmy pro všechny certifikáty by měly být
SHA256
. - Velikost klíče musí být také větší než nebo rovna
2048
bitům. - DNS certifikátů serveru a certifikát AkriBroker by měl obsahovat plně kvalifikovaný název domény vytvořené instance kontejneru serveru OPC UA (postup získání plně kvalifikovaného názvu domény najdete v kroku 3 spuštění Akri ).
- Certifikát serveru OPC UA by měl mít název
OpcPlc
(v termínechCN=OpcPlc
generovaných certifikáty) a certifikát zprostředkovatele Akri by měl mít názevAkriBroker
(CN=AkriBroker
) (pro název certifikační autority nejsou žádné požadavky).
Existuje mnoho nástrojů pro generování správných certifikátů pro OPC UA, jako je generátor certifikátů OPC Foundation nebo OpenSSL. Generátor certifikátů OPC Foundation může být pohodlnější volbou, zatímco OpenSSL poskytuje více místa pro přizpůsobení.
Pokud se rozhodnete použít generátor certifikátů OPC Foundation, postupujte podle těchto kroků k sestavení:
Nainstalujte Perl.
Stáhněte si soubor .zip nebo naklonujte úložiště Generátor certifikátů OPC Foundation (Různé nástroje).
Spusťte
build_certificate-generator.bat
příkaz z příkazového řádku pro vývojáře sady Visual Studio (doporučuje se Visual Studio 2022).Sestavení
Opc.Ua.CertificateGenerator
řešení ze sady Visual Studio 2022Zkontrolujte, jestli
Opc.Ua.CertificateGenerator.exe
byl úspěšně sestaven v adresářibuild/Debug/Opc.Ua.CertificateGenerator
.K vytvoření certifikátů použijte následující ukázkové příkazy. Další možnosti najdete v tématu Různé nástroje :
- Self-Signed certifikační autority:
.\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -sn CN=<CA name e.g. MyCA> -ca true -pw <password>
- Certifikát serveru OPC UA:
.\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -an OpcPlc -ikf '.\private\MyCA [hash].pfx' -ikp <password>-dn <DNS separated by commas>
- Certifikát zprostředkovatele Akri:
.\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -an AkriBroker -ikf '.\private\MyCA [hash].pfx' -ikp <password>-dn <DNS separated by commas>
Vytvořte soubor pro certifikační autoritu
.crl
pomocí OpenSSL (jenom v případě, že jste vytvořili ca z generátoru.crl
, kterému chybí soubor).
Pokud se rozhodnete použít OpenSSL, tady je seznam odkazů:
Vytvoření tajného kódu Kubernetes opcua-broker-credentials
Klientský certifikát OPC UA se předává zprostředkovateli monitorování OPC UA jako tajný klíč Kubernetes připojený jako svazek.
Vytvořte tajný klíč Kubernetes a promítnutí každého certifikátu, seznamu crl nebo privátního klíče s očekávaným názvem klíče (client_certificate
, client_key
, ca_certificate
a ca_crl
). Zadejte cesty k souborům tak, aby ukazovaly na přihlašovací údaje vytvořené v předchozí části:
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
Certifikát je připojený ke svazku credentials
na mountPath
adrese /etc/opcua-certs/client-pki, jak je znázorněno v šabloně Helm konfigurace OPC UA. V této cestě zprostředkovatelé očekávají, že najdou certifikáty.
Připojení složky certifikátů k ACI
Pokud chcete vytvořit sdílenou složku Azure, postupujte podle těchto pokynů.
Po vytvoření sdílené složky Azure a certifikátů nahrajte certifikáty certifikační autority a serveru OPC UA do sdílené složky podle popisu.
├── own
│ ├── certs
│ │ └── OpcPlc [hash].der
│ └── private
│ └── OpcPlc [hash].pfx
└── trusted
├── certs
│ └── CA.der
└── crl
└── CA.crl
Poznámka
Protože jsme do šablony přidali příznak zabezpečení, způsobí to, že se ve sdílené složce vygeneruje libovolný certifikát. Ve sdílené složce můžete odstranit všechny neidentifikované certifikáty (cesty ke složkám by měly vypadat úplně stejně jako v předchozím diagramu).
Po provedení těchto kroků pro zabezpečení klikněte na Restartovat v instanci kontejneru, aktualizujte ji a spusťte s připojenými certifikáty.
Spuštění Akri a nasazení webové aplikace
Postupujte podle předchozí části a spusťte Akri a zjistěte servery, ale teď přidejte řádek --set opcua.configuration.mountCertificates='true'
na konec příkazu. Nezapomeňte nahradit opcua.configuration.discoveryDetails.discoveryUrls
adresami URL, které najdete v 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'
Tady můžete postupovat podle části věnované nasazení webové aplikace pro detekci anomálií jako koncového příjemce zprostředkovatelů a zobrazit hodnoty OPC PLC na vaší webové stránce.
Vyčištění
Odstraňte aplikaci pro detekci anomálií:
kubectl delete -f https://raw.githubusercontent.com/project-akri/akri/main/deployment/samples/akri-anomaly-detection-app.yaml
Odinstalujte Akri z clusteru.
helm delete akri
Odstraňte nasazení serveru OPC UA tak, že přejdete do instance kontejneru a pak v Azure Portal vyberete Odstranit.