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.
- Categoria di cluster connessi ad Arc e GitOps - di AKS Edge Essentials in Requisiti e matrice di supporto di AKS Edge Essentials
- Requisiti di sistema Kubernetes con abilitazione di Azure Arc - del cluster Kubernetes K3S
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
Ubuntu 22.04 LTS è la versione consigliata per il computer host.
Installare Helm 3.8.0 o versione successiva.
Installare Kubectl.
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.
Installare l'interfaccia da riga di comando di Azure. Seguire la procedura descritta in Installare l'interfaccia della riga di comando di Azure in Linux.
Installare connectedk8s e altre estensioni.
az extension add --name connectedk8s az extension add --name k8s-extension
Creare il cluster K3S
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.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
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
Impostare le variabili di ambiente per la procedura di installazione. Sostituire i valori in
<>
con valori o nomi validi di scelta.RESOURCE_GROUP
ECLUSTER_NAME
vengono creati in base ai nomi specificati. Per la sceltaLOCATION
di , 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>"
Impostare il contesto della sottoscrizione di Azure per tutti i comandi:
az account set -s $SUBSCRIPTION_ID
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"
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
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
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
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.
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
Crea la risorsa personalizzata per generare un'istanza di Gestione di rete su più livelli.
kubectl apply -f lnm-cr.yaml
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.