Bagikan melalui


Menemukan server OPC UA dengan Akri

Akri adalah antarmuka sumber daya Kubernetes yang memungkinkan Anda untuk dengan mudah mengekspos perangkat daun heterogen (seperti kamera IP dan perangkat USB) sebagai sumber daya dalam kluster Kubernetes. Akri terus mendeteksi simpul yang memiliki akses ke perangkat ini untuk menjadwalkan beban kerja berdasarkan simpul tersebut. Akri adalah proyek kotak pasir CNCF yang dibuat untuk tepi, menangani tampilan dinamis dan hilangnya perangkat daun. Saat ini mendukung protokol OPC UA, ONVIF, dan udev, tetapi Anda juga dapat menerapkan penangan protokol kustom yang disediakan oleh templat. Baca selengkapnya tentang Akri di sini.

Artikel ini menjelaskan bagaimana Anda dapat menyebarkan sampel kontainer server OPC PLC di Azure dan menemukannya dengan menyebarkan Akri di kluster AKS Edge Essentials Anda. OPC UA adalah protokol komunikasi untuk otomatisasi industri. Ini adalah teknologi klien/server yang dilengkapi dengan kerangka kerja keamanan dan komunikasi. Jika pada titik mana pun dalam demo, Anda ingin menyelam lebih dalam ke OPC UA atau mengklarifikasi istilah, lihat spesifikasi OPC UA online.

Demo ini membantu Anda mulai menggunakan Akri untuk menemukan server OPC UA dan menggunakannya melalui broker yang berisi klien OPC UA. Secara khusus, konfigurasi Akri yang disebut OPC UA Monitoring dibuat untuk skenario ini. Konfigurasi ini menunjukkan bagaimana Anda dapat menggunakan Akri untuk mendeteksi nilai anomali dari variabel OPC UA tertentu. Untuk melakukannya, klien OPC UA di broker berlangganan variabel tersebut dan melayani nilainya melalui gRPC agar aplikasi web deteksi anomali dapat dikonsumsi. Anda dapat menggunakan konfigurasi ini untuk memantau barometer, detektor CO, dan banyak lagi. Namun, untuk contoh ini, variabel OPC UA mewakili nilai PLC (pengontrol logika yang dapat diprogram) untuk suhu termostat. Nilai apa pun di luar rentang 70-80 derajat adalah anomali. Selain itu, jika Anda ingin menggunakan sertifikat untuk keamanan, lewati ke bagian di akhir.

Diagram yang menunjukkan alur demo agen pengguna OPC Akri.

Prasyarat

  • Kluster AKS Edge Essentials aktif dan berjalan.
  • Langganan Azure dan grup sumber daya untuk menyebarkan server OPC PLC.
  • Akri hanya berfungsi di Linux: gunakan simpul Linux untuk latihan ini.

Membuat server agen pengguna OPC

Sekarang, buat beberapa server OPC UA PLC untuk ditemukan. Alih-alih memulai dari awal, sebarkan kontainer server OPC PLC. Anda dapat membaca lebih lanjut tentang kontainer dan parameternya di sini. Demo ini menggunakan templat yang disediakan untuk menyebarkan instans kontainer server OPC PLC ke Azure.

  1. Buka readme sampel Azure IoT Edge OPC PLC dan pilih Sebarkan ke Azure.

  2. Pilih Edit Templat dan navigasi ke baris 172. Ganti seluruh baris dengan kode berikut, untuk menambahkan bendera yang diperlukan untuk menyebarkan server PLC OPC yang diinginkan:

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

    Anda dapat membaca selengkapnya tentang parameter dalam file readme.

  3. Simpan templat, dan isi detail proyek dan instans. Untuk Number of Simulations, tentukan 2 untuk menjalankan dua server OPC PLC.

  4. Pilih Tinjau dan Buat, lalu Buat untuk menyebarkan server Anda di Azure.

Anda sekarang telah berhasil membuat dua server OPC UA PLC, masing-masing dengan satu simpul PLC cepat, yang menghasilkan bilangan bulat yang tidak ditandatangani dengan batas bawah = 65 dan batas atas = 85 pada tingkat 1.

Jalankan Akri

  1. Pastikan server agen pengguna OPC Anda berjalan dengan memeriksa untuk melihat bahwa instans kontainer telah dimulai pada portal Azure Anda.

  2. Agar Akri dapat menemukan server dengan benar, tentukan URL penemuan yang benar saat menginstal Akri.

    URL penemuan muncul sebagai opc.tcp://<FQDN>:50000/. Untuk mendapatkan FQDN server PLC OPC Anda, navigasikan ke penyebaran Anda di Azure dan Anda akan melihat FQDN. Salin dan tempel FQDN ke URL penemuan Anda untuk setiap server.

    Cuplikan layar memperlihatkan FQDN instans kontainer di portal Microsoft Azure.

  3. Tambahkan bagan helm Akri, jika Anda belum:

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

    Jika sebelumnya Anda telah menambahkan bagan helm Akri, perbarui repositori Anda untuk build terbaru:

    helm repo update
    
  4. Instal Akri menggunakan Helm. Saat Anda menginstal Akri, tentukan bahwa Anda ingin menyebarkan handler penemuan OPC UA dengan mengatur nilai opcua.discovery.enabled=truehelm .

    Dalam skenario ini, tentukan Identifier dan NamespaceIndex dari NodeID yang Anda inginkan untuk dipantau oleh broker. Dalam hal ini, itulah variabel suhu yang dibuat sebelumnya, yang memiliki Identifier dari FastUInt1 dan NamespaceIndex dari 2.

    Pastikan untuk mengganti opcua.configuration.discoveryDetails.discoveryUrls dengan URL yang Anda peroleh di langkah sebelumnya:

    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/" `
    

    Catatan

    FastUInt1 adalah pengidentifikasi simpul yang berubah cepat yang disediakan oleh server OPC PLC.

    Pelajari selengkapnya tentang pengaturan konfigurasi OPC UA di sini.

  5. Setelah Akri diinstal, agen Akri menemukan dua server dan membuat instans untuk setiap server. Tonton dua pod broker berputar, satu untuk setiap server:

    kubectl get pods -o wide --watch
    

    Anda juga dapat memastikan bahwa pod pemantauan Akri telah berhasil terhubung ke server agen pengguna OPC:

    kubectl logs <name of OPC UA monitoring pod>
    

    Untuk memeriksa lebih banyak elemen Akri:

    • Jalankan kubectl get crd, dan Anda akan melihat CRD tercantum.
    • Jalankan kubectl get akric, dan Anda akan melihat akri-opcua-monitoring.
    • Jika server OPC PLC ditemukan dan pod berputar, Anda dapat melihat instans dengan menjalankan kubectl get akrii, dan Anda dapat memeriksa lebih lanjut dengan menjalankan kubectl get akrii akri-opcua-monitoring-<ID> -o yaml.

Menyebarkan aplikasi web deteksi anomali sebagai konsumen akhir broker

Contoh aplikasi web deteksi anomali dibuat untuk demo end-to-end ini. Ini memiliki stub gRPC yang memanggil layanan gRPC broker, mendapatkan nilai suhu terbaru. Kemudian menentukan apakah nilai ini merupakan outlier ke himpunan data menggunakan strategi Local Outlier Factor. Himpunan data hanyalah file CSV dengan angka antara 70-80 diulang beberapa kali; oleh karena itu, nilai apa pun yang secara signifikan di luar rentang ini akan dilihat sebagai outlier. Aplikasi web berfungsi sebagai log, menampilkan semua nilai suhu dan alamat server agen pengguna OPC yang mengirim nilai. Ini menunjukkan nilai anomali berwarna merah. Anomali selalu memiliki nilai 120 karena bagaimana DoSimulation fungsi disiapkan di server agen pengguna OPC.

  1. Sebarkan aplikasi deteksi anomali dan watch pod yang berputar untuk aplikasi:

    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. Setelah pod berjalan, dapatkan IP node Anda dan nomor port layanan aplikasi:

    Get-AKSEdgeNodeAddr
    
    kubectl get svc
    
  3. Navigasikan ke http://<NODE IP>:<SERVICE PORT NUM>/. Dibutuhkan beberapa detik agar situs dimuat, maka Anda akan melihat log nilai suhu, yang diperbarui setiap beberapa detik. Perhatikan bagaimana nilai berasal dari dua URL penemuan yang berbeda, khususnya yang untuk masing-masing dari dua server AGEN PENGGUNA OPC.

    Cuplikan layar memperlihatkan aplikasi deteksi anomali di browser.

Opsional: sertifikat untuk server opc UA dan broker

Prosedur opsional ini dapat Anda gunakan untuk mencoba Akri dengan sertifikat untuk keamanan tambahan. Ikuti langkah-langkah ini untuk menyebarkan server OPC PLC dengan keamanan dan buat rahasia Kubernetes yang dapat digunakan untuk mengautentikasi server dan broker.

Membuat server agen pengguna OPC dengan keamanan

  1. Buka readme sampel Azure IoT Edge OPC PLC dan pilih Sebarkan ke Azure.

  2. Pilih Edit Templat dan navigasi ke baris 172. Ganti seluruh baris dengan kode berikut untuk menambahkan bendera yang diperlukan untuk menyebarkan server PLC OPC yang diinginkan:

    "[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. Di bawah bagian resources , tambahkan kode berikut di dalam bagian ketiga properties (baris 167) (tingkat yang sama dengan image, , commandports, dll.):

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

    Kemudian, tambahkan kode berikut di dalam bagian "properti" kedua (baris 163) (tingkat yang sama dengan containers):

    "volumes": [
                   {
                      "name": "filesharevolume",
                      "azureFile": {
                            "shareName": "acishare",
                            "storageAccountName": "<storageAccName>",
                            "storageAccountKey": "<storageAccKey>"
                      }
                   }
               ]
    
  4. Simpan templat, dan isi detail proyek dan instans. Untuk Number of Simulations, tentukan 2 untuk menjalankan dua server OPC PLC.

  5. Pilih Tinjau dan Buat, lalu pilih Buat untuk menyebarkan server Anda di Azure.

Anda sekarang telah berhasil membuat dua server OPC UA PLC, masing-masing dengan satu simpul PLC cepat, yang menghasilkan bilangan bulat yang tidak ditandatangani dengan batas bawah = 65 dan batas atas = 85 pada tingkat 1.

Membuat sertifikat X.509 v3

Buat tiga sertifikat X.509v3 yang sesuai dengan OPC UA (satu untuk broker dan satu untuk setiap server), memastikan bahwa sertifikat berisi komponen yang diperlukan, seperti URI aplikasi.

Persyaratan untuk sertifikat:

  • Semuanya harus ditandatangani oleh Otoritas Sertifikat (CA) umum, dan algoritma penandatanganan untuk semua sertifikat harus SHA256.
  • Ukuran kunci juga harus lebih besar dari atau sama dengan 2048 bit.
  • DNS sertifikat server dan sertifikat AkriBroker harus berisi FQDN instans kontainer server OPC UA yang dibuat (buka Langkah 3 jalankan Akri untuk mempelajari cara mendapatkan FQDN).
  • Sertifikat server OPC UA harus diberi nama OpcPlc (dalam istilah pembuatan sertifikat, CN=OpcPlc) dan sertifikat broker Akri harus diberi nama AkriBroker (CN=AkriBroker) (tidak ada persyaratan untuk nama CA).

Ada banyak alat untuk menghasilkan sertifikat yang tepat untuk OPC UA, seperti Generator Sertifikat OPC Foundation atau OpenSSL. Generator Sertifikat OPC Foundation dapat menjadi opsi yang lebih nyaman, sedangkan OpenSSL menyediakan lebih banyak ruang untuk penyesuaian.

Jika Anda memilih untuk menggunakan Generator Sertifikat OPC Foundation, ikuti langkah-langkah berikut untuk membangun:

  1. Pasang Perl.

  2. Unduh file .zip atau kloning repositori Generator Sertifikat OPC Foundation (Misc-Tools).

  3. Jalankan build_certificate-generator.bat dari prompt perintah pengembang Visual Studio (Visual Studio 2022 disarankan).

  4. Buat Opc.Ua.CertificateGenerator solusi dari Visual Studio 2022.

  5. Periksa apakah Opc.Ua.CertificateGenerator.exe telah berhasil dibangun di build/Debug/Opc.Ua.CertificateGenerator direktori.

  6. Gunakan contoh perintah berikut untuk membuat sertifikat. Lihat Misc-Tools untuk opsi lainnya:

    • Self-Signed CA:
    .\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -sn CN=<CA name e.g. MyCA> -ca true -pw <password>
    
    • Sertifikat server OPC UA:
    .\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -an OpcPlc -ikf '.\private\MyCA [hash].pfx' -ikp <password>-dn <DNS separated by commas>
    
    • Sertifikat broker Akri:
    .\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -an AkriBroker -ikf '.\private\MyCA [hash].pfx' -ikp <password>-dn <DNS separated by commas>
    
  7. Buat .crl file untuk CA menggunakan OpenSSL (hanya jika Anda membuat CA dari generator, yang akan kehilangan .crl file).

Jika Anda memilih untuk menggunakan OpenSSL, berikut adalah daftar referensi:

Membuat rahasia Kubernetes opcua-broker-credentials

Sertifikat klien OPC UA diteruskan ke broker pemantauan OPC UA sebagai rahasia Kubernetes yang dipasang sebagai volume.

Buat rahasia Kubernetes, proyeksi setiap sertifikat/crl/kunci privat dengan nama kunci yang diharapkan (client_certificate, , client_keyca_certificate, dan ca_crl). Tentukan jalur file sehingga menunjuk ke kredensial yang dibuat di bagian sebelumnya:

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

Sertifikat dipasang ke volume credentials di mountPath /etc/opcua-certs/client-pki, seperti yang ditunjukkan dalam templat helm konfigurasi OPC UA. Jalur ini adalah tempat broker mengharapkan untuk menemukan sertifikat.

Memasang folder sertifikat ke ACI

Ikuti instruksi ini untuk membuat berbagi file Azure.

Setelah membuat berbagi file dan sertifikat Azure, unggah sertifikat server OS dan OPC UA ke berbagi file seperti yang dijelaskan.

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

Catatan

Karena kami menambahkan bendera untuk keamanan dalam templat, ini menyebabkan sertifikat arbitrer dihasilkan dalam berbagi file. Anda dapat menghapus sertifikat yang tidak dikenal dalam berbagi file (jalur folder akan terlihat persis sama dengan diagram sebelumnya).

Setelah mengikuti langkah-langkah ini untuk keamanan, klik Hidupkan ulang pada instans kontainer Anda untuk memperbaruinya dan menjalankannya dengan sertifikat yang dipasang.

Jalankan Akri dan sebarkan aplikasi web

Ikuti bagian sebelumnya untuk menjalankan Akri dan menemukan server Anda, tetapi sekarang tambahkan baris --set opcua.configuration.mountCertificates='true' ke akhir perintah. Pastikan untuk mengganti opcua.configuration.discoveryDetails.discoveryUrls dengan URL yang ditemukan dari portal Azure:

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'

Dari sini, Anda dapat mengikuti bagian tentang menyebarkan aplikasi web deteksi anomali sebagai konsumen akhir broker untuk melihat nilai PLC OPC Anda di halaman web Anda.

Membersihkan

  1. Hapus aplikasi deteksi anomali:

    kubectl delete -f https://raw.githubusercontent.com/project-akri/akri/main/deployment/samples/akri-anomaly-detection-app.yaml
    
  2. Hapus instalan Akri dari kluster Anda.

    helm delete akri
    
  3. Hapus penyebaran server OPC UA dengan menavigasi ke instans kontainer Anda, lalu pilih Hapus di portal Azure.

Langkah berikutnya

Gambaran umum AKS Edge Essentials