Sdílet prostřednictvím


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.

Diagram znázorňující tok ukázky Akri OPC UA

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.

  1. Přejděte do souboru readme ukázky Azure IoT Edge OPC PLC a vyberte Nasadit do Azure.

  2. 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')]"
    

    Další informace o parametrech najdete v souboru readme.

  3. Uložte šablonu a vyplňte podrobnosti o projektu a instanci. Pro Number of Simulationszadejte 2 , aby se spustily dva servery OPC PLC.

  4. 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

  1. Ujistěte se, že jsou servery OPC UA spuštěné, a zkontrolujte, jestli se na Azure Portal spustily instance kontejneru.

  2. 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.

    Snímek obrazovky s plně kvalifikovaným názvem domény instance kontejneru na webu Azure Portal

  3. 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
    
  4. 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=truehelm .

    V tomto scénáři zadejte Identifier a NamespaceIndex Id uzlu, které mají zprostředkovatelé monitorovat. V tomto případě se jedná o proměnnou teploty vytvořenou dříve, která má hodnotu Identifier a FastUInt1NamespaceIndex2.

    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.

  5. 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 crdpříkaz a měli byste vidět uvedené identifikátory CRD.
    • Spusťte kubectl get akricpříkaz a měli byste vidět akri-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 akriia další kontrolu můžete provést spuštěním kubectl get akrii akri-opcua-monitoring-<ID> -o yamlpříkazu .

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.

  1. 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
    
  2. Po spuštění podů získejte IP adresu uzlu a číslo portu služby aplikace:

    Get-AKSEdgeNodeAddr
    
    kubectl get svc
    
  3. 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.

    Snímek obrazovky znázorňující aplikaci pro detekci anomálií v prohlížeči

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

  1. Přejděte do souboru readme ukázky Azure IoT Edge OPC PLC a vyberte Nasadit do Azure.

  2. 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')]"
    
  3. Do oddílu resources přidejte následující kód do třetího properties oddílu (řádek 167) (stejná úroveň jako image, command, portsatd.):

    "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>"
                      }
                   }
               ]
    
  4. Uložte šablonu a vyplňte podrobnosti o projektu a instanci. Pro Number of Simulationszadejte 2 , aby se spustily dva servery OPC PLC.

  5. 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ínech CN=OpcPlcgenerovaných certifikáty) a certifikát zprostředkovatele Akri by měl mít název AkriBroker (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í:

  1. Nainstalujte Perl.

  2. Stáhněte si soubor .zip nebo naklonujte úložiště Generátor certifikátů OPC Foundation (Různé nástroje).

  3. 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).

  4. Sestavení Opc.Ua.CertificateGenerator řešení ze sady Visual Studio 2022

  5. Zkontrolujte, jestli Opc.Ua.CertificateGenerator.exe byl úspěšně sestaven v adresáři build/Debug/Opc.Ua.CertificateGenerator .

  6. 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>
    
  7. 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_certificatea 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í

  1. 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
    
  2. Odinstalujte Akri z clusteru.

    helm delete akri
    
  3. Odstraňte nasazení serveru OPC UA tak, že přejdete do instance kontejneru a pak v Azure Portal vyberete Odstranit.

Další kroky

Přehled AKS Edge Essentials