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.
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.
Przejdź do pliku readme przykładu OPC PLC usługi Azure IoT Edge i wybierz pozycję Wdróż na platformie Azure.
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.
Zapisz szablon i wypełnij szczegóły projektu i wystąpienia. W polu
Number of Simulations
określ2
polecenie , aby uruchomić dwa serwery OPC PLC.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
Upewnij się, że serwery OPC UA są uruchomione, sprawdzając, czy wystąpienia kontenerów zostały uruchomione na Azure Portal.
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.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
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=true
helm .W tym scenariuszu określ
Identifier
iNamespaceIndex
identyfikator NodeID, który ma być monitorowany przez brokerów. W takim przypadku jest to wcześniej utworzona zmienna temperatury, która ma wartośćIdentifier
FastUInt1
iNamespaceIndex
.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.
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 komunikatakri-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 akrii
kubectl get akrii akri-opcua-monitoring-<ID> -o yaml
.
- Uruchom polecenie
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.
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
Po uruchomieniu zasobników pobierz adres IP węzła i numer portu usługi aplikacji:
Get-AKSEdgeNodeAddr
kubectl get svc
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.
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
Przejdź do pliku readme przykładu OPC PLC usługi Azure IoT Edge i wybierz pozycję Wdróż na platformie Azure.
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')]"
resources
W sekcji dodaj następujący kod w trzeciejproperties
sekcji (wiersz 167) (taki sam poziom jakimage
,command
,ports
itp.):"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>" } } ]
Zapisz szablon i wypełnij szczegóły projektu i wystąpienia. W polu
Number of Simulations
określ2
polecenie , aby uruchomić dwa serwery OPC PLC.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=OpcPlc
generowania certyfikatów), a certyfikat brokera Akri powinien mieć nazwęOpcPlc
AkriBroker
() (CN=AkriBroker
nie 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ć:
Zainstaluj narzędzie Perl.
Pobierz plik .zip lub sklonuj repozytorium generatora certyfikatów OPC Foundation (Misc-Tools).
Uruchom polecenie
build_certificate-generator.bat
z poziomu wiersza polecenia dla deweloperów programu Visual Studio (zalecany jest program Visual Studio 2022).Kompilowanie
Opc.Ua.CertificateGenerator
rozwiązania z programu Visual Studio 2022.Sprawdź, czy
Opc.Ua.CertificateGenerator.exe
katalog został pomyślnie skompilowanybuild/Debug/Opc.Ua.CertificateGenerator
.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>
.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ń:
- Projekt OpenSSL
- Książka kucharka OpenSSL
- Samouczek: tworzenie certyfikatów testowych przy użyciu protokołu OpenSSL
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_certificate
i 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 credentials
mountPath
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
Usuń aplikację wykrywania anomalii:
kubectl delete -f https://raw.githubusercontent.com/project-akri/akri/main/deployment/samples/akri-anomaly-detection-app.yaml
Odinstaluj aplikację Akri z klastra.
helm delete akri
Usuń wdrożenie serwera OPC UA, przechodząc do wystąpienia kontenera, a następnie wybierz pozycję Usuń w Azure Portal.