共用方式為


使用 Akri 探索 OPC UA 伺服器

Akri 是 Kubernetes 資源介面,可讓您輕鬆地公開異質分葉裝置, (例如 IP 相機和 USB 裝置,) 作為 Kubernetes 叢集中的資源。 Akri 會持續偵測可存取這些裝置的節點,以根據其排程工作負載。 Akri 是一個針對邊緣建立的一個特定沙箱專案,可處理分葉裝置的動態外觀和分葉設備。 它目前支援 OPC UA、ONVIF 和 udev 通訊協定,但您也可以實作範本所提供的自訂通訊協定處理常式。 在這裡深入瞭解 Akri

本文說明如何在 Azure 中部署範例 OPC LINUX 伺服器容器,並在 AKS Edge Essentials 叢集上部署 Akri 來探索這些容器。 OPC UA 是產業自動化的通訊協定。 這是安全性與通訊架構隨附的用戶端/伺服器技術。 如果示範中的任何時間點,您想要深入瞭解 OPC UA 或厘清字詞,請參閱 線上 OPC UA 規格

此示範可協助您開始使用 Akri 來探索 OPC UA 伺服器,並透過包含 OPC UA 用戶端的訊息代理程式使用這些伺服器。 具體而言,已為此案例建立名為 OPC UA 監視 的 Akri 組態。 此設定示範如何使用 Akri 來偵測特定 OPC UA 變數的異常值。 若要這樣做,訊息代理程式中的 OPC UA 用戶端會訂閱該變數,並透過 gRPC 提供其值,讓異常偵測 Web 應用程式取用。 您可以使用此設定來監視條形計、CO 偵測器等等。 不過,在此範例中,OPC UA 變數代表控溫器溫度的 (可程式化邏輯控制器) 值。 超出 70-80 度範圍的任何值都是異常的。 此外,如果您想要使用憑證進行安全性,請跳至結尾的 區段。

顯示 Akri OPC UA 示範流程的圖表。

必要條件

  • AKS Edge Essentials 叢集啟動並執行。
  • Azure 訂用帳戶和資源群組,要在其中部署 OPC SQL 伺服器。
  • Akri 僅適用于 Linux:使用此練習的 Linux 節點。

建立 OPC UA 伺服器

現在,建立一些要探索的 OPC UA 才能找到的伺服器。 不要從頭開始,而是部署 OPC SQL 伺服器容器。 您可以 在這裡深入瞭解容器及其參數。 此示範會使用提供的範本,將 OPC SQL 伺服器容器實例部署至 Azure。

  1. 移至Azure IoT Edge OPC SSD 範例的讀我檔案,然後選取 [部署至 Azure]。

  2. 選取 [編輯範本 ],然後流覽至第 172 行。 將整行取代為下列程式碼,以新增部署所需 OPC SQL 伺服器的必要旗標:

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

    您可以在 讀我檔案內深入瞭解參數

  3. 儲存範本,並填入專案和實例詳細資料。 針對 Number of Simulations ,指定 2 以執行兩部 OPC SQL 伺服器。

  4. 選取 [檢閱並建立],然後選取 [ 建立 ] 以在 Azure 上部署您的伺服器。

您現在已成功建立兩個 OPC UA HTTP 伺服器,每部伺服器都有一個快速的 HTTP 節點,其會產生具有下限 = 65上限 = 85速率為 1不帶正負號整數。

執行 Akri

  1. 確認您的 OPC UA 伺服器正在執行,方法是檢查是否已在您的Azure 入口網站上啟動容器實例。

  2. 若要讓 Akri 正確探索伺服器,請在安裝 Akri 時指定正確的探索 URL。

    探索 URL 會顯示為 opc.tcp://<FQDN>:50000/ 。 若要取得 OPC VPN 伺服器的 FQDN,請流覽至 Azure 中的部署,您會看到 FQDN。 複製 FQDN 並貼到每個伺服器的探索 URL 中。

    顯示 Azure 入口網站中容器實例 FQDN 的螢幕擷取畫面。

  3. 如果您還沒有下列專案,請新增 Akri helm 圖表:

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

    如果您先前已新增 Akri helm 圖表,請更新存放庫以取得最新的組建:

    helm repo update
    
  4. 使用 Helm 安裝 Akri。 當您安裝 Akri 時,請指定您想要藉由設定 helm 值 opcua.discovery.enabled=true 來部署 OPC UA 探索處理常式。

    在此案例中,指定 Identifier 您想要代理程式監視的 和 NamespaceIndex 。 在此情況下,這是先前建立的溫度變數,其具有 IdentifierNamespaceIndexFastUInt12

    請務必將 取代 opcua.configuration.discoveryDetails.discoveryUrls 為您在上一個步驟中取得的 URL:

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

    注意

    FastUInt1 是 OPC 其所提供 之快速變更節點 的識別碼。

    在這裡深入瞭解 OPC UA 組態設定

  5. 安裝 Akri 之後,Akri 代理程式會探索這兩部伺服器,並為每個伺服器建立實例。 觀看兩個代理程式 Pod 啟動,每個伺服器各有一個:

    kubectl get pods -o wide --watch
    

    您也可以確保 Akri 的監視 Pod 已成功連線到 OPC UA 伺服器:

    kubectl logs <name of OPC UA monitoring pod>
    

    若要檢查 Akri 的更多元素:

    • 執行 kubectl get crd ,您應該會看到列出的 CRD。
    • 執行 kubectl get akric ,您應該會看到 akri-opcua-monitoring
    • 如果探索到 OPC POS 伺服器並啟動 Pod,您可以藉由執行 kubectl get akrii 來查看實例,而且您可以執行 kubectl get akrii akri-opcua-monitoring-<ID> -o yaml 來進一步檢查。

將異常偵測 Web 應用程式部署為訊息代理程式的終端使用者

已為此端對端示範建立範例異常偵測 Web 應用程式。 它有一個 gRPC 存根,可呼叫訊息代理程式 gRPC 服務,並取得最新的溫度值。 然後,它會使用本機極端值因數策略來判斷此值是否為資料集的極端值。 資料集只是 CSV 檔案,其數位重複數次介於 70-80 之間;因此,此範圍以外的任何值都會被視為極端值。 Web 應用程式可作為記錄檔,其中顯示傳送值的 OPC UA 伺服器的所有溫度值和位址。 它會以紅色顯示異常值。 異常一律有 120 的值,因為函式在 OPC UA 伺服器中的設定方式 DoSimulation

  1. 部署異常偵測應用程式,並watch啟動應用程式的 Pod:

    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. 執行 Pod 之後,取得您的節點 IP 和服務埠號碼應用程式:

    Get-AKSEdgeNodeAddr
    
    kubectl get svc
    
  3. 瀏覽至 http://<NODE IP>:<SERVICE PORT NUM>/。 月臺載入需要幾秒鐘的時間,然後您應該會看到溫度值的記錄,每幾秒就會更新一次。 請注意這些值如何來自兩個不同的探索 URL,特別是兩部 OPC UA 伺服器各有一個。

    顯示瀏覽器中異常偵測應用程式的螢幕擷取畫面。

選擇性:OPC UA 伺服器和訊息代理程式的憑證

這是一個選擇性程式,可讓您使用 Akri 搭配憑證來新增安全性。 請遵循下列步驟來部署具有安全性的 OPC IDE 伺服器,並建立可用來驗證服務器和訊息代理程式的 Kubernetes 秘密。

建立具有安全性的 OPC UA 伺服器

  1. 移至Azure IoT Edge OPC SSD 範例的讀我檔案,然後選取 [部署至 Azure]。

  2. 選取 [編輯範本 ],然後流覽至第 172 行。 將整行取代為下列程式碼,以新增部署所需 OPC SQL 伺服器的必要旗標:

    "[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 段底下,在第三 properties 行 (167) 區段內新增下列程式碼, (與 imagecommandports ) 等層級相同:

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

    然後,在第二行 「properties」 (第 163 行) 區段內新增下列程式碼, (與 containers) 相同的層級:

    "volumes": [
                   {
                      "name": "filesharevolume",
                      "azureFile": {
                            "shareName": "acishare",
                            "storageAccountName": "<storageAccName>",
                            "storageAccountKey": "<storageAccKey>"
                      }
                   }
               ]
    
  4. 儲存範本,並填入專案和實例詳細資料。 針對 Number of Simulations ,指定 2 以執行兩部 OPC SQL 伺服器。

  5. 選取 [檢閱並建立],然後選取 [ 建立 ] 以在 Azure 上部署您的伺服器。

您現在已成功建立兩個 OPC UA HTTP 伺服器,每部伺服器都有一個快速的 HTTP 節點,其會產生具有下限 = 65上限 = 85速率為 1不帶正負號整數。

建立 X.509 v3 憑證

建立三個符合 OPC UA 標準的 X.509v3 憑證, (一個用於訊息代理程式,並為每個伺服器建立一個憑證) ,確保憑證包含 必要的元件,例如應用程式 URI。

憑證的需求:

  • 它們應該全都由通用憑證授權單位單位 (CA) 簽署,所有憑證的簽署演算法應該是 SHA256
  • 索引鍵大小也必須大於或等於 2048 位。
  • 伺服器憑證和 AkriBroker 憑證的 DNS 應該包含 (所建立 OPC UA 伺服器容器實例的 FQDN,請移至 執行 Akri 的步驟 3,以瞭解如何取得 FQDN) 。
  • OPC UA 伺服器憑證應該以憑證產生詞彙 (命名 OpcPlcCN=OpcPlc) 和 Akri 訊息代理程式憑證應該命名 AkriBroker 為 (CN=AkriBroker) (CA 名稱) 沒有需求。

有許多工具可用來為 OPC UA 產生適當的憑證,例如 OPC Foundation 的憑證產生器或 OpenSSL。 OPC Foundation 的憑證產生器可以是更方便的選項,而 OpenSSL 提供更多空間以供自訂。

如果您選擇使用 OPC Foundation 的憑證產生器,請遵循下列步驟來建置:

  1. 安裝 Perl

  2. 下載 .zip 檔案,或複製 OPC Foundation 的憑證產生器存放庫 , (Misc-Tools) 。

  3. build_certificate-generator.bat建議從 Visual Studio 開發人員命令提示字元 (Visual Studio 2022 執行) 。

  4. 從 Visual Studio 2022 建置 Opc.Ua.CertificateGenerator 方案。

  5. 檢查是否已 Opc.Ua.CertificateGenerator.exe 成功在 build/Debug/Opc.Ua.CertificateGenerator 目錄中建置。

  6. 使用下列範例命令來建立憑證。 如需其他選項 ,請參閱 Misc-Tools

    • Self-Signed CA:
    .\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -sn CN=<CA name e.g. MyCA> -ca true -pw <password>
    
    • OPC UA 伺服器憑證:
    .\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -an OpcPlc -ikf '.\private\MyCA [hash].pfx' -ikp <password>-dn <DNS separated by commas>
    
    • Akri 訊息代理程式憑證:
    .\Opc.Ua.CertificateGenerator.exe -cmd issue -sp . -an AkriBroker -ikf '.\private\MyCA [hash].pfx' -ikp <password>-dn <DNS separated by commas>
    
  7. .crl只有在您從產生器建立 CA 時,才使用 OpenSSL 建立 CA 的檔案 (,這會遺失 .crl 檔案) 。

如果您選擇使用 OpenSSL,以下是參考清單:

建立 opcua-broker-credentials Kubernetes 秘密

OPC UA 用戶端憑證會以掛接為磁片區的 Kubernetes 秘密的形式傳遞至 OPC UA 監視代理程式。

建立 Kubernetes 秘密,以預期的金鑰名稱投影每個憑證/crl/私密金鑰, (client_certificate 、、 client_keyca_certificateca_crl) 。 指定檔案路徑,使其指向上一節中建立的認證:

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

憑證會掛接至位於 /etc/opcua-certs/client-pki 的 mountPath 磁片 credentials 區,如OPC UA 設定 helm 範本所示。 此路徑是訊息代理程式預期會尋找憑證的位置。

將憑證的資料夾掛接至 ACI

請遵循這些指示 來建立 Azure 檔案共用。

建立 Azure 檔案共用和憑證之後,請如所述,將 CA 和 OPC UA 伺服器憑證上傳至檔案共用。

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

注意

因為我們在範本中新增了安全性旗標,這會導致在檔案共用中產生任意憑證。 您可以在檔案共用中刪除任何未識別的憑證, (資料夾路徑看起來應該與上圖完全相同) 。

遵循這些步驟以取得安全性之後,請按一下容器實例上的 [重新開機 ] 以更新它,並使用掛接的憑證執行。

執行 Akri 並部署 Web 應用程式

遵循上一節來執行 Akri 並探索您的伺服器,但現在在命令結尾新增一行 --set opcua.configuration.mountCertificates='true' 。 請務必將 取代 opcua.configuration.discoveryDetails.discoveryUrls 為從 Azure 入口網站找到的 URL:

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'

從這裡開始,您可以遵循將異常偵測 Web 應用程式部署為訊息代理程式的取用者一節,以查看您網頁上的 OPC URL 值。

清理

  1. 刪除異常偵測應用程式:

    kubectl delete -f https://raw.githubusercontent.com/project-akri/akri/main/deployment/samples/akri-anomaly-detection-app.yaml
    
  2. 從叢集卸載 Akri。

    helm delete akri
    
  3. 流覽至容器實例以刪除 OPC UA 伺服器部署,然後在Azure 入口網站中選取 [刪除]。

下一步

AKS Edge Essentials 概觀