Udostępnij za pośrednictwem


Odnajdywanie serwerów OPC UA za pomocą narzędzia Akri

Akri to interfejs zasobów platformy Kubernetes, który umożliwia łatwe uwidocznienie heterogenicznych urządzeń liściowych (takich jak kamery IP i urządzenia USB) jako zasoby w klastrze Kubernetes. Usługa Akri stale wykrywa węzły, które mają dostęp do tych urządzeń, aby zaplanować obciążenia na podstawie nich. Akri to projekt piaskownicy CNCF wykonany dla krawędzi, obsługujący dynamiczny wygląd i zaginięcie urządzeń liścia. Obecnie obsługuje protokoły OPC UA, ONVIF i udev, ale można również zaimplementować niestandardowe programy obsługi protokołów udostępniane przez szablon. Przeczytaj więcej na temat Akri tutaj.

W tym artykule opisano sposób wdrażania przykładowych kontenerów serwera OPC PLC na platformie Azure i odnajdywania ich przez wdrożenie Akri w klastrze AKS Edge Essentials. OPC UA to protokół komunikacyjny do automatyzacji przemysłowej. Jest to technologia klienta/serwera, która jest dostarczana ze strukturą zabezpieczeń i komunikacji. Jeśli w jakimkolwiek momencie pokazu, chcesz dokładniej zapoznać się z OPC UA lub wyjaśnić termin, zobacz specyfikacje OPC UA online.

Ten pokaz ułatwia rozpoczęcie korzystania z usługi Akri do odnajdywania serwerów OPC UA i używania ich za pośrednictwem brokera zawierającego klienta OPC UA. W szczególności w tym scenariuszu utworzono konfigurację Akri o nazwie Monitorowanie OPC UA . Ta konfiguracja pokazuje, jak za pomocą Akri wykrywać wartości anomalii określonej zmiennej OPC UA. W tym celu klienci OPC UA w brokerach subskrybują ten zmienną i obsługują jej wartość za pośrednictwem gRPC w celu korzystania z aplikacji internetowej wykrywania anomalii. Tej konfiguracji można użyć do monitorowania barometru, detektora CO i nie tylko. Jednak w tym przykładzie zmienna OPC UA reprezentuje wartości sterownika PLC (programowalnego kontrolera logiki) temperatury termostatu. Każda wartość spoza zakresu od 70 do 80 stopni jest anomalią. Ponadto, jeśli chcesz używać certyfikatów do zabezpieczeń, przejdź do sekcji na końcu.

Diagram przedstawiający przepływ pokazu Akri OPC UA.

Wymagania wstępne

  • Klaster AKS Edge Essentials jest uruchomiony.
  • Subskrypcja platformy Azure i grupa zasobów, do której mają zostać wdrożone serwery OPC PLC.
  • Usługa Akri działa tylko w systemie Linux: w tym ćwiczeniu użyj węzłów systemu Linux.

Tworzenie serwerów OPC UA

Teraz utwórz kilka serwerów OPC UA PLC, aby odnaleźć. Zamiast rozpoczynać od podstaw, należy wdrożyć kontenery serwerów OPC PLC. Więcej informacji na temat kontenerów i ich parametrów można znaleźć tutaj. W tym pokazie użyto szablonu dostarczonego do wdrożenia wystąpień kontenera serwera OPC PLC na platformie Azure.

  1. Przejdź do pliku readme przykładu OPC PLC usługi Azure IoT Edge i wybierz pozycję Wdróż na platformie Azure.

  2. Wybierz pozycję Edytuj szablon i przejdź do wiersza 172. Zastąp cały wiersz następującym kodem, aby dodać niezbędne flagi do wdrożenia żądanych serwerów 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')]"
    

    Więcej informacji na temat parametrów można znaleźć w pliku readme.

  3. Zapisz szablon i wypełnij szczegóły projektu i wystąpienia. W polu Number of Simulationsokreśl 2 polecenie , aby uruchomić dwa serwery OPC PLC.

  4. Wybierz pozycję Przejrzyj i utwórz, a następnie pozycję Utwórz , aby wdrożyć serwery na platformie Azure.

Udało Ci się utworzyć dwa serwery OPC UA PLC, z których każdy ma jeden szybki węzeł PLC, który generuje niepodpisaną liczbę całkowitą z dolną granicą = 65 i górną granicą = 85 w tempie 1.

Uruchamianie Akri

  1. Upewnij się, że serwery OPC UA są uruchomione, sprawdzając, czy wystąpienia kontenerów zostały uruchomione na Azure Portal.

  2. Aby usługa Akri wykryła serwery prawidłowo, określ poprawne adresy URL odnajdywania podczas instalowania Akri.

    Adresy URL odnajdywania są wyświetlane jako opc.tcp://<FQDN>:50000/. Aby uzyskać nazwy FQDN serwerów OPC PLC, przejdź do wdrożeń na platformie Azure i zobaczysz nazwę FQDN. Skopiuj i wklej nazwę FQDN do adresów URL odnajdywania dla każdego serwera.

    Zrzut ekranu przedstawiający nazwę FQDN wystąpienia kontenera w witrynie Azure Portal.

  3. Dodaj wykresy helm Akri, jeśli jeszcze tego nie zrobiono:

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

    Jeśli wcześniej dodano wykres narzędzia Akri helm, zaktualizuj repozytorium do najnowszej kompilacji:

    helm repo update
    
  4. Zainstaluj narzędzie Akri przy użyciu narzędzia Helm. Podczas instalowania narzędzia Akri określ, że chcesz wdrożyć programy obsługi odnajdywania OPC UA, ustawiając wartość opcua.discovery.enabled=truehelm .

    W tym scenariuszu określ Identifier i NamespaceIndex identyfikator NodeID, który ma być monitorowany przez brokerów. W takim przypadku jest to wcześniej utworzona zmienna temperatury, która ma wartość IdentifierFastUInt1 i NamespaceIndex .2

    Pamiętaj, aby zastąpić ciąg opcua.configuration.discoveryDetails.discoveryUrls adresami URL uzyskanymi w poprzednim 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/" `
    

    Uwaga

    FastUInt1 jest identyfikatorem szybko zmieniającego się węzła dostarczanego przez serwer OPC PLC.

    Dowiedz się więcej o ustawieniach konfiguracji OPC UA tutaj.

  5. Po zainstalowaniu narzędzia Akri agent Akri odnajduje dwa serwery i tworzy wystąpienie dla każdego serwera. Obejrzyj, jak dwa zasobniki brokera są uruchamiane, jeden dla każdego serwera:

    kubectl get pods -o wide --watch
    

    Możesz również upewnić się, że zasobnik monitorowania Akri pomyślnie nawiązał połączenie z serwerem OPC UA:

    kubectl logs <name of OPC UA monitoring pod>
    

    Aby sprawdzić więcej elementów Akri:

    • Uruchom polecenie kubectl get crd, a powinny zostać wyświetlone identyfikatory CRD.
    • Uruchom polecenie kubectl get akric, a powinien zostać wyświetlony komunikat akri-opcua-monitoring.
    • Jeśli serwery OPC PLC zostały odnalezione i zasobniki spun up, można zobaczyć wystąpienia, uruchamiając polecenie , i możesz sprawdzić dalej, uruchamiając polecenie kubectl get akriikubectl get akrii akri-opcua-monitoring-<ID> -o yaml.

Wdrażanie aplikacji internetowej wykrywania anomalii jako odbiorcy końcowego brokerów

Przykładowa aplikacja internetowa wykrywania anomalii została utworzona na potrzeby tego kompleksowego pokazu. Ma on wycinkę gRPC, która wywołuje usługi gRPC brokera, uzyskując najnowszą wartość temperatury. Następnie określa, czy ta wartość jest odstający do zestawu danych przy użyciu strategii Local Outlier Factor. Zestaw danych jest po prostu plikiem CSV z liczbami z przedziału od 70 do 80 powtórzonych kilka razy; w związku z tym każda wartość znacznie spoza tego zakresu będzie postrzegana jako odstający. Aplikacja internetowa służy jako dziennik, wyświetlając wszystkie wartości temperatury i adres serwera OPC UA, który wysłał wartości. Pokazuje ona wartości anomalii na czerwono. Anomalie zawsze mają wartość 120 ze względu na sposób DoSimulation konfigurowania funkcji na serwerach OPC UA.

  1. Wdróż aplikację wykrywania anomalii i watch uruchomienie zasobnika dla aplikacji:

    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 uruchomieniu zasobników pobierz adres IP węzła i numer portu usługi aplikacji:

    Get-AKSEdgeNodeAddr
    
    kubectl get svc
    
  3. Przejdź do adresu http://<NODE IP>:<SERVICE PORT NUM>/. Załadowanie lokacji zajmuje kilka sekund, a następnie powinien zostać wyświetlony dziennik wartości temperatury, który jest aktualizowany co kilka sekund. Zwróć uwagę, jak wartości pochodzą z dwóch różnych adresów URL odnajdywania, w szczególności tych dla każdego z dwóch serwerów OPC UA.

    Zrzut ekranu przedstawiający aplikację wykrywania anomalii w przeglądarce.

Opcjonalnie: certyfikaty dla serwera OPC UA i brokera

Ta opcjonalna procedura umożliwia wypróbowanie usługi Akri z certyfikatami w celu zapewnienia dodatkowych zabezpieczeń. Wykonaj następujące kroki, aby wdrożyć serwery OPC PLC z zabezpieczeniami i utworzyć wpis tajny Kubernetes, który może służyć do uwierzytelniania serwera i brokera.

Tworzenie serwerów OPC UA z zabezpieczeniami

  1. Przejdź do pliku readme przykładu OPC PLC usługi Azure IoT Edge i wybierz pozycję Wdróż na platformie Azure.

  2. Wybierz pozycję Edytuj szablon i przejdź do wiersza 172. Zastąp cały wiersz następującym kodem, aby dodać niezbędne flagi do wdrożenia żądanych serwerów 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 W sekcji dodaj następujący kod w trzeciej properties sekcji (wiersz 167) (taki sam poziom jak image, command, portsitp.):

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

    Następnie dodaj następujący kod w drugiej sekcji "properties" (wiersz 163) (taki sam poziom jak containers):

    "volumes": [
                   {
                      "name": "filesharevolume",
                      "azureFile": {
                            "shareName": "acishare",
                            "storageAccountName": "<storageAccName>",
                            "storageAccountKey": "<storageAccKey>"
                      }
                   }
               ]
    
  4. Zapisz szablon i wypełnij szczegóły projektu i wystąpienia. W polu Number of Simulationsokreśl 2 polecenie , aby uruchomić dwa serwery OPC PLC.

  5. Wybierz pozycję Przejrzyj i utwórz, a następnie wybierz pozycję Utwórz , aby wdrożyć serwery na platformie Azure.

Udało Ci się utworzyć dwa serwery OPC UA PLC, z których każdy ma jeden szybki węzeł PLC, który generuje niepodpisaną liczbę całkowitą z dolną granicą = 65 i górną granicą = 85 w tempie 1.

Tworzenie certyfikatów X.509 v3

Utwórz trzy certyfikaty X.509v3 zgodne z protokołem OPC UA (jeden dla brokera i jeden dla każdego serwera), zapewniając, że certyfikat zawiera niezbędne składniki, takie jak identyfikator URI aplikacji.

Wymagania dotyczące certyfikatów:

  • Wszystkie powinny być podpisane przez wspólny urząd certyfikacji, a algorytmy podpisywania dla wszystkich certyfikatów powinny mieć wartość SHA256.
  • Rozmiar klucza musi być również większy niż lub równy 2048 bitom.
  • System DNS certyfikatów serwera i certyfikat AkriBroker powinien zawierać nazwę FQDN utworzonego wystąpienia kontenera serwera OPC UA (przejdź do kroku 3 kroku uruchomienia Akri , aby dowiedzieć się, jak uzyskać nazwę FQDN).
  • Certyfikat serwera OPC UA powinien mieć nazwę (w terminach CN=OpcPlcgenerowania certyfikatów), a certyfikat brokera Akri powinien mieć nazwę OpcPlcAkriBroker () (CN=AkriBrokernie ma wymagań dotyczących nazwy urzędu certyfikacji).

Istnieje wiele narzędzi do generowania odpowiednich certyfikatów dla OPC UA, takich jak generator certyfikatów OPC Foundation lub OpenSSL. Generator certyfikatów OPC Foundation może być wygodniejszy, podczas gdy openSSL zapewnia więcej miejsca na dostosowanie.

Jeśli zdecydujesz się używać generatora certyfikatów OPC Foundation, wykonaj następujące kroki, aby skompilować:

  1. Zainstaluj narzędzie Perl.

  2. Pobierz plik .zip lub sklonuj repozytorium generatora certyfikatów OPC Foundation (Misc-Tools).

  3. Uruchom polecenie build_certificate-generator.bat z poziomu wiersza polecenia dla deweloperów programu Visual Studio (zalecany jest program Visual Studio 2022).

  4. Kompilowanie Opc.Ua.CertificateGenerator rozwiązania z programu Visual Studio 2022.

  5. Sprawdź, czy Opc.Ua.CertificateGenerator.exe katalog został pomyślnie skompilowany build/Debug/Opc.Ua.CertificateGenerator .

  6. Aby utworzyć certyfikaty, użyj następujących przykładowych poleceń. Aby uzyskać więcej opcji, zobacz Narzędzia misc-Tools :

    • urząd certyfikacji Self-Signed:
    .\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -sn CN=<CA name e.g. MyCA> -ca true -pw <password>
    
    • Certyfikat serwera OPC UA:
    .\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -an OpcPlc -ikf '.\private\MyCA [hash].pfx' -ikp <password>-dn <DNS separated by commas>
    
    • Certyfikat brokera Akri:
    .\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -an AkriBroker -ikf '.\private\MyCA [hash].pfx' -ikp <password>-dn <DNS separated by commas>
    
  7. .crl Utwórz plik dla urzędu certyfikacji przy użyciu protokołu OpenSSL (tylko w przypadku utworzenia urzędu certyfikacji z generatora, który byłby brakujący .crl plik).

Jeśli zdecydujesz się używać programu OpenSSL, poniżej znajduje się lista odwołań:

Tworzenie wpisu tajnego platformy Kubernetes opcua-broker-credentials

Certyfikat klienta OPC UA jest przekazywany do brokera monitorowania OPC UA jako wpis tajny Kubernetes zainstalowany jako wolumin.

Utwórz wpis tajny Kubernetes, projektując każdy certyfikat/listę crl/klucz prywatny z oczekiwaną nazwą klucza (client_certificate, client_key, ca_certificatei ca_crl). Określ ścieżki plików, aby wskazywały poświadczenia utworzone w poprzedniej sekcji:

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

Certyfikat jest instalowany na woluminie credentialsmountPath w pliku /etc/opcua-certs/client-pki, jak pokazano w szablonie narzędzia helm konfiguracji OPC UA. Ta ścieżka polega na tym, że brokerzy oczekują znalezienia certyfikatów.

Instalowanie folderu certyfikatów w usłudze ACI

Postępuj zgodnie z tymi instrukcjami , aby utworzyć udział plików platformy Azure.

Po utworzeniu udziału plików i certyfikatów platformy Azure przekaż certyfikaty serwera urzędu certyfikacji i serwera OPC UA do udziału plików zgodnie z opisem.

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

Uwaga

Ponieważ dodaliśmy flagę zabezpieczeń w szablonie, powoduje to wygenerowanie dowolnego certyfikatu w udziale plików. W udziale plików można usunąć wszystkie niezidentyfikowane certyfikaty (ścieżki folderów powinny wyglądać dokładnie tak samo jak na poprzednim diagramie).

Po wykonaniu tych kroków dotyczących zabezpieczeń kliknij pozycję Uruchom ponownie w wystąpieniu kontenera, aby je zaktualizować i uruchomić przy użyciu zainstalowanych certyfikatów.

Uruchamianie aplikacji internetowej Akri i wdrażanie jej

Postępuj zgodnie z poprzednią sekcją, aby uruchomić usługę Akri i odnaleźć serwery, ale teraz dodaj wiersz --set opcua.configuration.mountCertificates='true' na końcu polecenia. Pamiętaj, aby zastąpić opcua.configuration.discoveryDetails.discoveryUrls ciąg adresami URL znalezionymi w 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'

W tym miejscu możesz skorzystać z sekcji dotyczącej wdrażania aplikacji internetowej wykrywania anomalii jako odbiorcy końcowego brokerów, aby zobaczyć wartości OPC PLC na stronie internetowej.

Czyszczenie

  1. Usuń aplikację wykrywania anomalii:

    kubectl delete -f https://raw.githubusercontent.com/project-akri/akri/main/deployment/samples/akri-anomaly-detection-app.yaml
    
  2. Odinstaluj aplikację Akri z klastra.

    helm delete akri
    
  3. Usuń wdrożenie serwera OPC UA, przechodząc do wystąpienia kontenera, a następnie wybierz pozycję Usuń w Azure Portal.

Następne kroki

Omówienie usługi AKS Edge Essentials