Condividi tramite


Configurare Gestione rete a più livelli di Azure IoT (anteprima) nel cluster di livello 4

Azure IoT Layered Network Management (anteprima) è un componente per supportare le operazioni di Azure IoT. Tuttavia, deve essere distribuito singolarmente al livello di rete superiore per supportare le operazioni IoT di Azure nel livello inferiore. Nel livello superiore dei livelli di rete, in genere il livello 4 dell'architettura di rete ISA-95, il cluster e il servizio Gestione di rete su più livelli hanno accesso diretto a Internet. Al termine dell'installazione, il servizio Gestione rete a più livelli (anteprima) è pronto per ricevere il traffico di rete dal livello figlio e lo inoltra ad Azure Arc.

Prerequisiti

Per distribuire il servizio Gestione di rete su più livelli nel sistema, è necessario soddisfare i requisiti minimi seguenti.

Configurare il cluster Kubernetes nel livello 4

Per configurare solo Gestione di rete su più livelli, i prerequisiti sono più semplici rispetto a una distribuzione di Operazioni di Azure IoT. È facoltativo soddisfare i requisiti generali per Operazioni di Azure IoT in Preparare il cluster Kubernetes.

I passaggi seguenti per la configurazione di AKS Edge Essentials e del cluster K3S di Kubernetes sono verificati da Microsoft.

Preparare un computer Ubuntu

  1. Ubuntu 22.04 LTS è la versione consigliata per il computer host.

  2. Installare Helm 3.8.0 o versione successiva.

  3. Installare Kubectl.

  4. Installare l'interfaccia della riga di comando di Azure. È possibile installare l'interfaccia della riga di comando di Azure direttamente nel computer di livello 4 o in un altro computer sviluppatore o jumpbox se si prevede di accedere al cluster di livello 3 in modalità remota. Se si sceglie di accedere al cluster Kubernetes in remoto per mantenere pulito l'host del cluster, eseguire i comandi correlati kubectl e az" dal computer per sviluppatori per i rimanenti passaggi descritti in questo articolo.

Creare il cluster K3S

  1. Installare K3S con il comando seguente:

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

    Per altri dettagli, vedere la guida introduttiva di K3s.

    Importante

    Assicurarsi di usare il --disable=traefik parametro per disabilitare traefik. In caso contrario, è possibile che si verifichi un problema quando si tenta di allocare un indirizzo IP pubblico per il servizio Gestione di rete su più livelli nei passaggi successivi.

  2. Copiare il file yaml di configurazione K3s in .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
    

Abilitare ARC per il cluster

  1. Accedere tramite l'interfaccia della riga di comando di Azure. Per evitare problemi di autorizzazione in un secondo momento, è importante che si acceda modo interattivo usando una finestra del browser:

    az login
    
  2. Impostare le variabili di ambiente per la procedura di installazione. Sostituire i valori in <> con valori o nomi validi di scelta. RESOURCE_GROUP E CLUSTER_NAME vengono creati in base ai nomi specificati. Per la scelta LOCATIONdi , vedere Le aree supportate per le operazioni IoT di Azure.

    # 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. Impostare il contesto della sottoscrizione di Azure per tutti i comandi:

    az account set -s $SUBSCRIPTION_ID
    
  4. Registrare i provider di risorse necessari nella sottoscrizione:

    Nota

    Questo passaggio deve essere eseguito una volta sola per ogni sottoscrizione. Per registrare i provider di risorse, è necessaria l'autorizzazione per eseguire l'operazione /register/action, inclusa nei ruoli Collaboratore e Proprietario della sottoscrizione. Per altre informazioni, vedere Provider e tipi di risorse di Azure.

    az provider register -n "Microsoft.ExtendedLocation"
    az provider register -n "Microsoft.Kubernetes"
    az provider register -n "Microsoft.KubernetesConfiguration"
    
  5. Usare il comando az group create per creare un gruppo di risorse nella sottoscrizione di Azure in modo da archiviare tutte le risorse:

    az group create --location $LOCATION --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID
    
  6. Usare il comando az connectedk8s connect per abilitare il cluster Kubernetes per Arc e gestirlo nel gruppo di risorse creato al passaggio precedente:

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

Distribuire un servizio di gestione di rete a più livelli nel cluster

Dopo aver abilitato il cluster Kubernetes per Arc, è possibile distribuire il servizio Gestione di rete su più livelli nel cluster.

Installare l'operatore Gestione rete a più livelli

  1. Esegui il comando seguente: Sostituire i segnaposto <RESOURCE GROUP> e <CLUSTER NAME> con le informazioni sull’onboarding di Arc fornite in un passaggio precedente.

    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. Usare il comando kubectl per verificare che l'operatore di Gestione di rete su più livelli sia in esecuzione.

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

Configurare il servizio di gestione della rete a più livelli

Creare la risorsa personalizzata di Gestione di rete su più livelli.

  1. Creare un lnm-cr.yaml file come specificato:

    • Per il debug o la sperimentazione, è possibile modificare il valore del parametro loglevel in debug.
    • Per altri dettagli sugli endpoint, vedere Endpoint delle operazioni IoT di Azure.
    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. Crea la risorsa personalizzata per generare un'istanza di Gestione di rete su più livelli.

    kubectl apply -f lnm-cr.yaml
    
  3. Visualizzare il servizio Gestione di rete su più livelli di Kubernetes:

    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
    

Aggiungere la configurazione di iptables per Azure Kubernetes Edge Essentials

Importante

Questo passaggio è applicabile solo quando si ospita la gestione di rete a più livelli in un cluster Edge Essentials del servizio Azure Kubernetes.

La distribuzione di Gestione di rete su più livelli crea un servizio Kubernetes di tipo LoadBalancer. Per assicurarsi che il servizio sia accessibile dall'esterno del cluster Kubernetes, è necessario eseguire il mapping delle porte dell'host Windows sottostante con le porte appropriate del servizio Gestione di rete su più livelli.

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

Dopo aver eseguito questi comandi correttamente, il traffico ricevuto sulle porte 443 e 10000 dell'host Windows viene instradato al servizio Kubernetes. Quando si configura un DNS personalizzato per il livello di rete figlio, si indirizza il traffico di rete verso l'IP di questo host Windows e quindi al servizio di Gestione di rete su più livelli in esecuzione su di esso.