Partager via


Configurer Gestion du réseau en couches Azure IoT (préversion) sur un cluster de niveau 4

La préversion de la gestion du réseau en couches Azure IoT est un composant qui prend en charge la (préversion) des Opérations Azure IoT. Cependant, il doit être déployé individuellement dans la couche réseau supérieure pour prendre en charge les opérations Azure IoT dans la couche inférieure. Dans le niveau supérieur de vos couches réseau (généralement au niveau 4 de l’architecture réseau ISA-95), le service de gestion de réseau en couches et de cluster dispose d’un accès Internet direct. Une fois l’installation terminée, le service de gestion réseau en couches (préversion) est prêt à recevoir le trafic réseau de la couche enfant et à le transférer vers Azure Arc.

Prérequis

Les exigences minimales suivantes doivent être respectées pour déployer individuellement la gestion de réseau en couches sur le système.

Configurer un cluster Kubernetes au niveau 4

Pour configurer uniquement la gestion de réseau en couches, les conditions préalables sont plus simples que pour un déploiement d’Azure IoT Operations. Il est facultatif de répondre aux exigences générales relatives aux opérations Azure IoT dans Préparer votre cluster Kubernetes.

Les étapes suivantes pour configurer AKS Edge Essentials et le cluster Kubernetes K3S sont vérifiées par Microsoft.

Préparer une machine Ubuntu

  1. Ubuntu 22.04 LTS est la version recommandée pour l’ordinateur hôte.

  2. Installez Helm 3.8.0 ou version ultérieure.

  3. Installez Kubectl.

  4. Installez Azure CLI. Vous pouvez installer Azure CLI directement sur la machine de niveau 4 ou sur un autre ordinateur de développement ou jumpbox si vous envisagez d’accéder au cluster de niveau 3 à distance. Si vous choisissez d’accéder au cluster Kubernetes à distance pour nettoyer l’hôte du cluster, vous exécutez les commandes associées kubectl et az » à partir de l’ordinateur de développement pour le reste des étapes décrites dans cet article.

    • Installez Azure CLI. Suivez les étapes de l’installation d’Azure CLI sur Linux.

    • Installez connectedk8s et d’autres extensions.

      az extension add --name connectedk8s
      az extension add --name k8s-extension
      

Créer le cluster K3S

  1. Installez K3S avec la commande suivante :

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

    Pour plus d’informations, reportez-vous au Guide de démarrage rapide K3s.

    Important

    Veillez à utiliser le paramètre --disable=traefik pour désactiver Traefik. Sinon, vous pouvez avoir un problème lorsque vous essayez d’allouer une adresse IP publique pour le service de gestion réseau en couches dans les étapes ultérieures.

  2. Copiez le fichier yaml de configuration K3s dans .kube/config.

    mkdir ~/.kube
    cp ~/.kube/config ~/.kube/config.back
    sudo KUBECONFIG=~/.kube/config:/etc/rancher/k3s/k3s.yaml kubectl config view --flatten > ~/.kube/merged
    mv ~/.kube/merged ~/.kube/config
    chmod  0600 ~/.kube/config
    export KUBECONFIG=~/.kube/config
    #switch to k3s context
    kubectl config use-context default
    

Activer le cluster par Arc

  1. Se connecter avec Azure CLI. Pour éviter les problèmes d’autorisation ultérieurement, il est important que vous vous connectiez de manière interactive à l’aide d’une fenêtre de navigateur :

    az login
    
  2. Définissez des variables d’environnement pour les étapes de configuration. Remplacez les valeurs dans <> par des valeurs ou des noms valides de votre choix. CLUSTER_NAME et RESOURCE_GROUP sont créés en fonction des noms que vous fournissez. Reportez-vous à Régions prises en charge par Opérations Azure IoT pour choisir le LOCATION.

    # Id of the subscription where your resource group and Arc-enabled cluster will be created
    $SUBSCRIPTION_ID = "<subscription-id>"
    # Azure region where the created resource group will be located
    $LOCATION = "<region>"
    # Name of a new resource group to create which will hold the Arc-enabled cluster and Azure IoT Operations resources
    $RESOURCE_GROUP = "<resource-group-name>"
    # Name of the Arc-enabled cluster to create in your resource group
    $CLUSTER_NAME = "<cluster-name>"
    
  3. Définissez le contexte d’abonnement Azure pour toutes les commandes :

    az account set -s $SUBSCRIPTION_ID
    
  4. Inscrivez les fournisseurs de ressources demandés dans votre abonnement :

    Remarque

    Cette étape doit être exécutée une seule fois par abonnement. Pour inscrire des fournisseurs de ressources, vous devez disposer de l’autorisation d’effectuer l’opération /register/action qui est incluse dans les rôles Contributeur et Propriétaire de l’abonnement. Pour plus d’informations, consultez Fournisseurs et types de ressources Azure.

    az provider register -n "Microsoft.ExtendedLocation"
    az provider register -n "Microsoft.Kubernetes"
    az provider register -n "Microsoft.KubernetesConfiguration"
    
  5. Utilisez la commande az group create pour créer un groupe de ressources dans votre abonnement Azure pour stocker toutes les ressources :

    az group create --location $LOCATION --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID
    
  6. Utilisez la commande az connectedk8s connect pour activer votre cluster Kubernetes avec Arc et le gérer dans le groupe de ressources que vous avez créé durant l’étape précédente :

    az connectedk8s connect -n $CLUSTER_NAME -l $LOCATION -g $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID
    

Déployer le service de gestion réseau en couches sur le cluster

Une fois que votre cluster Kubernetes est compatible avec Arc, vous pouvez déployer le service Layered Network Management sur le cluster.

Installer l’opérateur de gestion réseau en couches

  1. Exécutez la commande suivante : Remplacez les espaces réservés <RESOURCE GROUP> et <CLUSTER NAME> par vos informations d’intégration Arc d’une étape précédente.

    az login
    
    az k8s-extension create --resource-group <RESOURCE GROUP> --name kind-lnm-extension --cluster-type connectedClusters --cluster-name <CLUSTER NAME> --auto-upgrade false --extension-type Microsoft.IoTOperations.LayeredNetworkManagement --version 0.1.0-preview --release-train preview
    
  2. Utilisez la commande kubectl pour vérifier que l’opérateur de gestion réseau en couches est en cours d’exécution.

    kubectl get pods
    
    NAME                                   READY   STATUS    RESTARTS   AGE
    azedge-lnm-operator-598cc495c-5428j   1/1     Running   0          28h
    

Configurer le service de gestion réseau en couches

Créez la ressource personnalisée de gestion du réseau en couches.

  1. Créez un fichier lnm-cr.yaml comme indiqué :

    apiVersion: layerednetworkmgmt.iotoperations.azure.com/v1beta1
    kind: Lnm
    metadata:
      name: level4
      namespace: default
    spec:
      image:
        pullPolicy: IfNotPresent
        repository: mcr.microsoft.com/oss/envoyproxy/envoy-distroless
        tag: v1.27.0
      replicas: 1
      logLevel: "debug"
      openTelemetryMetricsCollectorAddr: "http://aio-otel-collector.azure-iot-operations.svc.cluster.local:4317"
      level: 4
      allowList:
        enableArcDomains: true
        domains:
        - destinationUrl: "management.azure.com"
          destinationType: external
        - destinationUrl: "*.dp.kubernetesconfiguration.azure.com"
          destinationType: external
        - destinationUrl: "login.microsoftonline.com"
          destinationType: external
        - destinationUrl: "*.login.microsoft.com"
          destinationType: external
        - destinationUrl: "login.windows.net"
          destinationType: external
        - destinationUrl: "mcr.microsoft.com"
          destinationType: external
        - destinationUrl: "*.data.mcr.microsoft.com"
          destinationType: external
        - destinationUrl: "gbl.his.arc.azure.com"
          destinationType: external
        - destinationUrl: "*.his.arc.azure.com"
          destinationType: external
        - destinationUrl: "k8connecthelm.azureedge.net"
          destinationType: external
        - destinationUrl: "guestnotificationservice.azure.com"
          destinationType: external
        - destinationUrl: "*.guestnotificationservice.azure.com"
          destinationType: external
        - destinationUrl: "sts.windows.net"
          destinationType: external
        - destinationUrl: "k8sconnectcsp.azureedge.net"
          destinationType: external
        - destinationUrl: "*.servicebus.windows.net"
          destinationType: external
        - destinationUrl: "graph.microsoft.com"
          destinationType: external
        - destinationUrl: "*.arc.azure.net"
          destinationType: external
        - destinationUrl: "*.obo.arc.azure.com"
          destinationType: external
        - destinationUrl: "linuxgeneva-microsoft.azurecr.io"
          destinationType: external
        - destinationUrl: "graph.windows.net"
          destinationType: external
        - destinationUrl: "*.azurecr.io"
          destinationType: external
        - destinationUrl: "*.blob.core.windows.net"
          destinationType: external
        - destinationUrl: "*.vault.azure.net"
          destinationType: external
        - destinationUrl: "*.blob.storage.azure.net"
          destinationType: external
        sourceIpRange:
        - addressPrefix: "0.0.0.0"
          prefixLen: 0
    
  2. Créez la ressource personnalisée pour créer une instance de gestion réseau en couches.

    kubectl apply -f lnm-cr.yaml
    
  3. Affichez le service Kubernetes de gestion réseau en couches :

    kubectl get services
    
    NAME           TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                                      AGE
    lnm-level-4   LoadBalancer   10.43.91.54   192.168.0.4   80:30530/TCP,443:31117/TCP,10000:31914/TCP   95s
    

Ajouter une configuration iptables pour AKS Edge Essentials

Important

Cette étape s’applique uniquement lors de l’hébergement de la gestion du réseau en couches dans un cluster AKS Edge Essentials.

Le déploiement de gestion réseau en couches crée un service Kubernetes de type LoadBalancer. Pour vous assurer que le service est accessible en dehors du cluster Kubernetes, vous devez mapper les ports de l’hôte Windows sous-jacents aux ports appropriés au niveau du service de gestion réseau en couches.

netsh interface portproxy add v4tov4 listenport=443 listenaddress=0.0.0.0 connectport=443 connectaddress=192.168.0.4
netsh interface portproxy add v4tov4 listenport=10000 listenaddress=0.0.0.0 connectport=10000 connectaddress=192.168.0.4

Une fois ces commandes exécutées, le trafic reçu sur les ports 443 et 10000 sur l’hôte Windows est acheminé vers le service Kubernetes. Lors de la configuration du DNS personnalisé pour la couche réseau au niveau enfant, vous dirigez le trafic réseau vers l’adresse IP de cet hôte Windows, puis vers le service de gestion réseau en couches s’exécutant sur celui-ci.