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.
- Kategoria Klaster połączony z usługą Arc i usługa GitOps usługi AKS Edge Essentials w usłudze AKS Edge Essentials - i macierz obsługi
- Wymagania systemowe platformy Kubernetes z włączoną usługą K3S dla klastra - Kubernetes z obsługą usługi Azure Arc
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
Ubuntu 22.04 LTS jest zalecaną wersją dla maszyny hosta.
Zainstaluj program Helm 3.8.0 lub nowszy.
Zainstaluj narzędzie Kubectl.
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.
Zainstaluj interfejs wiersza polecenia platformy Azure. Wykonaj kroki opisane w temacie Instalowanie interfejsu wiersza polecenia platformy Azure w systemie Linux.
Zainstaluj connectedk8s i inne rozszerzenia.
az extension add --name connectedk8s az extension add --name k8s-extension
Tworzenie klastra K3S
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.Skopiuj plik yaml konfiguracji K3s do
.kube/config
pliku .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
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
Ustaw zmienne środowiskowe dla kroków konfiguracji. Zastąp wartości
<>
prawidłowymi wartościami lub wybranymi nazwami. ElementCLUSTER_NAME
iRESOURCE_GROUP
są tworzone na podstawie nazw, które podajesz. Zapoznaj się z regionami obsługiwanymi przez operacje usługi Azure IoT, aby wybrać elementLOCATION
.# 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>"
Ustaw kontekst subskrypcji platformy Azure dla wszystkich poleceń:
az account set -s $SUBSCRIPTION_ID
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"
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
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ą
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
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ą.
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.
Utwórz zasób niestandardowy, aby utworzyć wystąpienie zarządzania siecią warstwową.
kubectl apply -f lnm-cr.yaml
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.