Udostępnij za pośrednictwem


Konfigurowanie usługi Azure IoT Layered Network Management (wersja zapoznawcza) na poziomie 4 klastra

Azure IoT Layered Network Management (wersja zapoznawcza) to składnik do obsługi operacji usługi Azure IoT. Należy jednak wdrożyć ją indywidualnie w górnej warstwie sieci w celu obsługi operacji usługi Azure IoT w niższej warstwie. Na najwyższym poziomie warstw sieci (zazwyczaj poziom 4 architektury sieci ISA-95) klaster i usługa zarządzania siecią warstwową mają bezpośredni dostęp do Internetu. Po zakończeniu instalacji usługa Layered Network Management (wersja zapoznawcza) jest gotowa do odbierania ruchu sieciowego z warstwy podrzędnej i przekazuje ją do usługi Azure Arc.

Wymagania wstępne

Spełnij następujące minimalne wymagania dotyczące wdrażania zarządzania siecią warstwową indywidualnie w systemie.

Konfigurowanie klastra Kubernetes na poziomie 4

Aby skonfigurować tylko zarządzanie siecią warstwową, wymagania wstępne są prostsze niż wdrożenie operacji usługi Azure IoT. Opcjonalne jest spełnienie ogólnych wymagań dotyczących operacji usługi Azure IoT w temacie Przygotowywanie klastra Kubernetes.

Poniższe kroki konfigurowania klastra Kubernetes usługi AKS Edge Essentials i K3S są weryfikowane przez firmę Microsoft.

Przygotowywanie maszyny z systemem Ubuntu

  1. Ubuntu 22.04 LTS jest zalecaną wersją dla maszyny hosta.

  2. Zainstaluj program Helm 3.8.0 lub nowszy.

  3. Zainstaluj narzędzie Kubectl.

  4. Zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli planujesz zdalnie uzyskać dostęp do klastra poziomu 3, możesz zainstalować interfejs wiersza polecenia platformy Azure bezpośrednio na maszynie z poziomem 4 lub na innej maszynie dewelopera lub serwera przesiadkowego . Jeśli zdecydujesz się uzyskać zdalny dostęp do klastra Kubernetes w celu zachowania czystego hosta klastra, uruchomisz polecenia powiązane z narzędziem kubectl i az" z maszyny deweloperów , aby wykonać pozostałe kroki opisane w tym artykule.

Tworzenie klastra K3S

  1. Zainstaluj usługę K3S przy użyciu następującego polecenia:

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

    Aby uzyskać więcej szczegółów, zapoznaj się z przewodnikiem Szybki start dla języka K3s.

    Ważne

    Pamiętaj, aby użyć parametru --disable=traefik , aby wyłączyć treafik. W przeciwnym razie może wystąpić problem podczas próby przydzielenia publicznego adresu IP dla usługi Zarządzania siecią warstwową w kolejnych krokach.

  2. Skopiuj plik yaml konfiguracji K3s do .kube/configpliku .

    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
    

Włączanie klastra w usłudze Arc

  1. Zaloguj się przy użyciu interfejsu wiersza polecenia platformy Azure. Aby uniknąć problemów z uprawnieniami później, ważne jest, aby zalogować się interaktywnie przy użyciu okna przeglądarki:

    az login
    
  2. Ustaw zmienne środowiskowe dla kroków konfiguracji. Zastąp wartości <> prawidłowymi wartościami lub wybranymi nazwami. Element CLUSTER_NAME i RESOURCE_GROUP są tworzone na podstawie nazw, które podajesz. Zapoznaj się z regionami obsługiwanymi przez operacje usługi Azure IoT, aby wybrać element 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. Ustaw kontekst subskrypcji platformy Azure dla wszystkich poleceń:

    az account set -s $SUBSCRIPTION_ID
    
  4. Zarejestruj wymaganych dostawców zasobów w ramach subskrypcji:

    Uwaga

    Ten krok musi być uruchamiany tylko raz na subskrypcję. Aby zarejestrować dostawców zasobów, musisz mieć uprawnienia do wykonania /register/action operacji, która jest uwzględniona w rolach Współautor subskrypcji i Właściciel. Aby uzyskać więcej informacji, zobacz Dostawcy zasobów i typy platformy Azure.

    az provider register -n "Microsoft.ExtendedLocation"
    az provider register -n "Microsoft.Kubernetes"
    az provider register -n "Microsoft.KubernetesConfiguration"
    
  5. Użyj polecenia az group create, aby utworzyć grupę zasobów w ramach subskrypcji platformy Azure w celu przechowywania wszystkich zasobów:

    az group create --location $LOCATION --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID
    
  6. Użyj polecenia az connectedk8s connect z obsługą usługi Arc klastra Kubernetes i zarządzaj nim w grupie zasobów utworzonej w poprzednim kroku:

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

Wdrażanie usługi zarządzania siecią warstwową w klastrze

Gdy klaster Kubernetes jest włączony w usłudze Arc, możesz wdrożyć usługę Zarządzanie siecią warstwową w klastrze.

Instalowanie operatora zarządzania siecią warstwową

  1. Uruchom następujące polecenie. Zastąp symbole <RESOURCE GROUP> zastępcze i <CLUSTER NAME> informacjami o dołączaniu do usługi Arc z wcześniejszego kroku.

    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. Użyj polecenia kubectl, aby sprawdzić, czy operator zarządzania siecią warstwową jest uruchomiony.

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

Konfigurowanie usługi zarządzania siecią warstwową

Utwórz zasób niestandardowy Zarządzanie siecią warstwową.

  1. Utwórz plik zgodnie z lnm-cr.yaml określonymi:

    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: "*.arc.azure.net"
          destinationType: external
        - destinationUrl: "*.data.mcr.microsoft.com"
          destinationType: external
        - destinationUrl: "*.dp.kubernetesconfiguration.azure.com"
          destinationType: external
        - destinationUrl: "*.guestnotificationservice.azure.com"
          destinationType: external
        - destinationUrl: "*.his.arc.azure.com"
          destinationType: external
        - destinationUrl: "*.login.microsoft.com"
          destinationType: external
        - destinationUrl: "*.login.microsoftonline.com"
          destinationType: external
        - destinationUrl: "*.obo.arc.azure.com"
          destinationType: external
        - destinationUrl: "*.servicebus.windows.net"
          destinationType: external
        - destinationUrl: "graph.microsoft.com"
          destinationType: external
        - destinationUrl: "login.windows.net"
          destinationType: external
        - destinationUrl: "management.azure.com"
          destinationType: external
        - destinationUrl: "mcr.microsoft.com"
          destinationType: external
        - destinationUrl: "sts.windows.net"
          destinationType: external
        - destinationUrl: "*.ods.opinsights.azure.com"
          destinationType: external
        - destinationUrl: "graph.windows.net"
          destinationType: external
        - destinationUrl: "msit-onelake.pbidedicated.windows.net"
          destinationType: external
        - destinationUrl: "*.azurecr.io"
          destinationType: external
        - destinationUrl: "*.azureedge.net"
          destinationType: external
        - destinationUrl: "*.blob.core.windows.net"
          destinationType: external
        - destinationUrl: "*.prod.hot.ingestion.msftcloudes.com"
          destinationType: external
        - destinationUrl: "*.prod.microsoftmetrics.com"
          destinationType: external
        - destinationUrl: "adhs.events.data.microsoft.com"
          destinationType: external
        - destinationUrl: "dc.services.visualstudio.com"
          destinationType: external
        - destinationUrl: "go.microsoft.com"
          destinationType: external
        - destinationUrl: "packages.microsoft.com"
          destinationType: external
        - destinationUrl: "www.powershellgallery.com"
          destinationType: external
        - destinationUrl: "*.gw.arc.azure.com"
          destinationType: external
        - destinationUrl: "*.gcs.prod.monitoring.core.windows.net"
          destinationType: external
        - destinationUrl: "*.prod.warm.ingest.monitor.core.windows.net"
          destinationType: external
        - destinationUrl: "*.prod.hot.ingest.monitor.core.windows.net"
          destinationType: external
        - destinationUrl: "azure.archive.ubuntu.com"
          destinationType: external
        - destinationUrl: "crl.microsoft.com"
          destinationType: external
        - destinationUrl: "*.table.core.windows.net"
          destinationType: external
        - destinationUrl: "*.blob.storage.azure.net"
          destinationType: external
        - destinationUrl: "*.docker.com"
          destinationType: external
        - destinationUrl: "*.docker.io"
          destinationType: external
        - destinationUrl: "*.googleapis.com"
          destinationType: external
        - destinationUrl: "github.com"
          destinationType: external
        - destinationUrl: "collect.traefik.io"
          destinationType: external
        - destinationUrl: "contracts.canonical.com"
          destinationType: external
        - destinationUrl: "database.clamav.net"
          destinationType: external
        - destinationUrl: "esm.ubuntu.com"
          destinationType: external
        - destinationUrl: "livepatch.canonical.com"
          destinationType: external
        - destinationUrl: "motd.ubuntu.com"
          destinationType: external
        - destinationUrl: "update.traefik.io"
          destinationType: external
        sourceIpRange:
        - addressPrefix: "0.0.0.0"
          prefixLen: 0
    

    W przypadku debugowania lub eksperymentowania można zmienić wartość parametru loglevel na debugowanie.

  2. Utwórz zasób niestandardowy, aby utworzyć wystąpienie zarządzania siecią warstwową.

    kubectl apply -f lnm-cr.yaml
    
  3. Wyświetl usługę Kubernetes zarządzania siecią warstwową:

    kubectl get services -n azure-iot-operations
    
    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
    

Dodawanie konfiguracji iptables dla usługi AKS Edge Essentials

Ważne

Ten krok ma zastosowanie tylko w przypadku hostowania warstwowego zarządzania siecią w klastrze AKS Edge Essentials.

Wdrożenie zarządzanie siecią warstwową tworzy usługę Kubernetes typu LoadBalancer. Aby upewnić się, że usługa jest dostępna spoza klastra Kubernetes, należy zamapować porty podstawowego hosta systemu Windows na odpowiednie porty w usłudze Zarządzania siecią warstwową.

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

Po pomyślnym uruchomieniu tych poleceń ruch odbierany na portach 443 i 10000 na hoście systemu Windows jest kierowany do usługi Kubernetes. Podczas konfigurowania dostosowanego systemu DNS dla warstwy sieciowej na poziomie podrzędnym należy kierować ruch sieciowy do adresu IP tego hosta systemu Windows, a następnie do usługi Zarządzania siecią warstwową uruchomioną na niej.