Partager via


Problèmes connus : Opérations Azure IoT (préversion)

Important

Opérations Azure IoT (préversion) – activé parc Azure Arc est actuellement en PRÉVERSION. Vous ne devez pas utiliser ce logiciel en préversion dans des environnements de production.

Vous devrez déployer une nouvelle installation d’Opérations Azure IoT lorsqu’une version en disponibilité générale sera publiée. Vous ne pourrez pas mettre à niveau une installation en préversion.

Pour connaître les conditions juridiques qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou plus généralement non encore en disponibilité générale, consultez l’Avenant aux conditions d’utilisation des préversions de Microsoft Azure.

Cet article liste les problèmes connus relatifs aux Opérations Azure IoT (préversion).

Problèmes de déploiement et de désinstallation

  • Vous devez utiliser la connexion interactive Azure CLI az login lorsque vous déployez Opérations Azure IoT. Si non, vous pouvez obtenir une erreur telle que ERREUR : AADSTS530003 : votre appareil doit être géré afin d’accéder à cette ressource.

  • Lorsque vous utilisez la commande az iot ops delete pour désinstaller Opérations Azure IoT, certaines ressources Akri personnalisées risquent de ne pas être supprimées du cluster. Ces instances Akri peuvent provoquer des problèmes si vous redéployez Opérations Azure IoT sur le même cluster. Vous devez supprimer manuellement toutes les ressources personnalisées des instances Akri du cluster avant de redéployer Opérations Azure IoT.

  • Si votre déploiement échoue avec l’erreur "code":"LinkedAuthorizationFailed", cela signifie que vous n’avez pas d’autorisations Microsoft.Authorization/roleAssignments/write sur le groupe de ressources qui contient votre cluster.

    Pour résoudre ce problème, demandez les autorisations requises ou ajustez les étapes de votre déploiement comme suit :

    • Si vous effectuez un déploiement avec un modèle Azure Resource Manager, définissez le paramètre deployResourceSyncRules sur false.
    • Si vous effectuez un déploiement avec Azure CLI, incluez l’indicateur --disable-rsync-rules avec la commande az iot ops init.
  • Désinstallation de K3S : lorsque vous désinstallez de K3S sur Ubuntu en utilisant le script /usr/local/bin/k3s-uninstall.sh, vous pouvez rencontrer un problème dans lequel le script reste bloqué sur le démontage du pod NFS. Une solution de contournement pour ce problème consiste à exécuter la commande suivante avant d’exécuter le script de désinstallation : sudo systemctl stop k3s.

Répartiteur MQTT

  • Vous ne pouvez accéder au déploiement par défaut qu’à l’aide du protocole Internet du cluster, du protocole TLS et d’un jeton de compte de service. Les clients en dehors du cluster ont besoin d’une configuration supplémentaire pour pouvoir se connecter.

  • Vous ne pouvez pas mettre à jour la ressource personnalisée broker après le déploiement initial. Vous ne pouvez pas apporter de modifications de configuration à la cardinalité, au profil de mémoire ni à la mémoire tampon de disque.

    Pour contourner ce problème, lors du déploiement d’Opérations Azure IoT avec la commande az iot ops init, vous pouvez inclure le paramètre --broker-config-file avec un fichier de configuration JSON pour l’Agent MQTT. Pour plus d’informations, consultez Configuration avancée de l’Agent MQTT et Configurer les paramètres principaux de l’Agent MQTT.

  • Vous ne pouvez pas configurer la taille d’une mémoire tampon sauvegardée sur disque, sauf si votre classe de stockage choisie prend en charge cette option.

  • Même si les diagnostics de l’Agent MQTT produisent une télémétrie sur sa propre rubrique, il est possible que vous receviez quand même des messages de l’auto-test lorsque vous vous abonnez à la rubrique #.

  • Certains clusters ayant des appels d’API Kubernetes lents peuvent entraîner des échecs de test Ping selftest : Status {Failed}. Probe failed: Ping: 1/2 de la commande az iot ops check en cours d’exécution.

  • Vous pouvez rencontrer une erreur dans les journaux des événements KafkaConnector telle que Invalid value: "mq-to-eventhub-connector-<token>--connectionstring": must be no more than 63 characters. Vérifiez que votre nom KafkaConnector comporte 5 caractères maximum.

  • Vous pouvez rencontrer des erreurs de délai d’expiration dans le connecteur Kafka et des journaux de connecteur Event Grid. Malgré cela, le connecteur continue de fonctionner et de transférer des messages.

  • Le déploiement peut échouer si les valeurs de cardinalité et de profil mémoire sont définies comme étant trop élevées pour le cluster. Pour résoudre ce problème, définissez le nombre de réplicas sur 1 et utilisez un profil de mémoire plus petit comme low.

Gestion du réseau en couches Azure IoT (préversion)

  • Si le service Gestion de réseau en couches n’obtient pas d’adresse IP lors de l’exécution de K3S sur un hôte Ubuntu, réinstallez K3S sans contrôleur d’entrée trafeik en utilisant l’option --disable=traefik.

    curl -sfL https://get.k3s.io | sh -s - --disable=traefik --write-kubeconfig-mode 644
    

    Pour plus d’informations, consultez Mise en réseau | K3.

  • Si les requêtes DNS ne sont pas résolues en l’adresse IP attendue lors de l’utilisation du service CoreDNS exécuté au niveau du réseau enfant, effectuez une mise à niveau vers Ubuntu 22.04 et réinstallez K3S.

Connecteur OPC UA

  • Tous les AssetEndpointProfiles du cluster doivent être configurés avec le même certificat d’authentification de transport, sinon le Connecteur OPC UA risque d’avoir un comportement aléatoire. Pour éviter ce problème lors de l’utilisation de l’authentification par transport, configurez tous les points de terminaison des ressources avec la même empreinte pour le certificat d’authentification par transport dans le portail Opérations Azure IoT (préversion).

  • Si vous déployez un AssetEndpointProfile dans le cluster et que le Connecteur OPC UA ne peut pas se connecter au point de terminaison configuré pendant la première tentative, le Connecteur OPC UA ne réessaie plus de se connecter.

    Pour contourner ce problème, commencez par corriger le problème de connexion. Ensuite, redémarrez tous les pods du cluster dont les noms commencent par « aio-opc-opc.tcp », ou supprimez AssetEndpointProfile et redéployez-le.

  • Si vous créez une ressource à l’aide de l’interface utilisateur web de l’expérience des opérations, la propriété d’objet des messages envoyés par la ressource est définie avec la valeur externalAssetId. Dans le cas présent, le subject est un GUID plutôt qu’un nom de ressource convivial.

  • Si votre agent tente de se connecter à un serveur non approuvé, il génère une erreur rejected to write to PKI. Vous pouvez également rencontrer cette erreur dans les ressources et les profils de point de terminaison des ressources.

    Pour contourner ce problème, ajoutez le certificat du serveur au magasin de certificats approuvés, comme décrit dans Configurer la liste des certificats approuvés.

    Vous pouvez aussi Configurer éventuellement votre AssetEndpointProfile sans approbation mutuelle établie. Cette solution de contournement ne doit pas être utilisée dans les environnements de production.

Simulateur OPC PLC

Si vous créez un point de terminaison de ressource pour le simulateur OPC PLC, mais que le simulateur OPC PLC n’envoie pas de données à l’Agent MQTT, exécutez la commande suivante afin de définir autoAcceptUntrustedServerCertificates=true pour le point de terminaison de ressource :

ENDPOINT_NAME=<name-of-you-endpoint-here>
kubectl patch AssetEndpointProfile $ENDPOINT_NAME \
-n azure-iot-operations \
--type=merge \
-p '{"spec":{"additionalConfiguration":"{\"applicationName\":\"'"$ENDPOINT_NAME"'\",\"security\":{\"autoAcceptUntrustedServerCertificates\":true}}"}}'

Attention

N’utilisez pas cette configuration dans des environnements de production ou de pré-production. En exposant votre cluster à Internet sans authentification appropriée, vous risquez de provoquer des accès non autorisés, voire de subir des attaques DDOS.

Vous pouvez patcher tous vos points de terminaison de ressource avec la commande suivante :

ENDPOINTS=$(kubectl get AssetEndpointProfile -n azure-iot-operations --no-headers -o custom-columns=":metadata.name")
for ENDPOINT_NAME in `echo "$ENDPOINTS"`; do \
kubectl patch AssetEndpointProfile $ENDPOINT_NAME \
   -n azure-iot-operations \
   --type=merge \
   -p '{"spec":{"additionalConfiguration":"{\"applicationName\":\"'"$ENDPOINT_NAME"'\",\"security\":{\"autoAcceptUntrustedServerCertificates\":true}}"}}'; \
done

Si le simulateur OPC PLC n’envoie pas de données à l’Agent MQTT une fois que vous avez créé une ressource, redémarrez le pod du simulateur OPC PLC. Le nom de pod ressemble à ceci : aio-opc-opc.tcp-1-f95d76c54-w9v9c. Pour redémarrer le pod, utilisez l’outil k9s pour le tuer ou exécutez la commande suivante :

kubectl delete pod aio-opc-opc.tcp-1-f95d76c54-w9v9c -n azure-iot-operations

Dataflows

  • L’envoi de données à ADX, ADLSv2 et Fabric OneLake n’est pas disponible dans Opérations Azure IoT version 0.6.x. La prise en charge de ces points de terminaison sera de retour dans une prochaine préversion.

  • Par défaut, les flux de données n’envoient pas les propriétés utilisateur du message MQTT aux destinations Kafka. Ces propriétés utilisateur incluent des valeurs, telles que subject, qui stockent le nom de la ressource envoyant le message. Pour inclure des propriétés utilisateur dans le message Kafka, mettez à jour la configuration DataflowEndpoint de façon à inclure : copyMqttProperties: enabled. Par exemple :

    apiVersion: connectivity.iotoperations.azure.com/v1beta1
    kind: DataflowEndpoint
    metadata:
      name: kafka-target
      namespace: azure-iot-operations
    spec:
      endpointType: kafkaSettings
      kafkaSettings:
        host: "<NAMESPACE>.servicebus.windows.net:9093"
        batching:
          latencyMs: 0
          maxMessages: 100
        tls:
          mode: Enabled
        copyMqttProperties: enabled
      authentication:
        method: SystemAssignedManagedIdentity
        systemAssignedManagedIdentitySettings:
          audience: https://<NAMESPACE>.servicebus.windows.net
    
  • Actuellement, vous ne pouvez pas suivre une valeur à l’aide du dernier indicateur de valeur connu, ?$last, dans votre configuration de flux de données. Tant qu’un correctif de bogue n’est pas en place, la solution de contournement consiste à déployer Opérations Azure IoT version 0.5.1 et d’utiliser le processeur de données.

  • La mise à l’échelle des profils de flux de données avec instanceCount est limitée à 1 pour Opérations Azure IoT version 0.6.x.

  • La configuration avec Azure Resource Manager n’est pas prise en charge. Configurez plutôt des flux de données à l’aide de fichiers kubectl et YAML, tel qu’indiqué.

Services Akri

Lorsque les services Akri génèrent un point de terminaison de ressource pour une ressource découverte, la configuration peut contenir un paramètre non valide qui empêche la ressource de se connecter à l’Agent MQTT. Pour résoudre ce problème, modifiez la configuration AssetEndpointProfile et supprimez le paramètre "securityMode":"none" de la propriété additionalConfiguration. Par exemple, la configuration du point de terminaison de ressource opc-ua-broker-opcplc-000000-50000 généré dans les guides de démarrage rapide devrait ressembler à l’exemple suivant :

apiVersion: deviceregistry.microsoft.com/v1beta1
kind: AssetEndpointProfile
metadata:
  creationTimestamp: "2024-08-05T11:41:21Z"
  generation: 2
  name: opc-ua-broker-opcplc-000000-50000
  namespace: azure-iot-operations
  resourceVersion: "233018"
  uid: f9cf479f-7a77-49b5-af88-18d509e9cdb0
spec:
  additionalConfiguration: '{"applicationName":"opc-ua-broker-opcplc-000000-50000","keepAliveMilliseconds":10000,"defaults":{"publishingIntervalMilliseconds":1000,"queueSize":1,"samplingIntervalMilliseconds":1000},"subscription":{"maxItems":1000,"lifetimeMilliseconds":360000},"security":{"autoAcceptUntrustedServerCertificates":true,"securityPolicy":"http://opcfoundation.org/UA/SecurityPolicy#None"},"session":{"timeoutMilliseconds":60000,"keepAliveIntervalMilliseconds":5000,"reconnectPeriodMilliseconds":500,"reconnectExponentialBackOffMilliseconds":10000}}'
  targetAddress: "\topc.tcp://opcplc-000000:50000"
  transportAuthentication:
    ownCertificates: []
  userAuthentication:
    mode: Anonymous
  uuid: opc-ua-broker-opcplc-000000-50000

Un problème sporadique risque d’entraîner le redémarrage du pod aio-opc-asset-discovery avec l’erreur suivante dans les journaux : opcua@311 exception="System.IO.IOException: Failed to bind to address http://unix:/var/lib/akri/opcua-asset.sock: address already in use..

Pour contourner ce problème, procédez comme suit pour mettre à jour la spécification DaemonSet :

  1. Recherchez la ressource personnalisée cible fournie par orchestration.iotoperations.azure.com avec un nom qui se termine par -ops-init-target :

    kubectl get targets -n azure-iot-operations
    
  2. Modifiez la configuration cible et recherchez le paramètre spec.components.aio-opc-asset-discovery.properties.resource.spec.template.spec.containers.env. Par exemple :

    kubectl edit target solid-zebra-97r6jr7rw43vqv-ops-init-target -n azure-iot-operations
    
  3. Ajoutez les variables d’environnement suivantes à la section configuration spec.components.aio-opc-asset-discovery.properties.resource.spec.template.spec.containers.env :

    - name: ASPNETCORE_URLS 
      value: http://+8443 
    - name: POD_IP 
      valueFrom: 
        fieldRef: 
          fieldPath: "status.podIP" 
    
  4. Enregistrez vos modifications. La spécification finale ressemble à l’exemple suivant :

    apiVersion: orchestrator.iotoperations.azure.com/v1 
    kind: Target 
    metadata: 
      name: <cluster-name>-target 
      namespace: azure-iot-operations 
    spec: 
      displayName: <cluster-name>-target 
      scope: azure-iot-operations 
      topologies: 
      ...
      version: 1.0.0.0 
      components: 
        ... 
        - name: aio-opc-asset-discovery 
          type: yaml.k8s 
          properties: 
            resource: 
              apiVersion: apps/v1 
              kind: DaemonSet 
              metadata: 
                labels: 
                  app.kubernetes.io/part-of: aio 
                name: aio-opc-asset-discovery 
              spec: 
                selector: 
                  matchLabels: 
                    name: aio-opc-asset-discovery 
                template: 
                  metadata: 
                    labels: 
                      app.kubernetes.io/part-of: aio 
                      name: aio-opc-asset-discovery 
                  spec: 
                    containers: 
                      - env: 
                          - name: ASPNETCORE_URLS 
                            value: http://+8443 
                          - name: POD_IP 
                            valueFrom: 
                              fieldRef: 
                                fieldPath: status.podIP 
                          - name: DISCOVERY_HANDLERS_DIRECTORY 
                            value: /var/lib/akri 
                          - name: AKRI_AGENT_REGISTRATION 
                            value: 'true' 
                        image: >- 
                          edgeappmodel.azurecr.io/opcuabroker/discovery-handler:0.4.0-preview.3 
                        imagePullPolicy: Always 
                        name: aio-opc-asset-discovery 
                        ports: ... 
                        resources: ...
                        volumeMounts: ...
                    volumes: ...
    

Interface utilisateur web de l’expérience des opérations

Si vous souhaitez vous connecter à l’expérience des opérations, vous devez avoir un compte Microsoft Entra ID avec au moins des autorisations de contributeur pour le groupe de ressources contenant votre instance Kubernetes – Azure Arc. Vous ne pouvez pas vous connecter avec un compte Microsoft (MSA). Pour créer un compte dans votre tenant Azure :

  1. Connectez-vous au Portail Azure avec le même tenant et nom d’utilisateur utilisé pour déployer Opérations Azure IoT.
  2. Dans le portail Azure, accédez à la section Microsoft Entra ID, sélectionnez Utilisateurs > + Nouvel utilisateur > Créer un utilisateur. Créez un utilisateur et notez le mot de passe. Vous en aurez besoin plus tard pour vous connecter.
  3. Dans le portail Azure, accédez au groupe de ressources qui contient votre instance Kubernetes – Azure Arc. Sur la page Contrôle d’accès (IAM), sélectionnez + Ajouter > Ajouter une attribution de rôle.
  4. Sur la page Ajouter une attribution de rôle, sélectionnez Rôles Administrateur privilégiés. Sélectionnez ensuite Contributeur, puis Suivant.
  5. Sur la page Membres, ajoutez votre nouvel utilisateur au rôle.
  6. Sélectionnez Passer en revue et attribuer pour terminer la configuration du nouvel utilisateur.

Vous pouvez maintenant utiliser le nouveau compte d’utilisateur pour vous connecter au portail Opérations Azure IoT.