Freigeben über


Konfigurieren der mehrschichtigen Azure IoT-Netzwerkverwaltung (Vorschau) in einem Cluster der Ebene 4

Azure IoT Layered Network Management (Vorschau) ist eine Komponente für Azure IoT Einsatz. Sie muss jedoch einzeln auf der obersten Netzwerkebene bereitgestellt werden, um „Azure IoT Einsatz“ auf der unteren Ebene zu unterstützen. Auf der obersten Ihrer Netzwerkebenen (in der Regel die Ebene 4 der ISA-95-Netzwerkarchitektur) verfügen der Cluster und der Layered Network Management-Dienst über direkten Internetzugriff. Nach Abschluss der Einrichtung ist der Layered Network Management-Dienst (Vorschau) bereit, um Netzwerkdatenverkehr von der untergeordneten Ebene zu empfangen und an Azure Arc weiterzuleiten.

Voraussetzungen

Die folgenden Mindestanforderungen müssen erfüllt sein, damit eine eigenständige Bereitstellung von Layered Network Management im System möglich ist.

Einrichten des Kubernetes-Clusters auf Ebene 4

Um nur Layered Network Management einzurichten, sind die Voraussetzungen einfacher als für eine Azure IoT Einsatz-Bereitstellung. Die in Vorbereiten Ihres Kubernetes-Clusters beschriebenen allgemeinen Anforderungen für Azure IoT Einsatz sind optional.

Die folgenden Schritte zum Einrichten von AKS Edge Essentials und des K3S Kubernetes-Clusters wurden von Microsoft überprüft.

Vorbereiten eines Ubuntu-Computers

  1. Ubuntu 22.04 LTS ist die empfohlene Version für den Hostcomputer.

  2. Installieren Sie Helm 3.8.0 oder höher.

  3. Installieren Sie Kubectl.

  4. Installieren Sie die Azure CLI. Sie können die Azure-Befehlszeilenschnittstelle direkt auf einem Computer der Ebene 4 oder auf einem anderen Entwicklungs- oder Jumpbox-Computer installieren, wenn Sie remote auf den Cluster der Ebene 3 zugreifen möchten. Wenn Sie remote auf den Kubernetes-Cluster zugreifen, um den Clusterhost sauber zu halten, führen Sie die kubectl- und az-Befehle für die restlichen Schritte in diesem Artikel auf dem Entwicklungscomputer aus.

    • Installieren Sie die Azure-Befehlszeilenschnittstelle. Führen Sie die Schritte in Installieren der Azure CLI unter Linux aus.

    • Installieren Sie connectedk8s und andere Erweiterungen.

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

Erstellen des K3S-Clusters

  1. Installieren Sie K3S mit dem folgenden Befehl:

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

    Weitere Informationen finden Sie in der Schnellstartanleitung zu K3s.

    Wichtig

    Stellen Sie sicher, dass Sie den --disable=traefik-Parameter verwenden, um treafik zu deaktivieren. Andernfalls haben Sie möglicherweise ein Problem, wenn Sie versuchen, öffentliche IP für den Layered Network Management-Dienst in späteren Schritten zuzuweisen.

  2. Kopieren Sie die Yaml-Datei für die K3s-Konfiguration 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
    

Arc-aktivieren des Clusters

  1. Melden Sie sich mit der Azure CLI an. Um später Berechtigungsprobleme zu vermeiden, ist es wichtig, dass die Anmeldung interaktiv über ein Browserfenster erfolgt:

    az login
    
  2. Legen Sie Umgebungsvariablen für die Setupschritte fest. Ersetzen Sie Werte in <> durch gültige Werte oder Namen Ihrer Wahl. CLUSTER_NAME und RESOURCE_GROUP werden basierend auf den von Ihnen bereitgestellten Namen erstellt. Informationen zum Auswählen von LOCATION finden Sie unter Unterstützte Regionen für „Azure IoT Einsatz“.

    # 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. Legen Sie den Azure-Abonnementkontext für alle Befehle fest:

    az account set -s $SUBSCRIPTION_ID
    
  4. Registrieren Sie die erforderlichen Ressourcenanbieter in Ihrem Abonnement:

    Hinweis

    Dieser Schritt muss nur einmal pro Abonnement durchgeführt werden. Zum Registrieren von Ressourcenanbietern benötigen Sie die Berechtigung zum Ausführen des /register/action-Vorgangs, welche in den Rollen „Mitwirkender“ und „Besitzer“ des Abonnements enthalten ist. Weitere Informationen finden Sie unter Azure-Ressourcenanbieter und -typen.

    az provider register -n "Microsoft.ExtendedLocation"
    az provider register -n "Microsoft.Kubernetes"
    az provider register -n "Microsoft.KubernetesConfiguration"
    
  5. Verwenden Sie den Befehl az group create, um in Ihrem Azure-Abonnement eine Ressourcengruppe zum Speichern aller Ressourcen zu erstellen:

    az group create --location $LOCATION --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID
    
  6. Verwenden Sie den Befehl az connectedk8s connect, um die Arc-Unterstützung Ihres Kubernetes-Clusters zu aktivieren und ihn in der Ressourcengruppe zu verwalten, die Sie im vorherigen Schritt erstellt haben:

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

Bereitstellen des Schichtnetzwerkverwaltungsdiensts im Cluster

Wenn Ihr Kubernetes-Cluster Arc-fähig ist, können Sie den Layered Network Management-Dienst im Cluster bereitstellen.

Installieren des Netzwerkverwaltungsoperators Layered Network Management

  1. Führen Sie den folgenden Befehl aus. Ersetzen Sie die Platzhalter <RESOURCE GROUP> und <CLUSTER NAME> durch Ihre Arc-Onboarding-Informationen aus einem früheren Schritt.

    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. Verwenden Sie den Befehl kubectl, um zu überprüfen, ob der Netzwerkverwaltungsoperator mit Ebenen ausgeführt wird.

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

Konfigurieren des Layered Network Management Service

Erstellen Sie die benutzerdefinierte Ressource Layered Network Management.

  1. Erstellen Sie eine lnm-cr.yaml Datei wie angegeben:

    • Für das Debuggen oder Experimentieren können Sie den Wert des Parameters loglevel zu debug ändern.
    • Weitere Details zu den Endpunkten finden Sie unter Azure IoT Einsatz-Endpunkte.
    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. Erstellen Sie die benutzerdefinierte Ressource, um eine Layered Network Management-Instanz zu erstellen.

    kubectl apply -f lnm-cr.yaml
    
  3. Anzeigen des Kubernetes-Diensts für das Layered Network Management:

    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
    

Hinzufügen der IPTables-Konfiguration für AKS Edge Essentials

Wichtig

Dieser Schritt gilt nur, wenn „Layered Network Management“ in einem AKS Edge Essentials-Cluster gehostet wird.

Die Layered Network Management-Bereitstellung erstellt einen Kubernetes-Dienst vom Typ LoadBalancer. Um sicherzustellen, dass der Dienst von außerhalb des Kubernetes-Clusters zugänglich ist, müssen Sie die zugrundeliegenden Windows-Hostports den entsprechenden Ports im Layered Network Management-Dienst zuordnen.

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

Nachdem diese Befehle erfolgreich ausgeführt wurden, wird der Datenverkehr an den Ports 443 und 10000 auf dem Windows-Host an den Kubernetes-Dienst weitergeleitet. Wenn Sie benutzerdefiniertes DNS für die Netzwerkebene auf untergeordneter Ebene konfigurieren, leiten Sie den Netzwerkdatenverkehr an die IP dieses Windows-Hosts und dann an den Layered Network Management-Dienst weiter, der darauf ausgeführt wird.